ZOJ--3992--One-Dimensional Maze

本文介绍了一道关于RL字符串移动的编程题目,该问题要求计算最少改变多少字符可以使起始位置移动到字符串的首或尾。文章提供了详细的解题思路及C++实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目
题意:给出一串只有RL的字符串,给定起始位置,R表示向右,L表示向左,现在要求输出最少改变几个字符可以移动到字符第一个或者最后一个。
例如:
6 3
LLRRLR
起始位置是第三个字符R,只用改变第三个R就可以到达第一个字符L

这道题目通过模拟就可以做出来,就是将到达两边要改变的字符都求出来,输出最小的那个
见代码:

#include<cstdio>
using namespace std;
#define maxn 100005
char a[maxn];

int main()
{
    int T;
    scanf("%d",&T);
    int n,m;
    while(T--)
    {
        int count1=0,count2=1;     //如果是去与起始字符相反的方向则需要算上起始位置的改变
        scanf("%d%d",&n,&m);
            scanf("%s",a);
        if(a[m-1]=='R')
        {
            for(int i=m;i<n-1;i++)   //从末尾向起始位置遍历
            {
                if(a[i]=='L')        //遇见L就变为R,count1++
                    count1++;

            }
            for(int i=1;i<m-1;i++)   //从开头到起始位置遍历
            {
                if(a[i]=='R')        //遇见R变成L,count2++
                {
                    count2++;        //由于起始位置是R所以到左边需要改变自身,所以为count2
                }
            }
        }
        else   //同理于起始位置为R
        {
            for(int i=m;i<n-1;i++)
            {
                if(a[i]=='L')
                    count2++;

            }
            for(int i=1;i<m-1;i++)
            {
                if(a[i]=='R')
                    count1++;
            }
        }
        if(count1<count2)
            printf("%d\n",count1);
        else
            printf("%d\n",count2);
    }
    return 0;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值