frog has n integers a1,a2,…,an
, and she wants to add them pairwise.
Unfortunately, frog is somehow afraid of carries (进位). She defines hardness h(x,y)
for adding x and y the number of carries involved in the calculation. For example, h(1,9)=1,h(1,99)=2
.
Find the total hardness adding n
integers pairwise. In another word, find
∑1≤i<j≤nh(ai,aj)
.
Input
The input consists of multiple tests. For each test:
The first line contains 1
integer n (2≤n≤105). The second line contains n integers a1,a2,…,an. (0≤ai≤109
).
Output
For each test, write 1
integer which denotes the total hardness.
Sample Input
2
5 5
10
0 1 2 3 4 5 6 7 8 9
Sample Output
1
20
#include <bits/stdc++.h>
using namespace std;
const long long inf=0x7ffffffffll+123;
vector<long long> ve1,ve2;
int main()
{
int n;
while(scanf("%d",&n)==1)
{
ve1.resize(n+1);
ve2.resize(n+1);ve2[n]=inf;
for(int i=0; i<n; i++)scanf("%lld",&ve1[i]);
long long ans=0,mod=10;
for(int l=0; l<10; l++,mod*=10)
{
for(int j=0; j<n; j++)ve2[j]=ve1[j]%mod;
sort(ve2.begin(),ve2.end());
for(int i=0; i<n; i++)
{
long long jinwei=mod-ve2[i];
if(jinwei > ve2[n-1])continue;
int loc=lower_bound(ve2.begin(),ve2.end(),jinwei)-ve2.begin();
if(loc > i)ans+=n-loc;
else ans+=n-i-1;
}
}
printf("%lld\n",ans);
}
}