2011年11月20日星期日

POJ 1006 生理周期 暴力大水

以前做过,那时题目看得半懂不懂的。。。。原来这么水,囧~
运用数论的知识应该还可以优化。但信安数学基础学的不好啊,同余用不上。囧~
貌似用中国剩余定理可以做 = =
程序设计导演上面的解法也是不错的。。。。嘛
16ms = =!!
我的也要94ms....囧死



#include“cstdio”
int main()
{
int p,e,i,d,count = 1;
while(scanf("%d%d%d%d",&p,&e,&i,&d) && p != -1){
int res = 0;
for(int k = 0;k < 700;k ++){
i %= 33;           //这里wa了一次。囧~
res = i + 33 * k;     //取最大的除数33,效率比较高
if(!((res - e) % 28) && !((res - p) % 23) && res > d){
printf("Case %d: the next triple peak occurs in %d days.\n",count,res - d);
count ++;
break;
}
}
}
return 0;
}








优化算法:



while(scanf("%d%d%d%d", &p, &e, &i, &d) && p!=-1){
 for(j=d+1; j<21252; j++)
  if ((j-p)%23 == 0) break;
 for( ; j<21252; j=j+23)
   if ((j-e)%28 == 0) break;
 for( ; j<21252; j=j+23*28)
  if ((j-i)%33 == 0) break;
}




3个for...怎么就快了 = =

1 条评论: