202012-2 期末预测之最佳阈值
思想类似前缀和
#include <iostream>
#include<vector>
#include<algorithm>
#include<map>
using namespace std;
int n, a, b;
map<int, vector<int>> dict;
vector<int> start = { 0,0 };
vector<int> keys;
int main() {
while (cin >> n) {
while (n--) {
cin >> a >> b;
map<int, vector<int>>::iterator iter = dict.find(a);
if (iter != dict.end()) { //找到
iter->second[b]++;
}
else {
keys.push_back(a);
dict[a] = start;
dict[a][b]++;
}
}
break;
}
sort(keys.begin(), keys.end());
int firstKey = keys[0];
int currentCorrect = 0;
for (map<int, vector<int>>::iterator iter = dict.begin(); iter != dict.end(); iter++) {
currentCorrect += iter->second[1];
}
//cout << firstCorrect << endl;
int maxKey = firstKey, maxCorrect = currentCorrect;
for (vector<int>::iterator iter = keys.begin()+1; iter != keys.end(); iter++) {
int tempKey = *iter;
int pirorKey = *(iter - 1);
currentCorrect += dict[pirorKey][0];
currentCorrect -= dict[pirorKey][1];
//cout << dict[pirorKey][0] << " " << dict[pirorKey][1] << endl;
//cout <<tempKey<<" "<< firstCorrect << endl;
if (maxCorrect <= currentCorrect) {
maxKey = tempKey;
maxCorrect = currentCorrect;
}
}
cout << maxKey;
return 0;
}