提交时间:2023-08-14 12:16:44

运行 ID: 98095

#include<cstdio> typedef long long ll; inline ll read(){ ll x=0; int f=0,ch=0; while(ch<48||ch>57) f=(ch=='-'),ch=getchar(); while(ch>47&&ch<58) x=(x<<3)+(x<<1)+(ch&15),ch=getchar(); return f?-x:x; } inline void write(ll x,char end='\n'){ if(x==0){ putchar('0'); putchar(end); return; } if(x<0) putchar('-'),x=-x; int ch[70]={0},cnt=0; while(x){ ch[cnt++]=(int)(x%10); x/=10; } while(cnt--) putchar(ch[cnt]+48); putchar(end); } const int N=2e5+5; int n; ll a[N]; ll sum[N][20]; ll ans; inline ll check(ll x){ ll s=0; while(x){ s+=x%10; x/=10; } return s; } inline void calc(){ for(int i=1;i<=n;++i){ for(int j=1;j<i;++j) ans+=2*check(a[i]+a[j]); ans+=check(a[i]+a[i]); } } int main(){ n=read(); for(int i=1;i<=n;++i) a[i]=read(); if(n<=5000){ calc(); write(ans); return 0; } ll sl=0; for(int i=1;i<=n;++i){ ll x=a[i]; int cnt=0; ll t=0; while(x){ t+=x%10; x/=10; } ans+=sl*2+t*(i-1)*2; sl+=t; x=a[i]; cnt=0; while(x){ ++cnt; ll y=x%10; for(int j=10-y;j<=9;++j) ans-=sum[j][cnt]*18; x/=10; } x=a[i]; cnt=0; while(x){ sum[x%10][++cnt]++; x/=10; } x=a[i]+a[i]; while(x){ ans+=x%10; x/=10; } } write(ans); return 0; }