样例1输入
6
0 0
1 0
1 1
3 1
5 1
7 1
样例1输出
3
样例1解释
按照规则一,最佳阈值的选取范围为 0,1,3,5,7。
𝜃=0 时,预测正确次数为 4;
𝜃=1 时,预测正确次数为 5;
𝜃=3 时,预测正确次数为 5;
𝜃=5 时,预测正确次数为 4;
𝜃=7 时,预测正确次数为 3。
阈值选取为 1 或 3 时,预测准确率最高; 所以按照规则二,最佳阈值的选取范围缩小为 1,3。
依规则三,𝜃∗=max1,3=3。
样例2输入
8
5 1
5 0
5 0
2 1
3 0
4 0
100000000 1
1 0
样例2输出
100000000
子任务
70 的测试数据保证 𝑚≤200;
全部的测试数据保证 2≤𝑚≤105。
代码
#include<bits/stdc++.h>
using namespace std;
struct stu
{
int y;
int result;
};
map<int,int> mp;
bool cmp(stu &s1,stu &s2)
{
return s1.y<s2.y;
}
int main()
{
ios::sync_with_stdio(0);
int n,i,j;
cin>>n;
stu s[n];
for(i=0;i<n;i++)
{
cin>>s[i].y>>s[i].result;
mp[s[i].y]++;
}
sort(s,s+n,cmp);
int big=0;
int sum=0;
for(i=0;i<n;i++)
{
if(s[i].result==1)
{
sum++;
}
}
int m=sum;
for(i=0;i<n;i++)
{
for(int j=0;j<mp[(s[i].y)];j++){
if(s[i+j].result==0) sum++;
else sum--;
}
if(m<=sum)
{
m=sum;
big=i+mp[s[i].y];
}
i+=mp[s[i].y]-1;
}
cout<<s[big].y<<endl;
}