提交时间:2023-08-14 12:18:52
运行 ID: 98113
#include<bits/stdc++.h> using namespace std; const int N =1e6+10; #define int long long int a[N],n,sum[N]; bool f=true; int Getnum(int x){ int sum=0; while(x>0) (x%10<=4)?f=true:f=false,sum+=x%10,x/=10; return sum; } void Slove(){ int Ans=0; for(int i=1;i<=n;i++) for(int j=i;j<=n;j++){ // Ans+=Getnum(a[i]+a[j]); if(i==j) Ans+=Getnum(a[i]+a[j]); else Ans+=Getnum(a[i]+a[j])*2; } cout<<Ans<<endl; } void Slove2(){ int AnS=0; sort(a+1,a+n+1); for(int i=1;i<=n;i++) AnS+=sum[i]*(2*n); for(int i=1;i<=n;i++){ int pre=upper_bound(a+1,a+n+1,9-a[i])-a; if(pre==-1) continue; else AnS-=(n-pre+1)*9; } cout<<AnS<<endl; } signed main(){ // freopen("text.in","r",stdin); // freopen("ans1.out","w",stdout); bool Flag=true; cin>>n; for(int i=1;i<=n;i++) scanf("%lld",&a[i]); if(n<=5000) Slove(),exit(0); for(int i=1;i<=n;i++){ f=true; sum[i]=Getnum(a[i]); if(f==false) Flag=false; } if(Flag==true){ int ans=0; for(int i=1;i<=n;i++) ans+=sum[i]*(2*n); cout<<ans<<endl,exit(0); } Flag=true; for(int i=1;i<=n;i++) if(!(a[i]>=0&&a[i]<=9)) Flag=false; if(Flag==true) Slove2(),exit(0); } // 第一档分?