JiLi Number (打表)
阿新 • • 發佈:2018-12-18
思路:總共到100000000000有 83個數,所以打表列出很方便。(一開始用大數做了好久,超時)
#include<iostream> #include<cstdio> #include<cstring> using namespace std; typedef long long LL; LL ch[120]; char str[120]; int main(void) { ch[1]=1; ch[2]=199981; ch[3]=199982; ch[4]=199983; ch[5]=199984; ch[6]=199985; ch[7]=199986; ch[8]=199987; ch[9]=199988; ch[10]=199989; ch[11]=199990; ch[12]=200000; ch[13]=200001; ch[14]=1599981; ch[15]=1599982; ch[16]=1599983; ch[17]=1599984; ch[18]=1599985; ch[19]=1599986; ch[20]=1599987; ch[21]=1599988; ch[22]=1599989; ch[23]=1599990; ch[24]=2600000; ch[25]=2600001; ch[26]=13199998; ch[27]=35000000; ch[28]=35000001; ch[29]=35199981; ch[30]=35199982; ch[31]=35199983; ch[32]=35199984; ch[33]=35199985; ch[34]=35199986; ch[35]=35199987; ch[36]=35199988; ch[37]=35199989; ch[38]=35199990; ch[39]=35200000; ch[40]=35200001; ch[41]=117463825; ch[42]=500000000; ch[43]=500000001; ch[44]=500199981; ch[45]=500199982; ch[46]=500199983; ch[47]=500199984; ch[48]=500199985; ch[49]=500199986; ch[50]=500199987; ch[51]=500199988; ch[52]=500199989; ch[53]=500199990; ch[54]=500200000; ch[55]=500200001; ch[56]=501599981; ch[57]=501599982; ch[58]=501599983; ch[59]=501599984; ch[60]=501599985; ch[61]=501599986; ch[62]=501599987; ch[63]=501599988; ch[64]=501599989; ch[65]=501599990; ch[66]=502600000; ch[67]=502600001; ch[68]=513199998; ch[69]=535000000; ch[70]=535000001; ch[71]=535199981; ch[72]=535199982; ch[73]=535199983; ch[74]=535199984; ch[75]=535199985; ch[76]=535199986; ch[77]=535199987; ch[78]=535199988; ch[79]=535199989; ch[80]=535199990; ch[81]=535200000; ch[82]=535200001; ch[83]=1111111110; while(~scanf("%s",str)) { LL l=1,r=83,ans=-1,len=strlen(str),sum=0,i; if(len>10) { printf("83 1111111110\n");continue; } for(i=0;i<len;i++) sum=sum*10+str[i]-'0'; while(l<=r) { int mid=(l+r)>>1; if(sum<ch[mid]) r=mid-1; else l=mid+1,ans=mid; } printf("%lld %lld\n",ans,ch[ans]); } return 0; }