题意:
一条长度为n的直线,你一开始在位置m上
其中每个整点都有一个字符'L'或'R',如果是'L'那么你必须往左走一步,否则往右走一步
如果你到达位置1或位置n你任务就完成了
不过有可能你永远到不了1或n,比如RRRRLLLL这样的情况
但你可以修改字符,求能完成任务的最小修改次数
思路:
如果往右走,碰到左转就变成右转,计算L的个数即可,反之也是
左右端点不计入结果
代码:
#include#include 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;}