C

题意

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

codeforces 1200(div2)题解

key

  • gcd
  • 精度

思路

很容易想到将一圈分成nmn*m个小格,内圈第kmk*m格和第km+1k*m+1格之间有墙,外圈同理。所以在klcm(n,m)k*lcm(n,m)klcm(n,m)+1k*lcm(n,m)+1之间内外都有墙,阻隔了两边。

那么将读入的(x,y)(x,y)转化为小格表示,只要两个小格满足(sy(n  or  m)1)/lcm(n,m)=(ey(n  or  m)1)/lcm(n,m)\lfloor(sy*(n\; or\; m)-1)/lcm(n,m)\rfloor=\lfloor(ey*(n\; or\; m)-1)/lcm(n,m)\rfloor就可以走通,否则不行。

假如用double来做爆精无疑,于是再把上下同除一个(n  or  m)(n\; or\; m),得到(sy1)gcd(n,m)/(n  or  m)=(ey1)gcd(n,m)/(n  or  m)\lfloor(sy-1)*gcd(n,m)/(n\; or\; m)\rfloor=\lfloor(ey-1)*gcd(n,m)/(n\; or\; m)\rfloor,向下取整后结果肯定是一样的。

E

题意

Amugae有n个单词,他想把这个n个单词变成一个句子,具体来说就是从左到右依次把两个单词合并成一个单词.合并两个单词的时候,要找到最大的i(i0)i(i\ge 0),满足第一个单词的长度为ii的后缀和第二个单词长度为ii的前缀相等,然后把第二个单词第ii位以后的部分接到第一个单词后面.输出最后那个单词

key

  • kmp
  • 哈希
  • string (char*)

思路

两种。

暴力一点,字符串哈希。每读进来一个字符串,暴力找前缀判断是否有原串的后缀和他一样,然后接上去。

题解思路是KMP。每次把新读进来的串s(strlen(s)=len)s(strlen(s)=len)和原串的后lenlen位并在一起合成一个新的字符串,然后跑一边KMP,最后一位的failfail就是最长的重合部分。

复杂度一样,都是O(len(s))O(\sum len(s))。但是用scanf读入char数组代替cin读入string反而会T。令人困惑。

F

题意

Gildong正在试验一个有趣的Graph Traveler,具体来说,这个Graph Traveler是个由n个编号为1-n的点构成的有向图,第i个点有mim_i​条出边,边到达的点分别被记为ei[0],ei[1]...ei[mi1]e_i[0],e_i[1]...e_i[m_i-1]。每个点还有点权kikk_ik

现在有qq个询问,每个询问要求从某个点开始,初始有个点权cc,每次到一个点ii(起点也算)就把点权cc加上kik_i​,然后走iii的出边ei[x](xcmod  mi)e_i[x](x \equiv c\mod m_i).可以发现这个过程是会一直进行下去的.现在问每次这样走,图上有多少个点会被经过无限次

mi10\forall m_i \le 10

key

  • 分层图
  • dfs

思路

发现mim_i很小,所以对于那个权值cc只要c1c2mod  lcm(1,2,...,10)c_1\equiv c_2 \mod lcm(1,2,...,10)走的路就完全等价。

所以建分层图暴力dfs。

明显没有D,ED,E难,但VP的时候竟然没有花时间看这道题。

总结

题目比较简单的一套。

但是做的并不好。

要多注意细节。WA调不出来是真的痛苦。

相关文章: