csp202012月期末预测之最佳阈值

只得了20分,错误原因应该是时间复杂度的问题。

set::count()是C++ STL中的内置函数,它返回元素在集合中出现的次数。由于set容器仅包含唯一元素,因此只能返回1或0。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,Max=0,res;
int sum[N]={0};
set<int>st;
pair<int,int>pr[N];
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int a,b;
        cin>>a>>b;
        pr[i]=make_pair(a,b);
    }
    sort(pr+1,pr+n+1);//1.先排序
    for(int i=1;i<=n;i++)
        sum[i] =sum[i-1]+ pr[i].second;//2.求挂科情况前缀和 
    for(int i=1;i<=n;i++)
    {
        int a=pr[i].first;//选取阈值 
        if(st.count(a)) continue;//set去重 
        st.insert(a);
        int yuce1 = sum[n]-sum[i-1];//大于等于阈值时,应统计预测结果中为1的个数 
        int yuce0 = i-1-sum[i-1];//小与阈值时,应统计预测结果中为0的个数 
        int yuce = yuce1+ yuce0;//合计预测正确次数 
        if(yuce >= Max) {
            Max=yuce;
            res=a;
        }
    }
    cout<<res;
    return 0;
}
原文地址:https://www.cnblogs.com/h694879357/p/14585397.html