题目:
代码:
#include <iostream>
#include <algorithm>
using namespace std;
struct stu {
int y;
int result;
int succ0; //预测0成功次数
int succ1; //预测1成功次数
};
bool cmp(stu a,stu b) {
return a.y<b.y;
}
int main() {
int m;
cin>>m;
stu s[m];
for(int i=0; i<m; i++) {
cin>>s[i].y>>s[i].result;
s[i].succ0=s[i].succ1=0;
}
sort(s,s+m,cmp); //按照分数排序
//阈值即为某一个分数,某一个分数的预测成功次数最多即为阈值
//将每一个分数记为阈值,得到预测1成功的次数
//从后往前
if(s[m-1].result==1) s[m-1].succ1=1;
for(int i=m-2; i>=0; i--) {
if(s[i].result==1) {
s[i].succ1=s[i+1].succ1+1;
} else {
s[i].succ1=s[i+1].succ1;
}
}
//将每一个分数记为阈值,得到预测0成功的次数
//从前往后
int tem=0;
if(s[0].result==0) s[0].succ0=0;
for(int i=1; i<m; i++) {
if(s[i-1].result==0) {
tem++;
if(s[i].y>s[i-1].y) {
s[i].succ0=tem;
} else if(s[i].y==s[i-1].y) {
s[i].succ0=s[i-1].succ0;
}
} else if(s[i-1].result==1) {
if(s[i].y>s[i-1].y) {
s[i].succ0=tem;
} else if(s[i].y==s[i-1].y) {
s[i].succ0=s[i-1].succ0;
}
}
}
int max=0,Y=0;
for(int i=0; i<m; i++) {
if(max<=s[i].succ0+s[i].succ1) {
max=s[i].succ0+s[i].succ1;
Y=s[i].y;
}
}
cout<<Y;
return 0;
}
代码看注释即可。(不要两层及以上的循环,否则会超时)