2017中国大学生程序设计竞赛-杭州站-重现赛

比赛题目:
http://acm.hdu.edu.cn/downloads/CCPC2018-Hangzhou-ProblemSet.pdf
A
签到题,最后奇数位和偶数位都要一样。


B
要求 sum{ phi(d)*n/d } ,假设 d 有质因子 p1, p2.....pk ,那么 d 的贡献是 phi(d) * n/d = d*(1-1/p1)*(1-1/p2)*....*(1-1/pk)*n/d = (1-1/p1)*(1-1/p2)*.....*(1-1/pk)*n 。
所以对于质因子 p1, p2....pk ,它的贡献是 (q1*q2*.....*qk) * (1-1/p1)*(1-1/p2)*......*(1-1/pk) * n 。
n 只有20, dfs 求一下就好了。
代码:https://paste.ubuntu.com/p/f4D33sZt7Q/


C
玄学博弈,猜出来的,,,要证明真证不出来。
假设 A 是选两次的,B 是选一次的。
结论是:轮到 A 时,如果剩下全是 1,且个数是 3 的倍数,那 A 就输了;否则 A 必赢。
所以如果 d1,那看是不是这种情况; 如果 d2,那看 B 取一次能否变成这种情况。


D
赛后队友打表找规律给补出来了,我是很服气的。。。


J
签到题,统计 2 和 3 的个数即可。


K
题意:两个数组 a[]、b[],三种操作:更改 a[],更改 b[],求最小的 t 使得 k <= sum{ floor( (t-b[i])/a[i] ) } 。
很有意思的一个题。
明显二分,但该怎么快速 check ?
考虑对于 (t-b[i])/a[i] ,要向下取整,设 t = k1*a[i]+b1, b[i] = k2*a[i]+b2 ,那么 (t-b[i])/a[i] = k1-k2 + (b1-b2)/a[i] , 假定 ans = k1-k2 。
如果 b1-b2<0 ,则 ans -= 1 ;否则 ans 不用变。这样就把向下取整化掉了。
注意 a[i] 只有1000
求 k2 用一个数记录即可,求 k1 跑1000就好。而求 (b1-b2)/a[i] 维护1000个树状数组,对于一个 b1 和 a[i],看有多少个 b2 大于 b1 。
代码:https://paste.ubuntu.com/p/RBQkhPWNhb/


弱渣只能补这几个题了

posted @ 2018-04-19 18:19  v9fly  阅读(134)  评论(0编辑  收藏  举报