前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【小码匠自习室】[NOI Online 2020-3 入门组] 最急救助:被“幸运女神”眷顾的人

【小码匠自习室】[NOI Online 2020-3 入门组] 最急救助:被“幸运女神”眷顾的人

作者头像
小码匠
发布2022-08-08 13:19:13
2870
发布2022-08-08 13:19:13
举报
文章被收录于专栏:小码匠和老码农

碎碎念

  • 我,小码匠,作为被“幸运女神”眷顾的人,竟然只有一个case发生了排序后顺序打乱的问题!

标签

  • 模拟、排序

题目地址

  • [NOI Online #3 入门组] 最急救助
    • https://www.luogu.com.cn/problem/P6565

题目描述

救助中心每天都要收到很多求救信号。收到求救信号后,救助中心会分析求救信号,找出最紧急的求救者给予救助。

求救信号是一个由小写英文字母组成的字符串,字符串中连续三个字符依次组成sos的情况越多(即包含子串sos的数目越多),代表着求救者情况越紧急。

现在请你帮助救助中心找出最紧急的求救者。注意字符串中包含的sos可以有重叠,例如sosos算作包含 2 个sos

输入格式

输出格式

输出到标准输出。

输出共两行,第一行是最紧急求救者的名字。如果最紧急求救者有多个,则按照输入的顺序将他们的名字依次输出,相邻两个名字间用空格分隔。

第二行一个整数,表示最紧急求救者的求救信号中包含有多少个sos子串。

输入输出样例

输入 #1

代码语言:javascript
复制
2
adam
ineedhelpsosineedhelpsos
mark
ineedmorehelpsoshelpmesossoshelpme

输出 #1

代码语言:javascript
复制
mark
3

输入 #2

代码语言:javascript
复制
3
susan
sosososososos
jack
sossossossos
allen
soshelpsossossossossos

输出 #2

代码语言:javascript
复制
susan allen
6

说明/提示

数据规模与约定
  • 对于 10% 的数据,n=1。
  • 对于所有数据,1≤n≤100,求救者名字长度不超过 20,求救信号长度不超过 200。

题解

小码匠题解一: 90分

  • AC: 9
  • WA: 1
    • 排序后顺序被打乱,导致输出顺序不对
代码语言:javascript
复制
void coder_solution() {

    // 提升cin、cout效率
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int n;
    cin >> n;
    string s;
    vector<pair<int, string>> vpi(n);
    for(int i = 0; i < n; ++i) {
        cin >> vpi[i].second;
        cin >> s;
        for(int j = 0; j < s.size(); ++j) {
            if(s[j] == 's' && s[j + 1] == 'o' && s[j + 2] == 's') {
                vpi[i].first++;
            }
        }
    }
    sort(vpi.begin(), vpi.end(), greater<pair<int, string>>());
    int max = vpi[0].first;
    for(int i = 0; i < n; ++i) {
        if(vpi[i].first == max) {
            cout << vpi[i].second << "";
        } else{
            break;
        }
    }
    cout << endl;
    cout << max;
}

小码匠题解二

  • AC: 10
代码语言:javascript
复制
void coder_solution() {

    // 提升cin、cout效率
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    int n;
    cin >> n;
    string s;
    vector<pair<int, string>> vpi(n);
    int max_num = 0;
    for(int i = 0; i < n; ++i) {
        cin >> vpi[i].second;
        cin >> s;
        for(int j = 0; j < s.size(); ++j) {
            if(s[j] == 's' && s[j + 1] == 'o' && s[j + 2] == 's') {
                vpi[i].first++;
            }
        }
        max_num = max(max_num, vpi[i].first);
    }

    for(int i = 0; i < n; ++i) {
        if(vpi[i].first == max_num) {
            cout << vpi[i].second << " ";
        }
    }
    cout << endl;
    cout << max_num;
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小码匠和老码农 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 标签
  • 题目地址
  • 题目描述
  • 输入格式
  • 输出格式
  • 输入输出样例
  • 说明/提示
    • 数据规模与约定
    • 题解
      • 小码匠题解一: 90分
        • 小码匠题解二
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档