3 条题解
-
1
:::align{center} 小学奥数です
:::#pragma GCC optimize(2) #include<bits/stdc++.h> #define ll long long #define f(a,b) for(int i=a;i<=b;i++) #define fj(a,b) for(int j=a;j<=b;j++) #define fp(a,b) for(int p=a;p<=b;p++) #define fq(a,b) for(int q=a;q<=b;q++) #define debug cout<<"debug"<<endl #define end cout<<endl #define out(a) cout<<(a) #define cmax(a,b) a=max(a,b) #define time_test fprintf(stderr,"Time:%.6lf\n",(double)clock()/CLOCKS_PER_SEC) using namespace std; ll a,b; ll s(ll n,ll x){ ll cnt=0; for(ll i=1;n/i;i*=10)cnt+=n/i/10*i-(x==0?i:0),cnt+=(x<n%(i*10)/i?i:(x==n%(i*10)/i)*(n%i+1)); return cnt; } int main(){ cin>>a>>b; f(0,9)printf("%lld ",s(b,i)-s(a-1,i)); }
-
1
数位dp
#include <bits/stdc++.h> using namespace std; const int N=1e5+5; long long a,b,numa[10],numb[10],pow10[N],dp[N]; void init(){ pow10[0]=1; for(int i=1;i<=12;i++){ dp[i]=dp[i-1]*10+pow10[i-1]; pow10[i]=pow10[i-1]*10; } }void solve(long long n,long long *ans){ int len=0,tmp[15]; while(n){ tmp[++len]=n%10; n/=10; }for(int i=len;i>=1;i--){ for(int j=0;j<=9;j++){ ans[j]+=dp[i-1]*tmp[i]; }for(int j=0;j<tmp[i];j++){ ans[j]+=pow10[i-1]; }long long t=0; for(int j=i-1;j>=1;j--){ t=t*10+tmp[j]; }ans[tmp[i]]+=t+1; ans[0]-=pow10[i-1]; } } int main(){ cin>>a>>b; init(); solve(a-1,numa); solve(b,numb); for(int i=0;i<=9;i++){ cout<<numb[i]-numa[i]<<" "; } }
- 1
信息
- ID
- 485
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 9
- 标签
- 递交数
- 54
- 已通过
- 3
- 上传者