ZeroJudge M851: Sleeping in hostels

題目敘述

本題採EOF方式收資料,每筆資料有一個字串。'.' 代表是空的床位,'X' 代表有人的床位,要求輸出這個字串中可以距離其他人最大的距離。


範例輸入 #1

.X.X.

.X...X.

.X....X.

...X

範例輸出 #1

0

1

1

2


解題思路

第一個和最後一個字元需要單獨判斷,其他的位置往左右兩邊找之後取最短的距離並且比較最大值並輸出即可。

解題程式碼如下 (僅供參考):

#include <iostream>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    string str;
    while (cin >> str)
    {
        int ans = -999;
        for (int i = 0; i<str.length(); i++)
        {
            if (str[i] == '.')
            {
                if (i == 0)
                {
                    int right = 0;
                    for (int j = i+1; j<str.length(); j++)
                    {
                        if (str[j] == 'X') break;
                        right++;
                    }
                    ans = max(ans, right);
                }
                else if (i == int(str.length())-1)
                {
                    int left = 0;
                    for (int j = i-1; j>=0; j--)
                    {
                        if (str[j] == 'X') break;
                        left++;
                    }
                    ans = max(ans, left);
                }
                else
                {
                    int right = 0;
                    for (int j = i+1; j<str.length(); j++)
                    {
                        if (str[j] == 'X') break;
                        right++;
                    }
                    int left = 0;
                    for (int j = i-1; j>=0; j--)
                    {
                        if (str[j] == 'X') break;
                        left++;
                    }
                    int check = min(right, left);
                    ans = max(check, ans);
                }
            }
        }
        cout << ans << "\n";
    }
}

留言