ZOJ - 3992 - One-Dimensional Maze (思维)

时间:2021-09-03 12:33:08

题意:

一条长度为n的直线,你一开始在位置m上

其中每个整点都有一个字符'L'或'R',如果是'L'那么你必须往左走一步,否则往右走一步

如果你到达位置1或位置n你任务就完成了

不过有可能你永远到不了1或n,比如RRRRLLLL这样的情况

但你可以修改字符,求能完成任务的最小修改次数

思路:

如果往右走,碰到左转就变成右转,计算L的个数即可,反之也是

左右端点不计入结果

代码:

#include<iostream>
#include<cstdio>
using namespace std;
const int maxn = 1e5+10;
char str[maxn];
int main() {
    int t, a, b;
    scanf("%d", &t);
    while(t--) {
        int sum1 = 0, sum2 = 0;
        scanf("%d %d %s", &a, &b, str+1);
        for(int i = 2; i <= b; i++) 
            if(str[i] == 'R') sum1++;
        for(int i = b; i <= a-1; i++) {
            if(str[i] == 'L') sum2++;
        } 
        printf("%d\n", sum1>sum2?sum2:sum1);
    }   
    return 0;
}