《黑书》第一道枚举题,最高的wa次数15次,可作为以后精度计算的典型
http://acm.timus.ru/problem.aspx?space=1&num=1011
题意:就是有个城市有市民当售票员,比例超过总人数的p%而不到q%,求这个城市至少多少人?
思路:很明显的枚举,只要存在第一个num*p/100==num*1/100的情况,就可以输出num,但是其精度害死人,具体看代码:
#include<iostream> #include<stdio.h> #include<string.h> #include<math.h> using namespace std; int main() { double n,m; while(scanf("%lf%lf",&n,&m)>0) { int num=1; n+=1e-10; //要大于n m-=1e-10; //要小于m int x=0,y=0; while(x==y) { num++; x=(int)num*n/100; y=(int)num*m/100; } printf("%d\n",num); } return 0; }
上面是参考了别人思路的代码,下面是我自己思路的代码,当然,精度问题要是参考了别人的:
#include<iostream> #include<stdio.h> #include<string.h> #include<math.h> using namespace std; int main() { double n,m; while(scanf("%lf%lf",&n,&m)>0) { int num=1; n+=1e-6; m-=1e-6; n/=100.0; ; m/=100.0; for(num=2;;num++) { if(1.0/num<m) break; } int w=1; for(;num<=100000000;num++) { w=1; for(int j=1;j<=num;j++) { double tmp=(double)j/(double)num; if(tmp>m) break; if(n<tmp&&tmp<m) { w=0; break; } } if(w==0) break; } printf("%d\n",num); } return 0; }
唉,别人的思路ac耗时0.031s,而我的思路耗时:0.210s......真为自己智商着急......
朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。