首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Codeforces Round #207 (Div. 一)(A,B,C)

2013-10-18 
Codeforces Round #207 (Div. 1)(A,B,C)code:https://github.com/9974/Codeforces/tree/master/207div1A线

Codeforces Round #207 (Div. 1)(A,B,C)

code:https://github.com/9974/Codeforces/tree/master/207div1

A

线段树,并查集,set恶搞都可以。我保存了set恶搞的代码

B

两个串的长度为l1,l2,令d = gcd(l1,l2); 把串x,y以长度d做分割。 假设  l1=18, l2=27, d = 9

l1  分为2块, l2 分为3块    在长度为lcm(l1,l2)的情况下可以发现  l1 的 任何一块都会跟l2的任何一块匹配,

例如  l1的i位会和l2 的 i%d,i%d+d,i%d+2*d......i%d+k*d匹配。而且总长度一定是lcm(l1,l2)的倍数,之后乘以这个倍数即可。

C

先判断是否有解 。假设最后3剩余x个,4剩余y个     那么只要满足   3*x+4*y == sum  && x+y <= n

枚举其中一个未知数然后判断另一个即可。

假如同时有 1 2  那么 把1放到2上面去一定是最优的。

最后考虑1有剩余和2有剩余的情况

1.最后假如1有剩余, 如果1的个数超过三个那么一定是拿3个1是最优的。

        如果1有2个一定操作2次。 

        如果1有1个,如果当前有3, 把1给3, 操作1次

                              如果没有3, 那么一定是从2个4拿分别拿1个给1, 操作2次

2.最后假如2有剩余, 如果1的个数超过三个那么一定是拿3个2是最优的。

        如果2有2个,一定操作2次。 

        如果2有1个,如果当前有4, 把4拿下1个给2, 操作1次

                              如果没有4, 那么一定是把2分给2个3,操作2次



热点排行