比赛 |
20220418高一小测验 |
评测结果 |
AAAAAAAAAA |
题目名称 |
紧急救助(民间数据) |
最终得分 |
100 |
用户昵称 |
lihaoze |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2022-04-18 21:49:22 |
显示代码纯文本
#include <bits/stdc++.h>
using PII = std::pair<int, int>;
const int N = 210;
std::string name[N];
std::string sig[N];
struct cmp {
bool operator()(const PII& a, const PII& b){
if(a.first < b.first) return true;
else if(a.first > b.first) return false;
else if(a.second >= b.second) return true;
else return false;
}
};
int main() {
freopen("noi_online2020_save.in", "r", stdin);
freopen("noi_online2020_save.out", "w", stdout);
int n;
std::cin >> n;
for (int i = 0; i < n; ++ i) std::cin >> name[i] >> sig[i];
std::priority_queue<PII, std::vector<PII>, cmp> h;
std::queue<char> sos;
sos.push('s'), sos.push('o'), sos.push('s');
for (int i = 0; i < n; ++ i) {
std::queue<char> q;
int pos = 0;
while (q.size() < 3) {
if (pos < sig[i].size()) q.push(sig[i][pos ++]);
else break;
}
if (q.size() < 3) {
h.push({0, i});
continue;
}
int cnt = 0;
if (q == sos) ++ cnt;
while (pos < sig[i].size()) {
q.pop();
q.push(sig[i][pos ++]);
if (q == sos) ++ cnt;
}
h.push({cnt, i});
}
auto t = h.top();
int cnt = t.first;
while (!h.empty() && h.top().first == cnt) {
std::cout << name[t.second] << ' ';
h.pop();
t = h.top();
}
std::cout << cnt << '\n';
return 0;
}