帮忙看下哪里错了?
查看原帖
帮忙看下哪里错了?
237570
hy1089knigh楼主2020/8/3 15:50

第一个样例明明能算对啊,为什么全是TLE?

#include<cstdio>
#include<iostream>
#define ll long long
using namespace std;

const ll M=1e9+7;
int a[5001];

int main()
{
	ll n,i,j,x,t,maxx=0,minx=2147483647,cnt=0,ans=0;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		scanf("%lld",&x);
		a[x]++;
		maxx=max(maxx,x);
		minx=min(minx,x);
	}
	for(i=maxx;i>minx;i--)
	{
		if(a[i]>=2)
		{
			cnt=0;
			x=a[i]*(a[i]-1)/2;
			for(j=1;j<=i/2;j++)
			{
				t=i-j;
				if(a[t]&&a[j])
				{
					if(t!=j)
						cnt+=a[j]*a[t]%M;
					else
						cnt+=a[j]*(a[j]-1)/2%M;					
				}
			}
			ans+=cnt*x%M;
			ans%=M;
		}
	}
	printf("%lld",ans);
	return 0;
}
2020/8/3 15:50
加载中...