善用打表

HDU2089中使用朴素法由于多组数据会TLE,so采用打表记录下

但是自己打表156ms,看其他有的31ms远远低于我的,所以参考了下

一个100w的循环打表都是用了,但在下方的统计中他在循环时便已将下表以内的符合题意的号码顺便记录下来,这样使用时可直接调用,

而我采用bool记录了下标数是否是题意规定得数,统计时又要耗时,so以后注意看看能否在大循环中尽量多记录想要的数据,节省接下来的time。

#include<stdio.h>
int a[1000000]={0};
int main()
{
int i,n,m,d=0;
for(i=1;i<1000000;++i)
{
if(i%10==4||i/10%10==4||i/100%10==4||i/1000%10==4||i/10000%10==4||i/100000%10==4) d+=0;    //d即为当前i以内的符合题意数
else if(i%100==62||i/10%100==62||i/100%100==62||i/1000%100==62||i/10000%100==62) d+=0;
else ++d;
a[i]+=d;
}
while(scanf("%d%d",&n,&m)!=EOF&&n!=0||m!=0)
printf("%d ",a[m]-a[n-1]);
}

原文地址:https://www.cnblogs.com/zzqc/p/6283722.html