Hello 2019 Solution
A. Gennady and a Card Game
签到.
#include <bits/stdc++.h>
using namespace std; char s[], t[]; bool solve()
{
int flag = false;
for (int i = ; i <= ; ++i)
{
scanf("%s", t);
if (t[] == s[] || t[] == s[])
flag = true;
}
return flag;
} int main()
{
while (scanf("%s", s) != EOF) puts(solve() ? "YES" : "NO");
return ;
}
B. Petr and a Combination Lock
二进制枚举
#include <bits/stdc++.h>
using namespace std; int n, a[];
bool solve()
{
for (int i = ; i < ( << n); ++i)
{
int res = ;
for (int j = ; j <= n; ++j)
{
int vis = (i >> (j - )) & ;
res += a[j] * (vis ? : -);
}
if (res % == ) return true;
}
return false;
} int main()
{
while (scanf("%d", &n) != EOF)
{
for (int i = ; i <= n; ++i) scanf("%d", a + i);
puts(solve() ? "YES" : "NO");
}
return ;
}
C. Yuhao and a Parenthesis
Solved.
题意:
给出n个括号序列,求两两匹配成合法序列的最多对数
思路:
考虑单个括号序列最后一定可以化简成 ))) 或者 ((( 或者)))(((这三种形式
或者本身就是合法的
发现第三种)))(((不可能和别人两两匹配成合法序列
只需考虑))) 和 ((( 的配对以及本身就是合法序列的配对即可
#include <bits/stdc++.h>
using namespace std; #define N 500010
int n;
int l[N], r[N], good;
char s[N]; int main()
{
while (scanf("%d", &n) != EOF)
{
memset(l, , sizeof l);
memset(r, , sizeof r);
good = ;
for (int i = ; i <= n; ++i)
{
scanf("%s", s + );
int len = strlen(s + );
int left = , right = ;
for (int i = ; i <= len; ++i)
{
if (s[i] == '(') ++left;
else
{
if (left > ) --left;
else ++right;
}
}
if (left > && right > ) continue;
if (left == && right == ) ++good;
else if (left == ) ++r[right];
else ++l[left];
}
int res = ;
for (int i = ; i <= ; ++i) res += min(l[i], r[i]);
res += good / ;
printf("%d\n", res);
}
return ;
}
D. Makoto and a Blackboard
Upsolved.
题意:
$刚开始黑板上有一个n,我们假定此时在黑板上的数是v$
那么每次可以取$v的一个因数去替换这个数,求最后留下的数的期望$
思路:
我们假定$n一共有p个因数,以及dp[x][j] 表示进行n为x,并且进行j轮的期望$
易得转移方程
$dp[x][j] = \frac{\sum_{i = 1}^{i = p} dp[y][j - 1]}{p}$
那么很显然的一个递推就出来了,每次枚举n的每个因子,再枚举n的每个因子的每个因子,递推上去
T了,喵喵喵,(觉得个数会很少?
后来发现我们要求的只是 $dp[n][k]$
而且后面那部分的转移其实是可以拆的,拆成若干个因子期望的和/个数 再乘起来
那么我们质因子相同的放在一起做
这样就有前缀和性质
假设$n = x_1^{p_1} \cdot x_2 ^ {p_2} \cdots$
复杂度就是$O(p * k)$ 因为p不会太大
#include <bits/stdc++.h>
using namespace std; #define ll long long
#define N 10010
#define pli pair <ll, int>
const ll MOD = (ll)1e9 + ;
ll n; int k;
ll inv[N]; vector <pli> getfact(ll n)
{
vector <pli> res;
for (ll i = ; i * i <= n; ++i)
{
int need = ;
while (n % i == )
{
++need;
n /= i;
}
if (need) res.emplace_back(i, need);
}
if (n != ) res.emplace_back(n, );
return res;
} ll f(ll x, ll p)
{
vector <ll> dp(p + , );
dp[] = ;
for (int i = ; i <= p; ++i)
dp[i] = (dp[i - ] * x) % MOD;
for (int rep = ; rep < k; ++rep)
{
for (int i = ; i <= p; ++i) dp[i] = (dp[i - ] + dp[i]) % MOD;
for (int i = ; i <= p; ++i) dp[i] = (dp[i] * inv[i + ]) % MOD;
}
return dp[p];
} int main()
{
inv[] = ;
for (int i = ; i < N; ++i) inv[i] = inv[MOD % i] * (MOD - MOD / i) % MOD;
while (scanf("%lld%d", &n, &k) != EOF)
{
ll ans = ;
for (auto p : getfact(n))
ans = (ans * f(p.first, p.second)) % MOD;
printf("%lld\n", ans);
}
return ;
}
F. Alex and a TV Show
Unsolved.
题意:
$有n个可重集,有四种操作$
$1 \;\;x\;\; v\;\; 表示将第\;x\;个集合设为\;\;{v}$
$2 \;\;x \;\;y\;\; z\;\; 表示将\;y\;和\;z\;两个集合并起来 赋给 \;\;x$
$3 \;\;x \;\;y \;\;z\;\; 表示将\;\;y\;\;和 \;\;z\;\;两个集合求乘积,乘积的定义为\;\; {gcd(a, b | a \in A, \; b \in B)} \;\;赋给\;\;x$
$4 \;\; x\;\; v\;\; 表示询问\;\;v\;\;在\;\;x\;\;中出现的次数 \;\;MOD \;\;2$
思路:
对每一个可重集维护$f[i]表示i的倍数出现的次数的奇偶性,用bitset维护$
那么
对于1操作,我们只需要根号暴力就可以了
对于2操作,本来是相加,但是只关心奇偶性的话就是半加就好,即异或
对于3操作,本来是相乘,对应的位运算就是与
对于4操作,反演一下
我们令$F[n] 表示n倍数的出现次数$
那么有$F[n] = \sum\limits_{n | d} f[d]$
反演之后便是
$f[n] = \sum\limits_{n | d} \mu(\frac{d}{n}) \cdot F[d]$
这里的莫比乌斯函数1和-1没有区别,我们只关心奇偶性
#include <bits/stdc++.h>
using namespace std; #define N 100010
#define M 7010
#define D 7000
int n, q, mu[M];
bitset <M> a[M], b[M], s[N]; int main()
{
for (int i = ; i <= D; ++i) mu[i] = ;
for (int i = ; i <= D; ++i) for (int j = i * i; j <= D; j += i * i) mu[j] = ;
for (int i = ; i <= D; ++i) for (int j = i; j <= D; j += i)
{
a[j][i] = ;
if (mu[j / i]) b[i][j] = ;
}
while (scanf("%d%d", &n, &q) != EOF)
{
for (int i = ; i <= n; ++i) s[i].reset();
for (int i = , op, x, y, z, v; i <= q; ++i)
{
scanf("%d%d", &op, &x);
if (op == || op == )
{
scanf("%d", &v);
if (op == ) s[x] = a[v];
else putchar(((s[x] & b[v]).count() & ) + '');
}
else
{
scanf("%d%d", &y, &z);
if (op == ) s[x] = s[y] ^ s[z];
else s[x] = s[y] & s[z];
}
}
putchar('\n');
}
return ;
}
Hello 2019 Solution的更多相关文章
- CSP-S 2019 Solution
Day1-T1 格雷码(code) 格雷码是一种特殊的 \(n\) 位二进制串排列法,要求相邻的两个二进制串恰好有一位不同,环状相邻. 生成方法: \(1\) 位格雷码由两个 \(1\) 位的二进制串 ...
- AISing Programming Contest 2019 Solution
A - Bulletin Board 签到. #include <bits/stdc++.h> using namespace std; int main() { int n, h, w; ...
- KEYENCE Programming Contest 2019 Solution
A - Beginning 签到. #include <bits/stdc++.h> using namespace std; int main() { ]; while (scanf(& ...
- Cisco Common Service Platform Collector - Hardcoded Credentials(CVE-2019-1723)
Cisco Common Service Platform Collector - Hardcoded Credentials 思科公共服务平台收集器-硬编码凭证(CVE-2019-1723) htt ...
- COCI 2018/2019 CONTEST #2 T4 Maja T5Sunčanje Solution
COCI 2018/2019 CONTEST #2 T4 T5 Solution abstract 花式暴力 #2 T5 Sunčanje 题意 按顺序给你1e5个长方形(左下角坐标&& ...
- PowerBI更新2019/04 - 解决方案架构 - PowerBI Solution Architecture(一图胜万字!)
Power BI 架构图 (2019/04) 1) Power BI Desktop 是一个免费的工具.它可以用来准备和管理数据模型:包括链接各种数据:做数据清洗:定义关系:定义度量值和层级关系:应用 ...
- Solution -「JSOI 2019」「洛谷 P5334」节日庆典
\(\mathscr{Description}\) Link. 给定字符串 \(S\),求 \(S\) 的每个前缀的最小表示法起始下标(若有多个,取最小的). \(|S|\le3\time ...
- Solution -「CTS 2019」「洛谷 P5404」氪金手游
\(\mathcal{Description}\) Link. 有 \(n\) 张卡牌,第 \(i\) 张的权值 \(w_i\in\{1,2,3\}\),且取值为 \(k\) 的概率正比于 \ ...
- Solution -「CCO 2019」「洛谷 P5532」Sirtet
\(\mathcal{Description}\) Link. 在一个 \(n\times m\) 的网格图中,每个格子上是空白 . 或沙子 #,四联通的沙子会连成一个整体.令此时所有沙子块同 ...
随机推荐
- 添加app第一次启动页面
一.添加几个成员变量 @interface hDisplayView ()<UIScrollViewDelegate> { UIScrollView *_bigScrollView; NS ...
- java框架---->quartz整合spring(一)
今天我们学习一下quartz的定时器的使用.年轻时我们放弃,以为那只是一段感情,后来才知道,那其实是一生. quartz的简单实例 测试的项目结构如下: 一.pom.xml中定义quartz的依赖 & ...
- video事件
/** video播放器*/ * @ src: 指定所要嵌入视频.文档的URL. * @ poster: 视频预览图像 * @ autoplay: 视频自动播放 * @ loop: 循环播放 * @ ...
- C#IIS网站应用程序池启动回收停止 .
//添加应用程序池空间引用using System.DirectoryServices;using System.Text; using System.Text.RegularExpressions; ...
- 【BZOJ4452】[Cerc2015]Export Estimate 并查集
[BZOJ4452][Cerc2015]Export Estimate Description 给你一个n个点m条边的无向图,每条边有权值,我们可以选择一个整数lim来生成一个新的图,过程如下: 1 ...
- 【BZOJ2815】[ZJOI2012]灾难 拓扑排序+LCA
[BZOJ2815][ZJOI2012]灾难 题目描述 阿米巴是小强的好朋友. 阿米巴和小强在草原上捉蚂蚱.小强突然想,果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从 ...
- java对象转化成String类型
在java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能.本文将对常用的转换方法进行一个总结.常用的方法有Object#toString(),(String)要转换的对象,St ...
- jq简单城市二级联动实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Codeforces Round #438 by Sberbank and Barcelona Bootcamp (Div. 1 + Div. 2 combined)
A. Bark to Unlock 题目链接:http://codeforces.com/contest/868/problem/A 题目意思:密码是两个字符组成的,现在你有n个由两个字符组成的字符串 ...
- xplan-打印执行顺序
-- ------------------------------------------------------------------------------------------------- ...