For xinye666
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define int long long
using namespace std;
constexpr int N = 5e3 + 3;
int n,m;
int ans,sum,cnt;
int v[N],val[N],num[N],bel[N];
int s[10000010];
signed main()
{
cin >> n;
for(int i = 1;i <= n;i ++) cin >> v[i];
sort(v + 1,v + n + 1);
for(int i = 1;i <= n;i ++)
{
if(v[i] > v[i - 1]) val[++ m] = v[i];
num[m] ++,bel[i] = m;
}
for(int i = 1;i <= m;i ++)
{
if(num[i] >= 2)
{
sum = cnt = 0;
for(int l = 1,r = i - 1;l <= r;l++)
{
while(l <= r && val[l] + val[r] > val[i]) r --;
if(val[l] + val[r] != val[i] || l > r) continue;
if(l == r)
{
if(num[l] >= 4) cnt += num[l] * (num[l] - 1) * (num[l] - 2) * (num[l] - 3) / 2 / 3 / 4;
cnt += num[l] * (num[l] - 1) / 2 * sum;
}
else
{
if(num[l] >= 2 && num[r] >= 2) cnt += num[l] * (num[l] - 1) / 2 * num[r] * (num[r] - 1) / 2;
cnt += num[l] * num[r] * sum;
sum += num[l] * num[r];
}
}
ans += cnt * num[i] * (num[i] - 1) / 2;
}
}
for(int i = 1;i <= n;i ++)
{
for(int j = bel[i] + 1;j <= m;j ++) if(num[j] >= 3) ans += num[j] * (num[j] - 1) * (num[j] - 2) / 2 / 3 * (s[val[j] - v[i]]);
for(int j = 1;j < i;j ++) if(v[j] + v[i] <= v[n]) s[v[j] + v[i]] ++;
}
cout << ((ans == 0) ? -1 : ans) << '\n';
return 0;
}
与你的日常,便是奇迹

浙公网安备 33010602011771号