这个题就是暴力+二分
公式是如果a%k^10+b%k^10>=k^10那么就溢出了
所以对k枚举9次
每次从前往后对每个元素进行二分查找,找到第一个符合公式的数,后面的数都符合溢出
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn = 1e5+100;
int a[maxn];
int b[maxn];
int main(){
int n;
while(~scanf("%d",&n)){
for(int i =0;i<n;++i){
scanf("%d",&a[i]);
}
int k = 1;
ll ans = 0;
for(int i =1;i<=9;++i){
k*=10;
for(int j = 0;j<n;++j){
b[j] = a[j]%k;
}
sort(b,b+n);
for(int i =0;i<n;++i){
int l = i+1;int r = n-1;
while(l<=r){
int mid = (l+r)>>1;
if(b[mid]+b[i]>=k){
r = mid-1;
}
else{
l = mid+1;
}
}
ans+=(n-l);
}
}
cout<<ans<<endl;
}
}