求助|复杂度爆炸了
查看原帖
求助|复杂度爆炸了
429818
Smithespics楼主2023/3/10 09:10

用STL写的,感觉思路没问题呜呜呜蒟蒻太弱了

#include<iostream>
#include<algorithm>
#include<vector>
#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n;
    vector<int> arr,value_counts;
    cin >> n;
    for(int i = 0;i < n;i++)
    {
        int temp;
        cin >> temp;
        arr.push_back(temp);
        if(find(value_counts.begin(),value_counts.end(),temp) == value_counts.end())
            value_counts.push_back(temp);
    }
    sort(value_counts.begin(),value_counts.end());
    int cnt = 0;
    for(vector<int>::iterator iter = value_counts.begin();iter != value_counts.end();iter++)
    {
        int right = count(arr.begin(),arr.end(),*iter)*(count(arr.begin(),arr.end(),*iter)-1)/2;
        int left  = count(arr.begin(),arr.end(),2*(*iter))*(count(arr.begin(),arr.end(),2*(*iter))-1)/2;
        cnt += left*right;
        for(vector<int>::iterator i = iter+1;i != value_counts.end();i++)
        {
            cnt += count(arr.begin(),arr.end(),*iter)*count(arr.begin(),arr.end(),*i)*count(arr.begin(),arr.end(),(*i)+(*iter))*(count(arr.begin(),arr.end(),(*i)+(*iter))-1)/2;
        }
    }

    cout << cnt%(1000000007);
    return 0;
}
2023/3/10 09:10
加载中...