始终比答案要大一点点
查看原帖
始终比答案要大一点点
492153
nanzjz1楼主2021/7/4 16:17

感觉算法没有出问题,但是总是比答案输出大

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<stdio.h>
using namespace std;
int H[5001], sum,mid;
const int ttr = 1000000000 + 7;
int main()
{
	int n,max=0,min=5001; cin >> n;
	for (int i = 0,m; i < n; i++)
	{
		scanf("%d", &m);
		max = m > max ? m : max;
		min = m < min ? m : min;
		H[m]++;
	}
	for (int i = min; i <= max; i++)
	{
		if (H[i]>=2)
		{
			for (int a = 1; a <=i/2; a++)
			{
				if (H[a]*H[i-a])
				{
					if (a==i-a&&H[a]>=2)
					{
						mid =( (H[a] * (H[a] - 1) / 2)%ttr *( H[i] * (H[i] - 1) / 2 )%ttr)% ttr;
					}
					else
					{
						mid = ((H[a] * H[i - a]%ttr) * ((H[i] * (H[i] - 1) / 2) % ttr))%ttr;
					}
					sum += mid;
				}
			}
		}
	}
	cout << sum%ttr ;
	return 0;
}
2021/7/4 16:17
加载中...