RC-u2 出院

题目描述

以上是某群中一段有趣的对话。请你按照里面的逻辑,在已知某些饮料的等级的情况下,给饮料定级。定级的方法是:

  • 如果是已知等级的饮料,直接输出等级;
  • 对于一个新饮料的名字,你需要将名字拆成两个已知等级的部分,然后输出这个级别。例如:Diet是A,Coke是D,那么DietCoke就是AD;
  • 如果新饮料无法拆解或者有多种拆解方法,统一定为 D 级。

输入格式:
输入第一行是两个正整数 N,M (1≤N,M≤100),表示已知的饮料有 N 种,需要定级的饮料有 M 种。

接下来首先是 N 行,每行是一个字符串和一个字符,表示一种饮料的名字和对应的等级,等级只有 A,B,C,D 四种。

然后是 M 行,每行是一个字符串,表示需要定级的饮料的名字。

所有饮料名字只包含有大小写字母,长度不超过 30,给定拥有等级的饮料的名字不会重复。

输出格式:
对于每一个需要定级的饮料,输出定好的定级。

输入样例:

5 6
Diet A
LowSugarTea B
Milk C
Coke D
Water A
DietCoke
Pepsi
Milk
CokeWater
GoodMilk
dietCoke

输出样例:

AD
D
C
DA
D
D

模拟

以下是对给定代码的详细注释,解释了代码的每一部分的功能和目的:

// 包含标准输入输出流库, 方便进行输入输出操作
#include<bits/stdc++.h>
// 使用std命名空间, 避免在每个标准库函数前加std::
using namespace std;

// s数组用于存储已知饮料的名字, a数组用于存储已知饮料的等级
string s[110], a[110];

// 主函数
int main()
{
    int n, m; // n表示已知饮料的数量,m表示需要定级的饮料的数量
    cin >> n >> m; // 读入已知饮料数量和需要定级的饮料数量
    // 循环读入已知饮料的信息
    for(int i = 0; i < n; i++)
    {
        cin >> s[i] >> a[i]; // 读入饮料名和对应的等级
    }
    // 循环处理每个需要定级的饮料
    for(int i = 0; i < m; i++)
    {
        string b; // 用于存储需要定级的饮料名
        cin >> b; // 读入需要定级的饮料名
        int flag = 0; // 标志位,用于标记饮料是否可以通过已知饮料拆解得到
        int flag1 = 0; // 标志为,用于标记饮料是否已经在已知饮料中找到
        string x, y; // x和y用于存储拆解得到的两个已知饮料的等级
        // 遍历已知饮料,寻找能否拆解
        for(int j = 0; j < n; j++)
        {
            // 如果需要定级的饮料名直接在已知饮料中找到
            if(b == s[j])
            {
                x = a[j]; // 获取该饮料的等级
                flag = 1; // 设置标志位,表示已找到
                flag1 = 1; // 设置标志位,表示无需拆解
                break; // 跳出循环
            }
            // 如果没有直接找到,尝试进行拆解
            for(int k = 0; k < n; k++)
            {
                string t = s[j] + s[k]; // 将两个已知饮料名拼接在一起
                // 如果拼接后的饮料名与需要定级的饮料名相同
                if(t == b)
                {
                    x = a[j]; // 获取第一个饮料的等级
                    y = a[k]; // 获取第二个饮料的等级
                    flag++; // 增加标志位
                }
            }
        }
        // 根据标志位的情况输出结果
        if(flag == 0 && flag1 == 0) cout << "D" << endl; // 如果无法拆解,且没找到,输出D
        else if(flag == 1 && flag1 == 0) cout << x << y << endl; // 如果可以拆解,输出拆解后的等级
        else if(flag == 1 && flag1 == 1) cout << x << endl; // 如果直接找到,输出对应等级
        else cout << "D" << endl; // 如果有多种拆解方法,输出D
    }
    return 0; // 程序正常结束
}

上面的程序实现了定级饮料的逻辑。首先读取已知饮料的等级和需要定级的饮料的信息。之后,对于每一个需要定级的饮料,程序检查它是否已经有了已知等级,或者是否可以通过将两个已知等级的饮料名拼接来得到。如果可以拼接且仅有一种方式拼接,输出这两个等级。如果有多种拼接方式或找不到匹配,输出默认的"D"等级。

04-08 08:04