ZOJ-3992 One-Dimensional Maze (思維題)
阿新 • • 發佈:2018-12-13
傳送門:
題意:
給你一個字串,只包含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; }