POJ-2418:简单的模拟和遍历,输入避免超时采用getline,注意输出格式
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main() {
map<string, int>tree;
int num = 0;
string s;
while (getline(cin,s)) {
num++;
tree[s]++;
}
for (map<string, int>::iterator it = tree.begin(); it != tree.end(); it++) {
cout << it->first << " ";
printf("%.4f\n", 100.0*it->second / num);
}
return 0;
}
POJ-3481:采用一个小技巧,因为p是优先级,因此应该让p作为键(key)便于在map中排序,而最后输出值即可
#include<iostream>
#include<map>
using namespace std;
map<int, int>mp;
void max();
void min();
int main() {
int n;
map<int, int>::iterator ma;
map<int, int>::iterator mi;
do {
scanf("%d", &n);
switch (n) {
case 1: int k, p; cin >> k >> p; mp[p]=k; break;
case 2:max(); break;
case 3:min(); break;
}
} while (n);
}
void max() {
if (mp.empty()) {
printf("0\n");
return;
}
map<int, int>::iterator ma = --mp.end();
printf("%d\n", ma->second);
mp.erase(ma);
return;
}
void min() {
if (mp.empty()) {
printf("0\n");
return;
}
map<int,int>::iterator mi = mp.begin();
printf("%d\n", mi->second);
mp.erase(mi);
return;
}