| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:终于不打表AC,282ms,放出代码,求更快的解法……In Reply To:终于不打表AC,282ms,放出代码,求更快的解法…… Posted by:alexneko at 2008-07-12 16:14:45 #include <stdio.h>
bool JS(int k,int m) //判断以 m 报数是否满足条件
{
int i=0;
int len=2*k;
while (len>k) //最多报数len次
{
i=(i+m-1)%len; //当i=0时,计算出的i为以m报数第一个出队的坏人的编号
if (i<k) return 0;
len--;
}
return 1;
}
int GetNum(int k) // 枚举 (k+1)的倍数 或 (k+1)的倍数加 1
{
int i=k+1;
while (1)
{
if(JS(k,i)) return i;
if(JS(k,i+1)) return i+1;
i+=(k+1);
}
}
int main()
{
int i,n;
int f[14];
//将所有的可能值枚举到数组 x 里
for(i=1;i<14;i++)
f[i]=GetNum(i);
while(scanf("%d",&n),n)
printf("%d\n",f[n]);
}
47MS
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator