1. 程式人生 > 其它 >期末預測之最佳閾值(2020年12月13日)

期末預測之最佳閾值(2020年12月13日)

技術標籤:# 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