Loading

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;
}
posted @ 2024-12-17 10:10  go__Ahead  阅读(39)  评论(0编辑  收藏  举报