1 条题解
-
0
自动搬运
来自洛谷,原作者为

ZBAA_MKC
基本退谷搬运于
2025-08-24 22:30:47,当前版本为作者最后更新于2021-06-01 20:59:37,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
本题难点在于读题,我也是读了好几遍才读懂的.
大致题意:对于每一个字符串 , 寻找一个以字符串 为前缀的字符串,记录删去删除前缀 的字符串 的第一位的字母。
但在代码实现时,我们不用这样做。记字符串 的长度为 ,我们只需要记录 处的字母即可。
输出时,如果某一个字母被记录过,那就输出这个字母,否则输出
*。代码如下:
#include <bits/stdc++.h> using namespace std; string s[55]; bool f[26]; int main() { int n; cin >> n; for (int i = 1; i <= n; i++) { cin >> s[i]; } string c; cin >> c; int len = c.size(); bool flg; //以上为读入及预处理 for (int i = 1; i <= n; i++) { flg = true; for (int j = 0; j < len; j++) { if (c[j] != s[i][j]) //如果当前字符串的前缀不是c { flg = false; break; //退出循环,找下一个字符串 } } if (flg) //如果当前字符串的前缀是c { f[s[i][len] - 'A'] = true; //记录下一个字母 } } //输出 cout << "***"; for (int i = 0; i <= 4; i++) { if (f[i]) { cout << char(i + 'A'); } else { cout << "*"; } } cout << endl; for (int i = 5; i <= 12; i++) { if (f[i]) { cout << char(i + 'A'); } else { cout << "*"; } } cout << endl; for (int i = 13; i <= 20; i++) { if (f[i]) { cout << char(i + 'A'); } else { cout << "*"; } } cout << endl; for (int i = 21; i <= 25; i++) { if (f[i]) { cout << char(i + 'A'); } else { cout << "*"; } } cout << "***"; return 0; }
- 1
信息
- ID
- 6557
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者