蒟蒻求助!小学奥数的方法只有20分

P2602 [ZJOI2010] 数字计数

hack: 19 20
by chenbinyi @ 2022-08-04 07:35:25


hack: 1 1
by chenbinyi @ 2022-08-04 07:38:35


@[w9095](/user/569235)
by chenbinyi @ 2022-08-04 07:40:38


@[chenbinyi](/user/123806) 谢谢大佬
by w9095 @ 2022-08-04 09:16:22


```cpp #include <bits/stdc++.h> using namespace std; long long a,b; unsigned long long ans[10],ans2[10]; unsigned long long k; int main() { unsigned long long i,m,n=1; scanf("%lld%lld",&a,&b); for(i=1;i<=b;i*=10) for(unsigned long long j=0;j<10;j++) { k=(j+1)*i-1; if(k>b)break; m=b-k; ans[(j+1)%10]+=(m/(i*10))*i; if(m%(i*10)!=0) if(m%(i*10)>i)ans[(j+1)%10]+=i; else ans[(j+1)%10]+=m%(i*10); //printf("%d %d ",i,m); //for(int k=0;k<10;k++) // printf("%d ",ans[k]); //printf("\n"); } //if(b%10==0)ans[1]++; if(a!=1) { b=a-1; for(i=1;i<=b;i*=10) for(unsigned long long j=0;j<10;j++) { k=(j+1)*i-1; if(k>b)break; m=b-k; ans2[(j+1)%10]+=(m/(i*10))*i; if(m%(i*10)!=0) if(m%(i*10)>i)ans2[(j+1)%10]+=i; else ans2[(j+1)%10]+=m%(i*10); //printf("%d %d ",i,m); //for(int k=0;k<10;k++) // printf("%d ",ans[k]); //printf("\n"); } //if(b%10==0)ans2[1]++; if(a==2)ans2[1]++; } for(int k=0;k<10;k++) printf("%d ",ans[k]-ans2[k]); return 0; } ``` 新版本,30分了
by w9095 @ 2022-08-04 12:15:20


@[w9095](/user/569235) 你的输出怎么回事?自己看看,下次注意了
by chenbinyi @ 2022-08-04 13:52:33


输出负数,就要检查有没有溢出了
by chenbinyi @ 2022-08-04 13:54:25


@[chenbinyi](/user/123806) 我再看看 ~~会不会这题被我做成高精度了(小声~~
by w9095 @ 2022-08-04 17:22:15


@[chenbinyi](/user/123806) 找到问题了! 倒数第三行的 "%d" 谢谢大佬指教,感激不尽!
by w9095 @ 2022-08-04 17:28:58


已AC,此贴终
by w9095 @ 2022-08-04 17:29:41


|