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\) 的网格图中,每个格子上是空白 . 或沙子 #,四联通的沙子会连成一个整体.令此时所有沙子块同 ...
随机推荐
- 基于Cocos2d-x学习OpenGL ES 2.0系列——初识MVP(3)
在上一篇文章中,我在介绍vertex shader的时候挖了一个坑:CC_MVPMatrix.它其实是一个uniform,每一个Cocos2d-x预定义的shader都包含有这个uniform,但是如 ...
- poj_3436 网络最大流
题目大意 生产电脑的工厂将一台电脑分成P个部件来进行流水线生产组装,有N个生产车间,每个车间可以将一个半成品电脑添加某些部件,使之成为另一个半成品电脑或者成为一台完好的电脑,且每个车间有一个效率,即在 ...
- 把 Activity 改成 ListActivity继续使用 setContentView
ListActivity has a default layout that consists of a single, full-screen list in the center of the s ...
- Oracle入门笔记 ——启动
参考教材<深入浅出Oracle> 兴趣 + 勤奋 + 坚持 + 方法 ≍ 成功 DBA生存之四大守则 1.备份重于一切: 2.三思而后行: 3.rm是危险的: 4.你来制定规范: 第一章: ...
- maven指定项目的构建、打包和tomcat插件的pom.xml配置
1.pom.xml添加如下配置: <build> <finalName>${parent.artifactId}</finalName> <plugins&g ...
- wamp环境解决局域网不能访问的问题!
安装好wamp后,想用手机通过局域访问电脑上wamp下的网页,结果出现如下提示403错误: 第一步:找到 conf 这个文件: 找到下图中红色方框中的onlineoffline tag - don’t ...
- 最小生成树的变形(次小生成树hdu4081)
hdu4081 Qin Shi Huang's National Road System Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- loading图标modal弹窗 和jquery ajax的关系
在ajax配置中 ,async:false,非异步,modal窗口会失效,只有重新设置为async:true,或者删除async的设置,则loading的模态框才能展示出来 loading图标的模态框 ...
- JAVAWEB Filter使用
Filter学习 1Filter是什么:是过滤器简称 2Filter有什么作用:在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可以使用Decorator ...
- ASM学习记录
代理: 代理模式: 静态代理: 动态代理:是指在运行期动态的为指定的类生成其代理类.(需要相关的运行时编译技术) Javassist:Javassist是一个运行时编译库,他能动态的生成或修改类的字节 ...