2010年5月12日 星期三

Problem 11661 Burger Time?,最短距離

此題要求出在高速公路上,餐廳與藥局最短距離為多少。

讀入整數 n,代表字串有多長,接著讀入一字串,字串有幾個字母構成,R 代表餐廳位置、D 代表藥局位置、Z 代表它餐廳和藥局都有、. 代表這位置啥都沒有。
注意:只要在判斷過程,Z 若有出現,則長度為 0。若 R 與 D 加起來的數量只有 1,長度也為 0。
我的方法就是紀錄 R 與 D 出現的索引位置,如果出現,再去減掉另外一個的索引位置,再判斷它是不是最小值,如是最小值,就紀錄;反之則否。C 語言程式碼如下:
#include <limits.h>
#define inf INT_MAX
...
主程式內...
char str[2000002], ch;
while (scanf("%d", &n) == 1 && n)
{
getchar();
int R = 0, D = 0, Z = 0, min = inf, tmp;
gets(str);
for (i = 0; (ch = str[i]); i ++)
{
if (ch == '.') continue;
if (ch == 'D')
{
D = i + 1;
if (R) tmp = D - R;
if (tmp < min && R) min = tmp;
continue;
}
if (ch == 'R')
{
R = i + 1;
if (D) tmp = R - D;
if (tmp < min && D) min = tmp;
continue;
}
if (ch == 'Z')
{
min = inf;
break;
}
}
if (min == inf) printf("0\n");
else printf("%d\n", min);
}

By David.K

p11661題目連結
回ACM題庫目錄
回首頁

沒有留言: