Description
Carries
frog has n n integers a1,a2,…,an a1,a2,…,an, and she wants to add them pairwise.
Unfortunately, frog is somehow afraid of carries (进位). She defines hardness h(x,y) h(x,y) for adding x x and y y the number of carries involved in the calculation. For example, h(1,9)=1,h(1,99)=2 h(1,9)=1,h(1,99)=2.
Find the total hardness adding n n integers pairwise. In another word, find
Input
The input consists of multiple tests. For each test:
The first line contains 1 1 integer n n ( 2≤n≤105 2≤n≤105). The second line contains n n integers a1,a2,…,an a1,a2,…,an. ( 0≤ai≤109 0≤ai≤109).
Output
For each test, write 1 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 <map>
#include <set>
#include <cmath>
#include <ctime>
#include <queue>
#include <vector>
#include <cctype>
#include <cstdio>
#include <string>
#include <cstring>
#include <sstream>
#include <cstdlib>
#include <iomanip>
#include <typeinfo>
#include <iostream>
#include <algorithm>
#include <functional>
using namespace std;
#define pb push_back
#define mp make_pair
#define mem(a, x) memset(a, x, sizeof(a))
#define copy(a, b) memcpy(a, b, sizeof(a))
#define lson rt << 1, l, mid
#define rson rt << 1|1, mid + 1, r
#define FIN freopen("input.txt", "r", stdin)
#define FOUT freopen("output.txt", "w", stdout)
typedef long long LL;
typedef pair<int, int > PII;
typedef pair<int, string> PIS;
typedef pair<LL, LL>PLL;
typedef unsigned long long uLL;
template<typename T>
void print (T* p, T* q, string Gap = " ", bool flag = false) {
int d = p < q ? 1 : -1;
while (p != q) {
if (flag) cout << Gap[0] << *p << Gap[1];
else cout << *p;
p += d;
if (p != q && !flag) cout << Gap;
}
cout << endl;
}
template<typename T>
void print (const T &a, string bes = "") {
int len = bes.length();
if (len >= 2) cout << bes[0] << a << bes[1] << endl;
else cout << a << endl;
}
template<typename T>
void debug (T* p, T* q, string Gap = " ", bool flag = false) {
#ifndef ONLINE_JUDGE
int d = p < q ? 1 : -1;
cout << "Debug out : ";
while (p != q) {
if (flag) cout << Gap[0] << *p << Gap[1];
else cout << *p;
p += d;
if (p != q && !flag) cout << Gap;
}
cout << endl;
#endif
}
template<typename T>
void debug (const T &a, string bes = "") {
#ifndef ONLINE_JUDGE
int len = bes.length();
cout << "Debug out : ";
if (len >= 2) cout << bes[0] << a << bes[1] << endl;
else cout << a << endl;
#endif
}
void IO_Init() {
ios::sync_with_stdio (false);
}
LL LLabs (const LL a) {
return a >= 0 ? a : -a;
}
const double PI = 3.1415926535898;
const double eps = 1e-10;
const int MAXM = 1e5 + 5;
const int MAXN = 1e5 + 5;
const int INF = 0x3f3f3f3f;
/*头文件模板*/
int n;
LL A[MAXN];
LL B[MAXN];
int main() {
#ifndef ONLINE_JUDGE
//FIN;
//FOUT;
#endif
IO_Init();
while(~scanf("%d", &n)) {
for(int i = 0; i < n; i ++) {
scanf("%lld", &A[i]);
}
LL k = 1;
LL ans = 0;
for(int i = 1; i <= 9; i ++) {
k *= 10LL;
for(int j = 0; j < n; j ++) {
B[j] = A[j] % k;
}
sort(B, B + n);
for(int j = 0; j < n; j ++) {
ans += j - (lower_bound(B, B + j, k - B[j]) - B);
}
debug("------------");
}
printf("%lld\n", ans);
}
return 0;
}