专栏文章
题解:P12443 [NERC2023] LOL Lovers
P12443题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mip7dnsp
- 此快照首次捕获于
- 2025/12/03 07:22 3 个月前
- 此快照最后确认于
- 2025/12/03 07:22 3 个月前
题解:P12443 [NERC2023] LOL Lovers
题目大意
给定一个长度为 的字符串,字符串中只会包含下列两种字符。
- 用字母 表示洋葱。
- 用字母 表示面包。
按照以下要求输出 。
- 以 分开,字符串前缀的洋葱和面包的数量不等于后缀洋葱和面包的数量,并且前缀、后缀的长度至少为 。
- 如果不存在一个合法的 ,输出 。
- 数字 可以为任意数,但必须满足要求。
思路
由于 没有太多的限制,因此我们如果找到了一个合法的位置,直接输出该位置即可。
遍历结束,不存在合法的答案,代码结尾应输出 。
设前缀为 到 ,后缀为 到 ,我们只需用循环处理前缀、后缀中字母 和 的数量,然后比较即可。
代码
CPP#include <bits/stdc++.h>
using namespace std;
int main() {
int left_o, left_l, right_o, right_l, n;
string s;
cin >> n >> s;
for (int i = 1; i <= n - 1; i++) { //遍历字符串的每一位
left_o = 0, left_l = 0, right_o = 0, right_l = 0; //初始化
for (int j = 0; j <= i - 1; j++) { //统计前缀
if (s[j] == 'O') {
left_o++;
} else {
left_l++;
}
}
for (int j = i; j <= n - 1; j++) { //统计后缀
if (s[j] == 'O') {
right_o++;
} else {
right_l++;
}
}
if (left_o != right_o && left_l != right_l && left_o + left_l > 0 && right_o + right_l > 0) {
//如果前、后缀字母O和L的数量不等
cout << i; //输出该位置
return 0; //结束程序
}
}
cout << -1; //不可能存在答案
return 0; //完结
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...