SOJ 4437 Carries(二分)

B - Carries
Time Limit:0MS     Memory Limit:0KB     64bit IO Format:%lld & %llu

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

1i<jnh(ai,aj) ∑1≤i<j≤nh(ai,aj)
.

Input

The input consists of multiple tests. For each test:

The first line contains  1 1 integer  n n ( 2n105 2≤n≤105). The second line contains  n n integers  a1,a2,,an a1,a2,…,an. ( 0ai109 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

题意:给你n个数,让你求解任意两个数相加,他们的进位个数之和
/*头文件模板*/

#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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值