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
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
文章標籤
全站熱搜