| 随实验室开完年会归来,错过了GCJ Round2的时间,比较可惜。看了下结果发现ACRush大牛排到了第3,非常的orz。昨天小研究了一下ACRush写的baidu杀人游戏,添加了些自己的注释,发在这里。要是不知道题目就baidu一下吧。
#i nclude <stdio.h>
int n,m,T,r[10005],testcase,i,k;
int main(int argc,char *arg[])
{
freopen(arg[1],”r”,stdin);
for (scanf(”%d”,&testcase);testcase>0;testcase–)
{
scanf(”%d%d%d”,&n,&m,&T);
for (k=1,i=n;i>2;i–)
{
k=(k+m-2)%i+1; // 被杀的人的后面所有人的号码减一
if (k==T) k=k%i+1; // 如果为T,则加一
r[i]=k; // 保存被杀者的号码
if (k<T) T–; //如果被杀的是比T还小的任务标号, 就把T减一
}
for(int i=1; i<=n; ++i) printf(”%4d”, r[i]);
printf(”\nT=%d\n”, T);
int result=3-T; // T为1或2,3-T表示最后剩下的人的号码
for (i=3;i<=n;i++)
if (r[i]<=result) // 在每轮中,如果被杀者的号码大于上一轮被杀的人,那么它的号码应该相对于上一轮小1 |