ZeroJudge D123: B2-Sequence

題目敘述

本題採EOF方式收資料,每筆資料第一行有一個正整數N,下一行會有N個整數。B2-Sequence的條件為任意兩個數字的和 (包括自己加自己) 不會出現超過一次。要求輸出數列是否為B2-Sequence。


範例輸入 #1

4

1 2 4 8

4

3 7 10 14

5

13 14 15 16 17

範例輸出 #1

Case #1: It is a B2-Sequence.


Case #2: It is not a B2-Sequence.


Case #3: It is not a B2-Sequence.


解題思路

使用兩個For迴圈將所有組合的任意兩數相加,需要注意的是第二個裡面的迴圈j要等於i,要避免往回加的情況。舉例1+2等於2+1,因為要用Map來確認任意兩數的和出現過幾次,且這樣子其實只有算一次的情況,所以不能往回加,如果有任意兩數的和已經出現過的情況,可以直接Break迴圈並輸出答案。Case的部分可以在EOF外面宣告一個變數每次進來While迴圈做+1即可。

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

#include <iostream>
#include <vector>
#include <map>
using namespace std;

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    int N, count = 1;
    while (cin >> N)
    {
        vector<int>num;
        map<int, int>MAP;
        for (int i = 0; i<N; i++)
        {
            int tmp;
            cin >> tmp;
            num.push_back(tmp);
        }
        bool stop = false;
        for (int i = 0; i<N; i++)
        {
            for (int j = i; j<N; j++)
            {
                if (MAP[num[i]+num[j]] != 0)
                {
                    stop = true;
                    break;
                }
                MAP[num[i]+num[j]]++;
            }
            if (stop) break;
        }
        if (stop) cout << "Case #" << count << ": It is not a B2-Sequence.\n";
        else cout << "Case #" << count << ": It is a B2-Sequence.\n";
        count++;
    }
}

留言

這個網誌中的熱門文章

ZeroJudge M933: 邏輯電路

ZeroJudge A148: You Cannot Pass?!

ZeroJudge A263: 日期差幾天