1. 程式人生 > >ZOJ-3992 One-Dimensional Maze (思維題)

ZOJ-3992 One-Dimensional Maze (思維題)

傳送門:

題意:

給你一個字串,只包含L,R兩種字元。L代表現左移動,R表示向右移動。最右邊的字元代表出口。給你開始時的位置和字串的長度,有兩條規則:

1.如果開始的位置在開頭或者結尾可以直接到達出口。

2.如果現在位置為字元L,那麼他將向左移動。如果現在位置為字元R,那麼他將向右移動。

現在你可以修改字串中的字元,把R改為L,或者把L改為R,也可以不修改。問你最終到達終點,修改字元最小的次數。

思路:

其實就是判斷從開始位置到開頭的修改字元數少,還是從開始位置到末尾字元的修改字元數少。就是判斷向左走還是向右走。

從開始位置到開頭,就是把2---(m-1)中的R改為L。

從開始位置到末尾,就是把m+1---(len-1)中的L改為R。

程式碼:

#include<cstdio> 
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
char ch[100005];
int main()
{
	int t;
	cin >> t;
	while(t--) {
		int n, m;
		cin >> n >> m;
		scanf("%s",ch);
		int len = strlen(ch);
		int ans1 = 0;
		int ans2 = 0;
		if(m == 1 || m == n)
				cout << 0 << endl;	
		else {
			for(int i = 1; i < m-1; i++) {
				if(ch[i] == 'R')
					ans1++;
			}
			for(int i = m; i < len-1; i++){
				if(ch[i] == 'L') 
					ans2++;
			}
			if(ch[m-1] == 'L') 
				cout << min(ans1,ans2+1)<<endl;
			else 
				cout << min(ans1+1,ans2) << endl;	
		}			
		
	}
	
	
	return 0;
 }