本題限用 C++23 作答。
小明得到了兩個序列 $a, b$,他想知道兩序列的總和大小關係,而若是一樣時,他會自動當作 $a$ 的總和較小。
他有時候想知道誰比較大,有時候想知道誰比較小,因此希望能有個控制選項來決定要知道大還是小。
小明因此寫了一隻程式來達到這件事情,該程式在在控制選項為 < 時,會在 $a$ 的總和比 $b$ 的總和小時輸出 IOIC,否則輸出 2025;
當控制選項為 > 時,則會在 $b$ 的總和比 $a$ 的總和小時輸出 IOIC,否則輸出 2025。
然而他發現他的程式好像有時候怪怪的,請你在 edit distance 不超過 2 的情況下幫他修好他的程式。
#include <bits/stdc++.h>
using namespace std;
#define o {
#define l
#define a }
#define w
struct Num : public string {
#define OP(op) auto operator op(const Num &rhs) const
l w w w w w w w w w OP(<) w w w w w w w w o
l l
l l w w if (size() != rhs.size()) w w o l
l l l l
l l return size() < rhs.size(); l l
l l l l
l a w w w w w w w w w w w w w w w w w l l
l l
l return compare(rhs) < 0; l
l l
a w w w w w w w w w w w w w w w w w w w w l
l w w w w w w w w w w w w w w w w w w w w OP(+) w w w w w w w w w w w w w w w w w w w w w o
l l
l Num result; l
l int carry = 0; l
l l
l l for (auto [lc, rc] : views::zip(*this | views::reverse, rhs | views::reverse)) o l
l l l l
l l carry += lc + rc - 2 * '0'; l l
l l result.push_back(static_cast<char>(carry % 10 + '0')); l l
l l carry /= 10; l l
l l l l
l a w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w l
l l
l l w w w w w w w w w w for (const auto &v : {*this, rhs}) w w w w w w w w w w w w w o l
l l l l
l l l for (auto c : v | views::reverse | views::drop(min(size(), rhs.size()))) o l l
l l l l l l
l l l carry += c - '0'; l l l
l l l result.push_back(static_cast<char>(carry % 10 + '0')); l l l
l l l carry /= 10; l l l
l l l l l l
l l a w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w l l
l l l l
l a w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w l
l l
l l w w w w w w w w w w if (carry) w w w w w w w w w w w o l
l l l l
l l result.push_back(static_cast<char>(carry + '0')); l l
l l l l
l a w w w w w w w w w w w w w w w w w w w w w w w w w w w l
l l
l ranges::reverse(result); l
l return result; l
l l
a w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w l
OP(+=) = delete;
};
l auto read_ints(int n) -> generator<Num> o
l l
l l for (int _ : views::iota(0, n)) o l
l l l l
l l Num s; l l
l l cin >> s; l l
l l co_yield s; l l
l l l l
l a w w w w w w w w w w w w w w w w l l
l l
a w w w w w w w w w w w w w w w w w w w w l
int main() {
int n, m;
cin >> n >> m;
pair<Num, int> v1{"0", 1}, v2{"0", 2};
for (auto s : read_ints(n)) {
v1.first = v1.first + s;
}
string op;
cin >> op;
for (auto s : read_ints(m)) {
v2.first = v2.first + s;
}
if (op == ">") {
swap(v1, v2);
}
if (v1 < v2) {
cout << "IOIC\n";
} else {
cout << "2025\n";
}
}
輸入第一行有兩個正整數 $n, m$,分別代表 $a$ 序列的長度與 $b$ 序列的長度。
接下來的一行有 $n$ 個數字,為 $a$ 序列。
再來的一行有一個符號 $o$,代表控制選項。
最後的一行有 $m$ 個數字,為 $b$ 序列。
請依照題目規定輸出 IOIC 或是 2025
4 6 7 1 2 2 < 1 1 4 5 1 4
IOIC
| No. | Testdata Range | Constraints | Score |
|---|---|---|---|
| 1 | 0 | 範例測資 | 0 |
| 2 | 0~18 | 無額外限制 | 200 |