CF1912L
发现一道水红题,赶紧来写题解。
数据已经说明了一切,当然直接打暴力啊。
题目的意思已经很明确了,就是让你分一个字符串,使左边和右边 O
和 L
数量不一样就好了。
我们可以先预处理出字符串中 O
和 L
的数量,然后暴力枚举左区间的右端点,双重循环求左区间中 O
和 L
的数量,再用总数量减去左区间中的数量就可以得到右区间的数量,最后比较一下就好了。
代码
#include<bits/stdc++.h>
using namespace std;
int n,o,l;
string a;
int main(){
cin>>n;
getchar();//注意这个细节,一定要用getchar读掉刚刚输入整数时遗留下的换行
cin>>a;
for(int i=0;i<a.size();i++){//预处理出O和L的数量
if(a[i]=='O') o++;
if(a[i]=='L') l++;
}
for(int i=1;i<a.size();i++){//暴力枚举左区间的右端点
int to=0,tl=0;
for(int j=0;j<i;j++){//计算左区间中O和L的数量
if(a[j]=='O') to++;
if(a[j]=='L') tl++;
}
if(o-to!=to&&l-tl!=tl){//判断
cout<<i;
return 0;//满足条件直接结束程序
}
}
cout<<-1;//找不到输出-1
return 0;
}