期末预测之最佳阈值
第21次CCF计算机软件能力认证
202012-2
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int N=100010;
#define x first
#define y second
typedef pair<int,int> PII;
PII q[N];
int s[2][N];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++) scanf("%d%d",&q[i].x,&q[i].y);
sort(q+1,q+1+n);
//通过下面这个循环求前缀和。
for(int i=1;i<=n;i++)
{
for(int j=0;j<=1;j++)
{
s[j][i]=s[j][i-1]+(j==q[i].y);//此处s[0][n]表示q的前n项中q.y=0的个数,s[1][n]表示q的前n项中q.y=1的个数。
}
}
int cnt=-1,res;
for(int i=1;i<=n;i++)
{
int j=i;
while(j+1<=n&&q[i].x==q[j+1].x) j++;//实现q.x中重复的取最后一位
int t=s[0][i-1]+s[1][n]-s[1][i-1];//求前i-1项中q.y为0的个数和第i项到最后一项q.y为1的个数的和。
if(t>=cnt) cnt=t,res=q[i].x;
i=j;
}
cout<<res;
return 0;
}
思路代码来自yxc,acwing学习链接