标签:problem i++ lang stdin open geo www. zoj str
找$[1$ ~ $a-1]$和$[1$ ~ $b]$中各数码出现的次数之后相减就是答案
上代码:
/************************************************************** Problem: 1833 User: zhangheran Language: C++ Result: Accepted Time:0 ms Memory:1292 kb ****************************************************************/ #include<iostream> #include<cstdio> #include<algorithm> using namespace std; long long a,b; long long f[17]; long long dp[17]; long long ansa[17]; long long ansb[17]; long long tot; long long qwq[17]; long long qaq[17]; int lena,lenb; int main() { // freopen("1.in","r",stdin); // freopen("1.out","w",stdout); scanf("%lld%lld",&a,&b); dp[0]=1; for(int i=1;i<=15;i++) f[i]=f[i-1]*10+dp[i-1], dp[i]=dp[i-1]*10; a--; while(a) qwq[++lena]=a%10,a/=10; while(b) qaq[++lenb]=b%10,b/=10; for(int i=lena;i>=1;i--){ long long now=0; for(int j=0;j<=9;j++) ansa[j]+=qwq[i]*f[i-1]; for(int j=0;j<qwq[i];j++) ansa[j]+=dp[i-1]; for(int j=i-1;j>0;j--) now*=10,now+=qwq[j]; ansa[qwq[i]]+=now+1; ansa[0]-=dp[i-1]; // printf("%lld %lld\n",qwq[i],ansa[qwq[i]]); } // puts(""); for(int i=lenb;i>=1;i--){ // printf("%lld ",qaq[i]); long long now=0; for(int j=0;j<=9;j++) ansb[j]+=qaq[i]*f[i-1]; for(int j=0;j<qaq[i];j++) ansb[j]+=dp[i-1]; for(int j=i-1;j>0;j--) now*=10,now+=qaq[j]; ansb[qaq[i]]+=now+1; ansb[0]-=dp[i-1]; // printf("%lld %lld\n",qaq[i],ansb[qaq[i]]); } // puts(""); for(int i=0;i<=9;i++) printf("%lld ",ansb[i]-ansa[i]); } //655 1044
标签:problem i++ lang stdin open geo www. zoj str
原文地址:https://www.cnblogs.com/cn-suqingnian/p/9374862.html