2 条题解
-
2
#include<bits/stdc++.h> using namespace std; int a[10],b[10]; void hh(int fw) { while(fw) { a[fw%10]++; fw/=10; } } void hh1(int fw) { int j=0; while(fw) { j++; b[fw%10]++; fw/=10; } if(j<4) b[0]=b[0]+4-j; } void hh2(int fw) { int j=0; while(fw) { // j++; a[fw%10]+=10000; fw/=10; } // if(j<4) // a[0]=a[0]+4-j; } int main() { int n,m; cin>>n; // cout<<n; if(n<=10000) { for(int i=1;i<=n;i++) hh(i); } else { for(int i=0;i<=9999;i++) { hh1(i); } for(int i=1;i<=9999;i++) { hh(i); } m=n/10000-1; for(int i=0;i<=9;i++) { a[i]+=b[i]*m; } for(int i=1;i<=m;i++) { hh2(i); } for(int i=(n/10000)*10000;i<=n;i++) { hh(i); } } for(int i=0;i<=9;i++) { cout<<a[i]<<endl; } }
-
0
暴力解决这道题,它真的不是我用了整整一个半小时硬熬出来的<哭>
#include<bits/stdc++.h> using namespace std; int a[10],nb[11]; long long int n; void cs(int b,int ws,int syw) { if(ws==1) { for(int i=1;i<=b;i++) { a[i]++; } } if(ws==2) { a[nb[2]]+=nb[1]; for(int i=1;i<=b;i++) { for(int j=0;j<=9;j++) { if(i==j+1&&j!=0)a[j]+=10; else { if(i==j)a[j]+=2; else a[j]++; } } } } if(ws==3) { a[nb[3]]+=nb[2]*10+nb[1]; if(nb[2]!=0)a[0]+=9; for(int i=1;i<=b;i++) { for(int j=0;j<=9;j++) { if(i==j+1&&j!=0)a[j]+=119; else { if(i==j&&i!=0)a[j]+=21; else { if(j==0&&i==1)a[j]+=11; else a[j]+=20; } } } } } if(ws==4) { a[nb[4]]+=nb[3]*100+nb[2]*10+nb[1]; if(nb[3]!=0)a[0]+=99+9; for(int i=1;i<=b;i++) { for(int j=0;j<=9;j++) { if(i==j+1&&j!=0)a[j]+=1299; else { if(i==j&&i!=0)a[j]+=301; else { if(j==0&&i==1)a[j]+=192; else a[j]+=300; } } } } } if(ws==5) { a[nb[5]]+=nb[4]*1000+nb[3]*100+nb[2]*10+nb[1]; if(nb[4]!=0)a[0]+=999+99+9; for(int i=1;i<=b;i++) { for(int j=0;j<=9;j++) { if(i==j+1&&j!=0)a[j]+=13999; else { if(i==j&&i!=0)a[j]+=4001; else { if(j==0&&i==1)a[j]+=2893; else a[j]+=4000; } } } } } if(ws==6) { a[nb[6]]+=nb[5]*10000+nb[4]*1000+nb[3]*100+nb[2]*10+nb[1]; if(nb[5]!=0)a[0]+=9999+999+99+9; for(int i=1;i<=b;i++) { for(int j=0;j<=9;j++) { if(i==j+1&&j!=0)a[j]+=149999; else { if(i==j&&i!=0)a[j]+=50001; else { if(j==0&&i==1)a[j]+=38894; else a[j]+=50000; } } } } } if(ws==7) { a[nb[7]]+=nb[6]*100000+nb[5]*10000+nb[4]*1000+nb[3]*100+nb[2]*10+nb[1]; if(nb[6]!=0)a[0]+=99999+9999+999+99+9; for(int i=1;i<=b;i++) { for(int j=0;j<=9;j++) { if(i==j+1&&j!=0)a[j]+=1599999; else { if(i==j&&i!=0)a[j]+=600001; else { if(j==0&&i==1)a[j]+=488895; else a[j]+=600000; } } } } } if(ws==8) { a[nb[8]]+=nb[7]*1000000+nb[6]*100000+nb[5]*10000+nb[4]*1000+nb[3]*100+nb[2]*10+nb[1]; if(nb[7]!=0)a[0]+=999999+99999+9999+999+99+9; for(int i=1;i<=b;i++) { for(int j=0;j<=9;j++) { if(i==j+1&&j!=0)a[j]+=16999999; else { if(i==j&&i!=0)a[j]+=7000001; else { if(j==0&&i==1)a[j]+=5888896; else a[j]+=7000000; } } } } } if(ws==9) { a[nb[9]]+=nb[8]*10000000+nb[7]*1000000+nb[6]*100000+nb[5]*10000+nb[4]*1000+nb[3]*100+nb[2]*10+nb[1]; if(nb[7]!=0)a[0]+=9999999+999999+99999+9999+999+99+9; for(int i=1;i<=b;i++) { for(int j=0;j<=9;j++) { if(i==j+1&&j!=0)a[j]+=179999999; else { if(i==j&&i!=0)a[j]+=80000001; else { if(j==0&&i==1)a[j]+=68888897; else a[j]+=8000000; } } } } } } int main() { int k=0,ds,ds1=1; int ws=1; cin>>n; ds=n; while(ds!=0) { nb[ds1]=ds%10; ds1++; ds=ds/10; } while(n!=0) { cs(n%10,ws,k); ws++; k=n%10; n=n/10; } for(int i=0;i<=9;i++) { cout<<a[i]<<endl; } }
- 1
信息
- ID
- 410
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 92
- 已通过
- 20
- 上传者