A
B

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;
}
posted @ 2025-11-06 18:09  MyShiroko  阅读(29)  评论(0)    收藏  举报