注意。10是两位。

P1895 数字序列

原来如此
by МiсDZ @ 2017-12-05 17:10:47


```cpp #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int maxn=(1<<15)+3; const int inf=0x3f3f3f3fll; typedef long long ll; #define Fast register #define swap(x,y) x^=y,y^=x,x^=y #define min(a,b) a>b?b:a #define max(a,b) a<b?b:a inline char getc() { static char buf[1<<14],*p1=buf,*p2=buf; return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,1<<14,stdin),p1==p2)?EOF:*p1++; } inline ll read() { ll data=0,w=1; char ch=0; while(ch!='-'&&(ch<'0'||ch>'9'))ch=getc(); if(ch=='-') w=-1,ch=getc(); while(ch>='0'&&ch<='9') data=data*10+ch-48,ch=getc(); return data*w; } inline int get_num(int i) { int ans=1.0*log(i)/log(10); return ans+1; } ll lwd[maxn],ss[maxn],t,data,top,maxx=0;//lwd[i]存储实际的长度 inline void ak() { printf("%d",maxx); for(Fast int i=1;i<maxn;i++) { lwd[i]=lwd[i-1]+i; int k=get_num(i); k--; lwd[i]+=k*lwd[i]-pow(10,k+1); while(k>1) { lwd[i]+=(pow(10,k+1)-pow(10,k))*k; k--; } if(lwd[i]>maxn) maxx=i; return; } printf("%d",maxx); for(Fast int i=1;i<=maxx;i++) printf("%d ",lwd[i]); return; } int main() { ak(); int t=read(); //t=read(); //while(t--) { //data=read(); //int temp=lower_bound(ss+1,ss+1+maxn,data)-ss,ans; //printf("%d\n",temp); //if(ss[temp]>data) temp--; //printf("%d\n",temp); //data%=ss[temp]; //ans=(!data)?temp:data; //printf("%d\n",ans); } //return 0; } ```
by Explorer_CYC @ 2018-04-09 22:00:58


|