C
题意
走廊有两部分构成:内圈和外圈。内圈有n(n≤1018)个部分组成,外圈有m(m≤1018)个部分组成。有墙在每个部分中阻隔。但是内圈和外圈之间没有墙。并且在走廊的12点钟方向始终有一堵墙。
现在,有个人想要知道从(sx,sy)出发能否到达(ex,ey).他有q≤104个疑问。
对于每个疑问,回答是否能从给出的两个区间中的一个到达另一个。

key
思路
很容易想到将一圈分成n∗m个小格,内圈第k∗m格和第k∗m+1格之间有墙,外圈同理。所以在k∗lcm(n,m)和k∗lcm(n,m)+1之间内外都有墙,阻隔了两边。
那么将读入的(x,y)转化为小格表示,只要两个小格满足⌊(sy∗(norm)−1)/lcm(n,m)⌋=⌊(ey∗(norm)−1)/lcm(n,m)⌋就可以走通,否则不行。
假如用double来做爆精无疑,于是再把上下同除一个(norm),得到⌊(sy−1)∗gcd(n,m)/(norm)⌋=⌊(ey−1)∗gcd(n,m)/(norm)⌋,向下取整后结果肯定是一样的。
E
题意
Amugae有n个单词,他想把这个n个单词变成一个句子,具体来说就是从左到右依次把两个单词合并成一个单词.合并两个单词的时候,要找到最大的i(i≥0),满足第一个单词的长度为i的后缀和第二个单词长度为i的前缀相等,然后把第二个单词第i位以后的部分接到第一个单词后面.输出最后那个单词
key
思路
两种。
暴力一点,字符串哈希。每读进来一个字符串,暴力找前缀判断是否有原串的后缀和他一样,然后接上去。
题解思路是KMP。每次把新读进来的串s(strlen(s)=len)和原串的后len位并在一起合成一个新的字符串,然后跑一边KMP,最后一位的fail就是最长的重合部分。
复杂度一样,都是O(∑len(s))。但是用scanf读入char数组代替cin读入string反而会T。令人困惑。
F
题意
Gildong正在试验一个有趣的Graph Traveler,具体来说,这个Graph Traveler是个由n个编号为1-n的点构成的有向图,第i个点有mi条出边,边到达的点分别被记为ei[0],ei[1]...ei[mi−1]。每个点还有点权kik
现在有q个询问,每个询问要求从某个点开始,初始有个点权c,每次到一个点i(起点也算)就把点权c加上ki,然后走iii的出边ei[x](x≡cmodmi).可以发现这个过程是会一直进行下去的.现在问每次这样走,图上有多少个点会被经过无限次
∀mi≤10
key
思路
发现mi很小,所以对于那个权值c只要c1≡c2modlcm(1,2,...,10)走的路就完全等价。
所以建分层图暴力dfs。
明显没有D,E难,但VP的时候竟然没有花时间看这道题。
总结
题目比较简单的一套。
但是做的并不好。
要多注意细节。WA调不出来是真的痛苦。