这是一道图论的结论并且附带一些数学推公式的题
题目链接:Problem - 1540A - Codeforces
题目如下
在教室推结论结果推错了找了半天bug哎
一下是代码
:因为乘的话有可能会爆long long 于是用int128去存了
#include<iostream>
#include<algorithm>
#include<cstring>
#include<unordered_map>
#include<vector>
using namespace std;
typedef long long int LL ;
typedef pair<__int128,__int128> PII;
const int N = 1e5 + 10;
LL a[N];
__int128 a1[N];
__int128 a2[N];
void print(__int128 x)
{
if(x < 0)
{
cout <<'-';
x = -x;
}
if(x > 9)
print(x/10);
putchar(x % 10 + '0');
}
int main()
{
int t;
cin >> t;
while(t--)
{
int n;
cin >> n;
unordered_map<LL,LL> mp;
int x;
LL num = 0 ;
for(int i = 1; i<= n ; i ++)
{
cin >> x;
if(i != 1 && x == 0)
{
num ++ ;
continue;
}
mp[x] ++ ;
}
vector<PII> v;
for(auto it : mp)v.push_back({it.first,it.second});
sort(v.begin(),v.end());
__int128 sum = 0 ;
a1[0] = 1;
for(int i = 0 ; i < v.size() ; i ++)
{
if(i)sum += (v[i].first - v[i-1].first);
if(i > 0)
{
a1[i] = a1[i-1] + v[i].second;
a2[i] = a2[i-1] + v[i].first * v[i].second;
sum -= (v[i].first * a1[i-1] - a2[i-1]) * v[i].second;
}
}
if(num)for(int i = 0 ; i < v.size() ; i ++)
{
sum -= v[i].first * v[i].second * num ;
}
print(sum);
cout <<endl;
}
}