「解题报告」Codeforces Educational Round 81

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))

[gcd(frac{a}{d},frac{m}{d})=gcd(frac{x+a}{d},frac{m}{d})=1 ]

从互质的关系入手进行考虑

所以答案就是(varphi(frac{m}{d}))

这个东西是可以在时限内求解的

E.Permutation Separation

暴力一眼就可以看出来,枚举分界点,然后左右两边统计答案即可,但复杂度是我们无法接受的

然后我们看我们可以优化哪一部分

(1^0) 枚举:这部分没有办法优化

(2^0) 统计答案

这里我们看每一个位置上的数字在什么时候会有增加答案

当这种有的位置可以改变答案的时候,我们就要考虑贡献法

由题意,分割点位置不同时,每个位置对于该状态下答案是否贡献是不同的

“是否贡献”还是连续的,直接上线段树维护就好

F.Good Contest

完全有理由质疑是不是弱化版的 ( m{APIO2016}) 划艇

原文地址:https://www.cnblogs.com/yspm/p/12255071.html