pku 1662 还是找规律的

说明:这道题目感觉比较难想,开始我真的拿出了几枚硬币在那边试,试着把比较小的情况找出来,看能够找到一般的规律;
结果发现:似乎是部分有规律,还有的看着有规律,但是很难统一起来...到最后终于发现了似乎总的翻的次数和硬币总数有关,是硬币数的整数倍或者整数倍减一,(这个到现在我也不知道为什么),然后试着看某枚硬币回到原来状态需要多少,然后这样做,结果就对了^_^
#include<stdio.h>
int main()
{
 int t,n,k,k0,p,flag,ch;
 scanf("%d",&t);
 while(t--)
 {
  scanf("%d",&n);
  if(n==1)
  {
   printf("2\n");
   continue;
  }
  k=n/2,k0=n%2;
  p=1,flag=0,ch=0;
  if(k0)
  {
   do
   {
    if(p%2)
    {
     flag=1-flag;
     p=k+1-p/2;
    }
    else p=k+1+p/2;   
    ch++;
   }while(p!=1);
  }
  else
  {
   do
   {
    if(p%2)
     p=k+(p+1)/2;
    else
    {
     flag=1-flag;
     p=k-p/2+1;
    }   
    ch++;
   }while(p!=1);
  }
  __int64 ch2=ch;
  __int64 ans=ch2*n-flag;
  printf("%I64d\n",ans);
 }
 return 0;
}

posted on 2007-10-16 21:28  xmx  阅读(451)  评论(0)    收藏  举报

导航