# Greedy# String# Iteration

e611 - 11661 - Burger Time

🔗 前往 ZeroJudge 原題

題目描述

題目描述了高速公路上餐廳 (R) 和藥局 (D) 的位置,以及同時有餐廳和藥局 (Z) 的位置。目標是找到最近的餐廳和藥局之間的距離。如果存在同時有餐廳和藥局的位置 (Z),則最短距離為 0。

解題思路

程式碼遍歷輸入字串,尋找餐廳 (R) 和藥局 (D) 的配對。對於每個餐廳,它會搜尋後面的藥局,並記錄距離。同樣,對於每個藥局,它會搜尋後面的餐廳,並記錄距離。程式會追蹤找到的最小距離,如果遇到同時有餐廳和藥局的位置 (Z),則將最小距離設為 0。最終,程式輸出找到的最小距離。

複雜度分析

  • 時間複雜度: O(n^2)
  • 空間複雜度: O(1)

程式碼

#include <iostream>
#include <string>
using namespace std;
int main(){
	string a;
	while(cin >> a){
		if(a=="0")break;
		cin >> a;
		int ans=a.length(),c=a.length();
		for(int i=0;i<c;i++){
			if(a[i]=='Z'){
				ans=0;
				break;
			}
			else if(a[i]=='R'){
				int n=-1;
				for(int j=i+1;j<c;j++){
					if(a[j]=='D'){
						n=j-i;
						break;
					}
				}
				if(n>0&&n<ans)ans=n;
			}
			else if(a[i]=='D'){
				int n=-1;
				for(int j=i+1;j<c;j++){
					if(a[j]=='R'){
						n=j-i;
						break;
					}
				}
				if(n>0&&n<ans)ans=n;
			}
		}
		cout << ans << "\n";
	}
}

Discussion