3. 录入成绩【算法赛】{这题通过率是不是有点高!}——《蓝桥杯》第 24 场 小白入门赛

问题描述#

点击查看题目信息
蓝桥杯全国总决赛的颁奖典礼结束后,小蓝被分配了一个任务——录入部分获奖选手的奖项信息。

他用 "G""G1""G2""G3""GG""1""2""3" 这些字符串分别表示国特、国一、国二、国三、国优、省一、省二、省三等级。为了提高效率,小蓝写了个 Python 脚本来自动录入这些字符串。但是,小蓝过于粗心,竟忘记在各个奖项代码之间加分隔符!这就导致运行完脚本后,所有的奖项信息都挤在一起变成了一串长长的字符串,例如 "GG123G1G2G3123G1"。

小蓝的头发都快掉光了!他知道这部分选手中,每个奖项都至少有一位获奖选手,且国特只有一位。现在,他对着这串乱糟糟的字符串 S,想知道这部分选手中最多可能有多少位选手获得了国一("G1")。

对此,请你帮帮可怜的小蓝,找出字符串 S 中最多可能有多少个 "G1"## 输入格式
输入一个字符串 S,包含了所有的奖项信息,字符串长度不超过 2×10^3。
S 由 "G""G1""G2""G3""GG""1""2""3" 组成,保证 S 是合法的。

## 输出格式
输出一个整数,表示字符串 
S中最多可能包含的 "G1" 的个数。

## 样例输入
GG123GG2G1G2G3123

## 样例输出
2

解法思路#

题目的核心就是每个奖项都至少有一位获奖选手,且国特只有一位。,所以要对S中的G枚举国特,记录除当前G剩下的字符串中G1的最大数量。注意要记录下是不是每个奖项都至少有一位获奖选手,且不能有国特(因为国特已经被考虑了)可以用unordered_map记录,最后查询一下key的数量。

代码#

#include <iostream>
#include <unordered_map>
using namespace std;

int main() {
  string s;
  cin>>s;
  int ans = 0;
  for (int i=0; i<s.length(); i++) {
    if (s[i] == 'G') {
      string t = s;
      t.erase(i, 1);  //麻烦一点写法是拼接substr()
      int j = 0;
      unordered_map<string, int> mp;  //记录key,即奖项种类
      while (j < t.length()) {
        if (t[j] == 'G') {
          mp[t.substr(j, 2)]++;
          j += 2;
        } else {
          mp[t.substr(j, 1)]++;
          j++;
        }
      }
      if (mp.find("G") == mp.end() && mp.size() == 7) //map的key只有7个且不包含G
        ans = max(ans, mp["G1"]);    // 记录G1最大数量
    }
  }
  cout<<ans<<endl;
  
  return 0;
}

作者:HF

出处:https://www.cnblogs.com/haof31/p/18611744

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   go__Ahead  阅读(81)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示