有没有大佬指点一下,tle了,只过了3个测试点
查看原帖
有没有大佬指点一下,tle了,只过了3个测试点
1047159
Hsyuan楼主2023/12/2 12:36
#include<bits/stdc++.h>
using namespace std;
vector<int> arr[5000];
long long C(long long m,long long n)
{
    long long s,t;
    s=t=1;
    for(long long i=n-m+1;i<=n;i++)
    {
        s*=i;
        if(t<=m)
            s/=t++;
    }
    return s;
}
int main()
{   
    ios::sync_with_stdio(false);
	cin.tie(0); 
    int n;
    int ans=0;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        int x;
        cin>>x;
        arr[x].push_back(x);
    }
    map<int,int> shu;
    for(int i=1;i<=5000;i++)
    {
        shu[i]=arr[i].size();
    }
    for(int i=2;i<=5000;i++)
    {
        if(shu[i]>=2)
        {
            for(int j=1;j<=i/2;j++)
            {
                if(i%2==0&&j==i/2)
                {
                    if(shu[i/2]>=2) ans+=C(2,shu[i/2])*C(2,shu[i]);
                }
                else if(shu[j]>=1&&shu[i-j]>=1)
                {
                    ans += C(1, shu[j]) * C(2, shu[i]) * C(1, shu[i - j]);
                }
            }
        }
    }
   cout<<ans%(1000000007);
}
2023/12/2 12:36
加载中...