CCF-202012-2—期末预测之最佳阈值
题目:
代码:
#include <iostream>
#include <algorithm>
using namespace std;
int f(int a[],int n,int size){
int left=0,right=size-1,middle;
int flag=0;
while(left<right){
middle=(left+right)/2;
if((middle==left)||(middle==right)){
if(n==a[left]){
flag=left;
break;
}else if(n==a[right]){
flag=right;
break;
}
if(n<a[left]){
flag=left;
break;
}else if(n<a[right]){
flag=right;
break;
}else{
flag=right+1;
break;
}
}
if(a[middle]<n){
left=middle;
flag=left;
}else if(a[middle]>n){
right=middle;
flag=right;
}else{
flag=middle;
break;
}
}
return flag;
}
int main(){
int m;
cin>>m;
int y,r;//存y和result
int cmax=0,vmax=0;//cmax存储到目前为止最大的次数,vamx存储到目前为止最大的值
int flag=0,b1=0,c1=0;
int a[m],b[m],c[m];//b[m]存储挂科,c[m]存储不挂科
for(int i=0;i<m;i++){
cin>>y>>r;
a[i]=y;
if(r==0){
b[b1]=y;
b1++;
}else{
c[c1]=y;
c1++;
}
}
std::ios_base::sync_with_stdio(false);
sort(b,b+b1);
sort(c,c+c1);
int j=0;
while(j<m){
flag=0;
flag+=f(b,a[j],b1);
flag+=c1-f(c,a[j],c1);
if(flag>cmax){
cmax=flag;
vmax=a[j];
}else if(flag==cmax){
if(vmax<a[j])
vmax=a[j];
}
j++;
}
std::ios_base::sync_with_stdio(false);
cout<<vmax;
return 0;
}