ZeroJudge D575: 末日審判

傳說在「巴拉巴拉巴拉」(王國名稱) 王國曾經有一個被屠殺的小鎮叫做「巴拉巴拉巴拉」(小鎮名稱)。
後來「巴拉巴拉巴拉」王國有一群「巴拉巴拉巴拉」(也許是科學家或魔法師之類的)。
他們研究發現,「巴拉巴拉巴拉」小鎮被屠村原來是因為遭到了天譴。
特別的是,末日審判的範圍是十字型擴張的。

在方格座標上 (假設最中央的格子是 0, 0,右 0, 1,上 -1, 0,左 0, -1,下 1, 0),
假如範圍是 1,中心座標是 0, 0,那麼末日審判的範圍即是下圖的●部分:
○○○○○
○○●○○
○●●●○
○○●○○
○○○○○

範圍 2
○○●○○
○●●●○
●●●●●
○●●●○
○○●○○

範圍 3
○○○●○○○
○○●●●○○
○●●●●●○
●●●●●●●
○●●●●●○
○○●●●○○
○○○●○○○

現在給定審判的中心座標、以及「巴拉巴拉巴拉」王國首都「巴拉巴拉巴拉」(城市名稱) 的位置、審判範圍,請你判斷首都會不會遭受天遣而滅亡。

範例測資

範例輸入範例輸出
每個測資點有多組測試資料。
每組測資一行。
第一和第二個數字是天遣的中心座標,
第三和第四個數字是王國首都的座標,(所有座標值保證介於 -2147483648 ~ 2147483647 之間)。
第五個數字是天遣的有效範圍 r (1 <= r <= 2147483647)。
如果首都座標在天遣的範圍內而招致滅亡,請輸出「die」。
如果首都座標不在天遣範圍而逃過一劫,請輸出「alive」。
0 0 1 1 1
0 0 1 1 2
0 0 -1 2 3
-1 0 1 2 3
0 0 50 50 100
0 0 50 50 99
alive
die
die
alive
die
alive

解題思路

計算城市與天譴中心的曼哈頓距離,如果曼哈頓距離 > 範圍,則城市不會遭到天譴。

曼哈頓距離:|x1 – x2| + |y1 – y2|。

需要注意宣告的變數和計算曼哈頓距離的變數都需要開 Long Long Int。

範例程式碼-ZeroJudge D575: 末日審判

#include <iostream>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    long long int centerX, centerY, cityX, cityY, distance;
    while (cin >> centerX >> centerY >> cityX >> cityY >> distance) {
        const long long int manhattan = abs(centerX - cityX) + abs(centerY - cityY);
        if (manhattan > distance) {
            cout << "alive\n";
        }
        else cout << "die\n";
    }
}

//ZeroJudge D575
//Dr. SeanXD

發佈留言