開啟章節選單
11063 B2-Sequence
題目連結
題目敘述
11063 B2-Sequence
B2-數列是一串正整數序列 1 ≤ b1 < b2 < b3 ...,使得所有成對加總 bi + bj(其中 i ≤ j)皆為不同的值。
你的任務是判斷給定的序列是否為 B2-數列。
輸入說明
每組測資以 2 ≤ N ≤ 100 開始,代表序列中的元素數量
下一行會有 N 個整數,代表序列中每個元素的值
每個元素 bi 皆為不超過 10000 的正整數
每組測資之間會有一個空行,輸入以檔案結尾(EOF)作結
輸出說明
對於每組測資,你必須印出測資編號(從 1 開始),以及一段訊息指出該序列是否為 B2-數列
請參考下方的範例輸出
每組測資之後必須印出一個空行
解題思路
進行以下三個條件的判斷 只要違反一項則不是 B2-數列
- 首項數值大於等於
1
- 數列是否嚴格遞增
- 是否每組 bi + bj(其中 i ≤ j)數對和為獨特(不重複)
程式碼
#include <bits/stdc++.h> using namespace std; int main() { int n, T = 0; while (cin >> n) { vector<int> v(n); set<int> st; for (auto &i : v) cin >> i; int flag = v[0] <= 0; // flag:紀錄是否違反規則 // 先檢查 v[0] 是否大於等於 1(規則一) for (int i = 0; i+1 < n; i++) if (v[i] >= v[i+1]) flag = 1; // 檢查數列是否嚴格遞增(規則二) for (int i = 0; i < n; i++) for (int j = i; j < n; j++) { // 檢查數列中每數對和皆不重複(規則三) if (st.count(v[i]+v[j])) flag = 1; st.insert(v[i]+v[j]); } cout << "Case #" << ++T << ": It is" << (flag ? " not " : " ") << "a B2-Sequence.\n\n"; } }