比赛 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;
}