期末預測之最佳閾值(2020年12月13日)
阿新 • • 發佈:2021-02-20
技術標籤:# L2
思路:計算比自己小的0的個數 大的1的個數
- 利用指標去雙層迴圈
- 下標從1開始處理 因為
stu[i].sum = stu[i-1].zero + stu[i].one
初始化stu[0].zero = 0
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 100010;
struct node
{
int id;
int yuce;
}data[maxn];
bool cmp(node a, node b)
{
if(a.id != b.id) return a.id < b.id;
else return a.yuce < b.yuce;
}
struct student
{
int id;
int zero; //小於
int one; //大於等於
int sum;
}stu[maxn];
bool cmp1(student a, student b)
{
if(a.sum != b.sum) return a.sum > b.sum;
else return a.id > b.id;
}
int main()
{
int n;
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> data[i].id >> data[i].yuce;
}
sort(data+1, data + n + 1,cmp);
int k = 1;
stu[k].id = data[1].id;
if(data[1].yuce == 1) stu[1].one = 1;
else stu[1].zero = 1;
for(int i = 2; i <= n; i++)
{
if(data[i].id == stu[k].id)
{
if(data[i].yuce == 1)
stu[k] .one++;
else stu[k].zero++;
}
else
{
k++;
stu[k].id = data[i].id;
if(data[i].yuce == 1)
stu[k].one++;
else
stu[k].zero++;
}
}
int temp = 0;
for(int i = 1; i <= k; i++)
{
temp += stu[i].zero;
stu[i].zero = temp;
}
temp = 0;
for(int i = k; i >= 1; i--)
{
temp += stu[i].one;
stu[i].one = temp;
}
stu[0].zero = 0;
for(int i = 1; i <= k; i++)
{
stu[i].sum = stu[i-1].zero + stu[i].one;
}
sort(stu + 1, stu + k + 1, cmp1);
cout << stu[1].id;
return 0;
}
是真的害怕csp