Codeforces Round #310 (Div. 2)
A. Case of the Zeros and Ones
Andrewid 允许同时删除一个仅由'0','1'组成的字符串中的'0','1',问你Andrewid 最终能得到一个最短的字符串的长度是多少。
ans = min(cnt('0'), cnt('1'));
B. Case of Fake Numbers
Andrewid有一排齿轮,相邻的齿轮靠在一起,其旋转方向相反。每次Andrewid能拨动齿轮转动一次,齿轮上有0~n-1的值,其中有个 active的值表示当前齿轮的值a[i],现在给出一排n个齿轮的当前值,问你是否能够转到n个齿轮按顺序排成(0, 1, 2, ...., n-1);
k = n-a[i] 得出总共要转多少下,(n + a[i] + flag * k) % n == i 判断每个位置是否转到真确位置。
flag表示当前转的方向顺时针为1,逆时针为-1。
C. Case of Matryoshkas
Andrewid 有n个娃娃,标号为1~n,小的标号的娃娃可以套在大的里面,每一秒可以把一个娃娃套在另一个娃娃上,也可以把一个娃娃拿出来,现在套好了k堆,要你用最小的时间吧这n个娃娃套在一起。
从1开始连续地数直到s后不连续了, 计算公式 (n-s) * 2 - (k-1) ,也就是说剩下的(n-s)个娃娃都要从原来的套好的堆中拆下来,并套回以1为开始的堆中。这样有两步操作,但是每堆中m个娃娃,拆完m-1个后剩下的那个便不用再拆一次了,于是减去(k-1).