CCF 202012-2 期末预测之最佳阈值(C++)岛屿加sort结构体
将阈值想象成水,安全系数想象成岛屿,从一开始阈值最低,慢慢升高,从低往高淹没岛屿,当岛屿的result为1,淹没扣分,result为0,淹没加分,寻找最佳阈值,使得分数最高。
需要注意的:
- 使用了结构体将result和y绑定在一起,易于之后的sort排序
- sort自定义排序
- 淹没岛屿时要淹没所有相同y值的岛屿
#include<iostream>
#include<bits/stdc++.h>
#include<cstdio>
using namespace std;
int m;
struct stu {
int y;
int result;
}cl[100005];
bool cmp(stu a, stu b){
return a.y < b.y;
}
int main()
{
cin >> m;
int last = 0;
for (int i = 0; i < m; i++){
scanf("%d %d", &cl[i].y, &cl[i].result);
last += cl[i].result;
}
sort(cl, cl+m, cmp);
int nice = cl[0].y;
int ant = last;
for (int i = 0; i < m-1; i++){
if (cl[i].result==1){
ant--;
}else if(cl[i].result==0){
ant++;
}
//淹没所有相同y值的岛屿
if (cl[i].y==cl[i+1].y) continue;
if (ant >= last){
last = ant;
nice = cl[i+1].y;
}
}
cout << nice;
return 0;
}