A. Taymyr is calling you
数据比较小,可以枚举每一次call的时间i*n, 然后检查 (i*n) % m 是否为0。如果为0,则答案加一。这种方法不需要想太多也不需要写太多。
数学上分析,答案为 z/lcm(n, m)。 lcm(n, m) 为n和m的最小公倍数,lcm(n, m) = n*m/gcd(n,m)。
B. Timofey and cubes
观察得出,对于前一半元素,每个位于奇数位的元素都和他对称位置上的元素交换(元素从1开始数,1-based,not 0-based)。
C. Timofey and a tree
可以想到,如果一条边上两个点的颜色不一样,那么这两个点中必有一个可以当作root,或者无解。因为如果不从两个点中取root,那么这条边一定在一个subtree里,继而这个subtree里有两个颜色不同的点,无解。所以我们遍历每条边,如果所有边的两个点颜色都一样,那么有解,任意一个点都可以当作root;如果找出一条端点颜色不同的边,我们就分别试一下它们能否当作root。如果至少有一个可行,就输出解,否则无解。测试是否能当root的方法只需dfs各个子树就好。
D. Timofey and rectangles
这道题给我们的直觉是一定存在解(4 color theorem)。题目中给出了重要的提示,所有长方形的边都是奇数。那么可以想到,对于两个相邻的长方形,它们右下角的点(x0,y0) and (x1, y1), 必然有 x0%2 != x1%2 或者 y0%2 != y1%2,因为他们的y和x坐标中的至少一个差了一个边长的单位(奇数长度)。所以,如果两个长方形右下角的点,x坐标的奇偶性相同,y坐标的奇偶性也相同,那么这两个长方形一定不会相邻。所以对于一个右下角为(x,y)的长方形,只需让他的颜色为(x%2)*2+y%2+1 就可以了。
E. Timofey