1 条题解
-
0
📝 题目大意
给定 名参赛者和字符串 (
o表示想参加决赛,x表示不想),在所有想参加决赛的选手中,按排名顺序只允许前 人参加。输出最终字符串 ,o表示能参加,x表示不能。💡 解题思路
- 题目分析:,数据量极小,直接模拟即可。题目保证 中至少有 个
o,无需处理名额不足的情况。 - 算法推导:
- 从头遍历原字符串 ,维护剩余名额 。
- 若当前字符为
o且 (还有名额),则该选手可以参赛,输出o并将 减 。 - 否则输出
x(原本不想参赛的,或想参赛但名额已用完的)。 - 由于是按排名顺序(即字符串从左到右)处理,自然满足"前 个想参赛者"的条件。
- 边界与细节:
- 减到 后,后续所有字符(包括
o)均输出x。 - 输入中 和 在同一行, 在下一行,注意使用
cin直接连续读取即可。
- 减到 后,后续所有字符(包括
⏱️ 复杂度分析
- 时间复杂度: —— 遍历字符串一次。
- 空间复杂度: —— 仅使用几个变量,无需额外数组。
💻 标准代码 (C++)
#include <bits/stdc++.h> using namespace std; #define rep(i, n) for (int i = 0; i < (int)(n); i++) int main() { int n, k; string s; cin >> n >> k >> s; // 读入 N, K 和字符串 S for (int i = 0; i < (int)(n); i++) { if (k != 0 && s.at(i) == 'o') { // 当前选手想参赛且还有名额 cout << "o"; // 可以参加决赛 k--; // 名额减一 } else { cout << "x"; // 不能参赛(不想参赛 或 名额已满) } } cout << endl; } - 题目分析:,数据量极小,直接模拟即可。题目保证 中至少有 个
- 1
信息
- ID
- 696
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者