私の北京大学ACM POJ 1012解答
6917 ワード
最初は簡単だと思っていましたが、やっているうちに注意しなければならないことが多いことに気づきました.この問題は必ず計算した値を保存しなければなりません.
そうでないとTLEになります.
Source Code
Problem: 1012
User: absolute
Memory: 204K
Time: 47MS
Language: C++
Result: Accepted Source Code
そうでないとTLEになります.
Source Code
Problem: 1012
User: absolute
Memory: 204K
Time: 47MS
Language: C++
Result: Accepted
#include <stdio.h>
void POJ1012();
//int result[]={0,2,7,5,30,169,441,1872,7632,1740,93313,459901,1358657,2504881};
int main()
{
POJ1012();
return 0;
}
void POJ1012()
{
int i,k;
int result[14]={0};
scanf("%d",&k);
while(k!=0)
{
// printf("%d
",result[k]);
int leftguys,m,flag,cur,next;
i=1;
while(true)
{
if(result[k]!=0)
{
printf("%d
",result[k]);
break;
}
//m ,cur , 0
//m k+1 k+1 1,
// K+1 ,cur k k+1
m=(k+1)*i;
for(int j=0;j<2;j++)
{
cur=-1;
flag=true;
for(leftguys=2*k;leftguys>k;--leftguys)
{
next = (cur+m)%leftguys;
if(next<k)
{
flag=false;
break;
}
cur = next-1;
}
if(flag)
{
printf("%d
",m);
result[k]=m;
break;
}
m=(k+1)*i+1;
}
if(flag)
break;
++i;
}
scanf("%d",&k);
}
}