题解:P12443 [NERC2023] LOL Lovers

· · 题解

题解:P12443 [NERC2023] LOL Lovers

题意分析

给你一个字符串,把它分成两个区间使得每个区间中包含至少一个字符且两个区间字符 LO 的数量不同。

思路简述

时间限制 3 秒钟,再加上 2≤n≤200 的时间限制,怎么看都是暴力。

首先在输入字符串的时候把字符 LO 的数量记录起来。

直接套上两层循环,第一层循环模拟在第 i 个字符分割,第二层循环遍历左边的区间(既第 1i 个字符),把这个区间的 LO 的数量累加起来。最后用两种字符的总数减去做左区间两种字符的个数即可得到右区间两种字符的个数,再判断两边是否不等即可。

代码呈现

C++

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=222;
char a[N];
int tot_L,tot_O,n;
signed main(){
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        tot_L+=(a[i]=='L');//记录两种字符总数
        tot_O+=(a[i]=='O');
    }
    for(int i=1;i<n;i++){
        int cnt_L=0,cnt_O=0;
        for(int j=1;j<=i;j++){
            cnt_L+=(a[j]=='L');//记录左区间两种字符的数量 
            cnt_O+=(a[j]=='O');
        }
        if((tot_L-cnt_L)!=cnt_L&&(tot_O-cnt_O)!=cnt_O){//判断两边两种字符是否相等 
            cout<<i;//符合的话直接输出结束程序 
            return 0;
        }
    }
    cout<<"-1";
    return 0;
}

The end.