Problem
在一条路上,有饭店也有药店,一个位置可以兼而有之也可以一个都没有。
现在的问题是:距离最近的一个饭店和一个药店的距离是多少?
Solution
首先,如果有一个地方两种店都有,那么答案为 $0$。
其次,每次输入时记录一下上一个饭店和药店的位置,每一次位置更新时算一下现在前面的饭店和药店之间的距离,然后取最小值即可。
Code
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <string>
#include <cstring>
#include <cctype>
#include <cmath>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <map>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int inf = 0x3f3f3f3f;
#define elif else if
#define il inline
int l;
int main()
{
while (cin >> l, l != 0)
{
char c;
int ans = inf;
int lr = ~inf, ld = ~inf;
for (int i = 1; i <= l; i++)
{
cin >> c;
if (c == 'R')
lr = i;
elif (c == 'D')
ld = i;
elif (c == 'Z')
lr = ld = i;
if (lr > 0 && ld > 0)
ans = min(ans, abs(lr - ld));
}
cout << ans << endl;
}
return 0;
}