1 条题解

  • 0
    @ 2025-8-24 23:15:35

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar chen_kun
    生命绚烂,别被黑暗压垮。

    搬运于2025-08-24 23:15:36,当前版本为作者最后更新于2025-05-16 17:03:22,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题解:P12443 [NERC2023] LOL Lovers

    题意分析

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

    思路简述

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

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

    直接套上两层循环,第一层循环模拟在第 ii 个字符分割,第二层循环遍历左边的区间(既第 11ii 个字符),把这个区间的 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.

    • 1

    信息

    ID
    12238
    时间
    3000ms
    内存
    1024MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者