A.Display The Number
水题一道,直接(1)和(7)随便输出就行
B.Infinite Prefixes
这个题细节有一点点多
预处理出来(s)串中每一个前缀的(0)和(1)的差值,记为(a[space ])
看(a[s.length()])的值
(1^0) 如果为(0),就考虑正无穷的情况
如果有一个(a_i)的值与(x)相同,就直接为正无穷,否则为(0)
(2^0) 如果不为(0),就考虑同余
当前位置的(a[space])值和(x)是否关于(a[s.length()])同余即可
还要注意正负性
C. Obtain The String
其实就是一个简单的模拟,里面套了一个(upper_bound)(或者说二分)
预处理(s)中每一个字母出现的位置(开(26)个(vector)),每一次直接模拟(t)中的字母,记录最后出现的位置(las)
1.如果当前(t)中的字母(s)中没有,就直接(puts("-1"))
2.就直接二分(las)后该字母出现的第一个位置,更新(las)的值,如果没有了就(++ans),(las)为该字母第一个出现位置(结论由简单贪心直接成立)
D.Same GCDs
这是一道结论题,有两个做法,分别用了欧拉函数或一点点莫比乌斯反演
(这里只放欧拉函数的做法)
设(d=gcd(m,a))
从互质的关系入手进行考虑
所以答案就是(varphi(frac{m}{d}))
这个东西是可以在时限内求解的
E.Permutation Separation
暴力一眼就可以看出来,枚举分界点,然后左右两边统计答案即可,但复杂度是我们无法接受的
然后我们看我们可以优化哪一部分
(1^0) 枚举:这部分没有办法优化
(2^0) 统计答案
这里我们看每一个位置上的数字在什么时候会有增加答案
当这种有的位置可以改变答案的时候,我们就要考虑贡献法
由题意,分割点位置不同时,每个位置对于该状态下答案是否贡献是不同的
“是否贡献”还是连续的,直接上线段树维护就好
F.Good Contest
完全有理由质疑是不是弱化版的 ( m{APIO2016}) 划艇