提交时间:2023-08-14 12:35:04
运行 ID: 98225
#include<bits/stdc++.h> using namespace std; char buf1[2097152],*ip1=buf1,*ip2=buf1; inline int getc(){ return ip1==ip2&&(ip2=(ip1=buf1)+fread(buf1,1,2097152,stdin),ip1==ip2)?EOF:*ip1++; } template<typename T>void in(T &a) { T ans=0; bool f=0; char c=getc(); for(;c<'0'||c>'9';c=getc())if(c=='-')f=1; for(;c>='0'&&c<='9';c=getc())ans=ans*10+c-'0'; a=(f?-ans:ans); } template<typename T,typename... Args>void in(T &a,Args&...args) { in(a),in(args...); } int n,d,cnt[10],sum[200005][10]; long long p[16],t,ans; struct node{ int num[16]; long long v[16]; }a[200005]; bool cmp(node a,node b){ return a.v[d-1]<b.v[d-1]; } int main(){ p[0]=1; for(int i=1;i<16;i++)p[i]=p[i-1]*10; in(n); for(int i=1;i<=n;i++){ in(t); for(int j=0;j<16;j++)a[i].num[j]=t%10,t/=10; a[i].v[0]=a[i].num[0]; for(int j=1;j<16;j++)a[i].v[j]=a[i].num[j]*p[j]+a[i].v[j-1]; } for(int i=1;i<=n;i++)cnt[a[i].num[0]]++; for(int i=0;i<=9;i++)for(int j=0;j<=9;j++)ans+=1ll*(i+j)%10*cnt[i]*cnt[j]; for(d=1;d<16;d++){ sort(a+1,a+n+1,cmp),memset(sum,0,sizeof(sum)); for(int i=1;i<=n;i++){ for(int j=0;j<=9;j++)sum[i][j]=sum[i-1][j]; sum[i][a[i].num[d]]++; } for(int l=1,r=n;l<=n;l++){ while(a[l].v[d-1]+a[r].v[d-1]>=p[d])r--; for(int i=0;i<=9;i++)ans+=1ll*(i+a[l].num[d])%10*sum[r][i]; for(int i=0;i<=9;i++)ans+=1ll*(i+a[l].num[d]+1)%10*(sum[n][i]-sum[r][i]); } } return cout<<ans<<'\n',0; }