Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:终于不打表AC,282ms,放出代码,求更快的解法……

Posted by shahdza at 2011-03-30 20:17:31 on Problem 1012
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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator