Codeforces round338 div2

来源:互联网 发布:广东省干部网络 编辑:程序博客网 时间:2024/05/16 06:01

codeforces round338 div2总结

A:....
B:
英文阅读题啊...
先Dp出到每个点的最长上升序列,统计答案即可.
注意一下平时的习惯,这道题我一开始以为无所谓就搜索就t了,fst了之后才反应过来....
注意:开long long
C:
暴力跑kmp.(后缀自动机可以o(n)做).
D:
pp水爆了...
答案就是(i^c[i])连乘,c[i]为质数i在所有因子中出现的次数.
如何对于每一个i求出它的c[i]呢?
我们先枚举i的次方数j(即由几个i构成),再统计其他数的组合方式.
那么Ans[i]=(i^j)^( ((num[k]+1)连乘)(其中k不等于i)).(Ans[i]为i的贡献,num[k]为k出现的次数).
(用欧拉定理先将质数Mod fi(p)-1,即1000000006,再快速幂,就行了.(水的不行啊).)
注意这里的(num[k]+1)连乘不能先求出所有数连乘再乘上num[i]+1的逆元,因为要用欧拉定理,那怎么办呢?
记录一个前缀乘,一个后缀乘,就可以了.
E:
我们这样想,每一轮就等同于跑了一个六边形,那么每一轮的步数为6*k(k为当前轮数).
所以说1到k轮一共跑了((k)*(k+1)/2)*6步.我们可以二分求出k(注意二分的上界设大一点,当时因为这个wa了两次).
然后o(6)枚举看最后一步的状态是怎么样的(状态只有6中:左上,左,左下,右下,右,右上),每一种状态有k步.
然后不就行了吗.
(第k轮开始时,正好处于(2*k,0)这个位置).

0 0