好久没有写博客了,一直找不到有意义的题可以写,这次也不算多么有意义,只是今天是比较空的一天,趁这个时候写一写。
A.
B.
有一点贪心,先把每个拿去3的倍数,余下0或1或2,然后三个一起拿。
对于以上的做法我们少考虑了一种情况:
即 a,b,c三个数对3取模以后为2 2 0
假如 c >= 3, 那么 我把c拿得只剩 3, 那么 2 2 3 可以拿2次, 而 以上的贪心只能拿1次。
所以这种情况还要加上一次
C.
先算出1个字符串周期分别在x,y方向上走了xx,yy步
所以它能到达的点必定是 Kxx+x0, Kyy+y0, (x0, y0)是一个字符串内能走到的所有点(K是非负数)。
所以我们就是要看看某个方程 a = Kxx+x0, b = Kyy+y0。只要有一个(x0, y0)让方程的K有解,那么Yes
否则No,这里我们要注意 当xx == 0时 a == x0情况下K的解才是任意非负数,同理yy也一样。
D.
我用贪心解的,考虑2种情况。假设两人的编号为A,B。A一直是atk的。
1.不能能把全部的def,atk打完。 这时我们不必管def,A从大到小排,B的atk从小到大排, A每次拿最大的去打B最小的(要能打赢才能算分) 即可。
2.能把全部的def,atk打完。 这时我们先必须打def,A从小到大排, B的def从小到大排,用A最小的去打B最小的(要能就打掉,不能就保存下来A)。然后剩下来的A(已经是从小到大的顺序),B的atk从小到大排,用A最小的去打B最小的(要能打赢才能算分,不能打掉的放到最后全打完以后打), 这里要注意 要判 def 和atk是否打完。
E.
适当分析一下,题目必然有解。
我的做法是 从叶子到根往上放。每个节点保存 它要放的字符和 以它为根的子树中 各个字母的有效总数
后一个信息的解释:
1.对于每个叶子我们都放Z,那么假如 有这么一颗树( u,v1,v2,v3), v1,v2,v2已经都放Z, 那么u就放Y,
那么对于 v1, v2,v3的3个Z考虑与否就不会影响往上放的时候的字母。v1,v2,v3这3个Z是无效的
2.相反, 有这么一颗树( u,v) v放Y,u放Z 那么下面的v是会影响往上放的时候的字母。v这个Y是有效的。
那么我们只要模拟这两种情况即可。对于每个子树的根u,有( u,v1,v2,v3,....),我们通过 “以u为根的子树中 各个字母的有效总数”这一信息来确定u要放什么字母。下面 所说的字母总和都是指有效字母。
先找出 字母总和 >= 2的最小的字母(下标k,字母标号0-----25)。然后从k----0的顺序找第一个 字母总和为0的字母。这个字母就是要放的字母。 假如有 C:1 D:2 Z: 2 这种情况我们放B ,假如有 B:1 D:2 Z: 2 这种情况我们放C, 然后我们还要清除失效的字母总和, 很显然对于 k的字母总和就为1, k+1------25就被清除了,都为0。