close
內容

大家都知道,在高速公路上旁都有無數的快餐店。
人們可以輕鬆地買到漢堡包,熱狗,比薩,三明治等等食物。
但是很多時候,問題不是找到餐館而是藥局。一頓豐盛的午餐後,我們通常需要去買胃藥,因為我們年紀大了。
給定高速公路上餐廳和藥局的位置,你想要確定餐廳和藥局之間的最短距離。

輸入說明

輸入含有多組測資。
每組測資有兩行,第一行有一個正整數 L (1 <= n <= 2000000),L代表公路的長度。
如果L = 0代表輸入結束。
第二行為長度L的字串,代表沿著公路的餐廳和藥局的位置。
字串的內容如下:
1. 'R'代表這個位置有餐廳
2. 'D'代表這個位置有藥局
3. 'Z'代表這個位置同時有餐廳和藥局
4. '.'代表這個位置什麼都沒有
每組測資中至少有一間餐廳和一間藥局。

輸出說明

對於每組測資,輸出餐廳和藥局之間的最短距離。

範例輸入 #1
2
RD
5
..Z..
10
.R......D.
10
.R..Z...D.
10
...D..R...
25
..D...R.RR...DD...D.R...R
0
範例輸出 #1
1
0
7
0
3
2

B3B82F6E-EDC6-4C3C-8618-1038E65EB74C

C++:

/*
Sample Input #1
2
RD  
5
..Z..
10
.R......D.
10
.R..Z...D.
10
...D..R...
25
..D...R.RR...DD...D.R...R
0
Sample Output #1
1
0
7
0
3
2
*/
#include <iostream> 
using namespace std;
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	int n;
	string s;
	while(cin>>n){
		if(n==0)break;
		cin>>s;

		int R=-1,D=-1,mn=20000005;
		for(int i=0;i<n;i++){
			
			if(s[i]=='Z'){mn=0;break;}
			else if(s[i]=='R'){
				if(D>=0)mn=min(mn,i-D);
				R=i;
			}			
			else if(s[i]=='D'){
				if(R>=0)mn=min(mn,i-R);	
				D=i;
			}
		}
		cout<<mn<<"\n";
	}
	return 0;
} 
 

python:

while True:
    try:
        n=int(input())
        if n==0:break
        arr=list(input()[::1])
        R=-1
        D=-1
        mn=20000005
        for i in range(n):
            if(arr[i]=="Z"):mn=0;break
            elif (arr[i]=="R"):
                if D>-1:
                    if(i-D<mn):mn=i-D
                R=i

            elif (arr[i]=="D"):
                if R>-1:
                    if(i-R<mn):mn=i-R
                D=i  
        print(mn)  
    except:break

    
arrow
arrow
    文章標籤
    高中生程式解題 python C++
    全站熱搜
    創作者介紹
    創作者 趴趴熊日常 的頭像
    趴趴熊日常

    資工趴趴熊的小天地

    趴趴熊日常 發表在 痞客邦 留言(0) 人氣()