ZeroJudge D660: Jumping Mario

同題:UVa 11764 – Jumping Mario

瑪莉歐 (Mario) 在最後的城堡。他現在需要跳過一些牆壁,然後進入庫巴 (Koopa) 的房間,他要打敗怪物,以拯救公主。對於這個問題,我們只關注“翻過牆”的一部分。你將被給予 N 個牆壁 (由左至右) 的高度。瑪莉歐 (Mario) 目前站在第一個牆壁。他必須跳到相鄰的牆壁直到最後一個。這意味著,他將跳躍 N – 1 次。「a high jump」代表瑪莉歐 (Mario) 跳到一個較高的牆,同樣,「a low jump」代表瑪莉歐 (Mario) 跳到一個較矮的牆。你能找出 a high jump 和 a low jump 的總數嗎

範例測資

範例輸入範例輸出
第一行輸入的是一個整數 T (T < 30),表示接下來有 T 筆測資。每筆測資開始於一個正整數 N (N < 50),表示牆壁的數目。下一行依序為 N 個牆壁的高度 (由左至右)。每一個高度是不超過 10 的非負整數。對每筆測資先輸出這是第幾筆測資,接下來兩個數代表「high jumps」和「low jumps」的總數。
3
8
1 4 2 2 3 5 3 4
1
9
5
1 2 3 4 5
Case 1: 4 2
Case 2: 0 0
Case 3: 4 0

解題思路

收資料的之前先宣告一個 current 變數,代表目前採的牆壁高度。收資料的時候,先判斷目前收到的數字是否為數列的第一個數字,如果不是的話就判斷收到的數字是否有比 current 高或低,同樣高度不算,並且都在最後將 current 設為收到的數字

範例程式碼-ZeroJudge D660: Jumping Mario

#include <iostream>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    int T;
    cin >> T;
    for (int i = 0; i<T; i++) {
        int N, current = 0, high = 0, low = 0;
        cin >> N;
        for (int j = 0; j<N; j++) {
            int tmp;
            cin >> tmp;
            if (j != 0) {
                if (tmp > current) high++;
                else if (tmp < current) low++;
            }
            current = tmp;
        }
        cout << "Case " << i+1 << ": " << high << " " << low << "\n";
    }
}

//ZeroJudge D660
//Dr. SeanXD

發佈留言