From 80e12e9480be6b2be9d1cf1c9ad2412bae963b76 Mon Sep 17 00:00:00 2001 From: Segcolt <9hmbzr275@mozmail.com> Date: Wed, 13 Nov 2024 17:01:53 -0300 Subject: [PATCH] Do this one problem because someone asked me to. It was really simple... --- CSES Problem Set/Two Sets.cpp | 125 ++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 CSES Problem Set/Two Sets.cpp diff --git a/CSES Problem Set/Two Sets.cpp b/CSES Problem Set/Two Sets.cpp new file mode 100644 index 0000000..99356e8 --- /dev/null +++ b/CSES Problem Set/Two Sets.cpp @@ -0,0 +1,125 @@ +/* Problem URL: https://cses.fi/problemset/task/1092 */ + +#include + +using namespace std; + +#define V vector + +#define rmin(a, b) a = min(a, b) +#define rmax(a, b) a = max(a, b) + +#define rep(i, lim) for (size_t i = 0; i < (lim); i++) +#define nrep(i, s, lim) for (size_t i = s; i < (lim); i++) + +#define repv(i, v) for (auto &i : (v)) +#define fillv(v) for (auto &itr_ : (v)) { cin >> itr_; } +#define sortv(v) sort(v.begin(), v.end()) +#define all(v) (v).begin(), (v).end() + +using vi = vector; +using vvi = vector; +using vvvi = vector; +using vvvvi = vector; + +using ll = long long; + +using vl = vector; +using vvl = vector; +using vvvl = vector; +using vvvvl = vector; + +template +auto operator<<(ostream &os, const vector &vec)->ostream& { + os << vec[0]; + for (size_t i = 1; i < vec.size(); i++) { + os << ' ' << vec[i]; + } + os << '\n'; + return os; +} + +template +auto operator>>(istream &is, vector &vec)->istream& { + for (auto &i : vec) { + is >> i; + } + return is; +} + +template +auto operator<<(ostream &os, const vector> &vec)->ostream& { + for (auto &i : vec) { + os << i[0]; + for (size_t j = 1; j < i.size(); j++) { + os << ' ' << i[j]; + } + os << '\n'; + } + return os; +} + +template +auto operator>>(istream &is, vector> &vec)->istream& { + for (auto &i : vec) { + for (auto &j : i) { + is >> j; + } + } + return is; +} + +int main() +{ + ios::sync_with_stdio(false); + cin.tie(nullptr); + + ll n; + cin >> n; + + ll limit = n * (n + 1) / 2; + if (limit % 2 != 0) { + cout << "NO\n"; + return 0; + } + + limit /= 2; + + V group(n, false); + group.back() = true; + ll sum = n; + + for (size_t i = n - 1; i > 0; i--) { + if (sum + i <= limit) { + sum += i; + group[i - 1] = true; + } + } + + if (sum != limit) { + cout << "NO\n"; + return 0; + } + + cout << "YES\n"; + + vl g1, g2; + for (size_t i = 0; i < n; i++) { + if (group[i]) { + g1.push_back(i + 1); + } else { + g2.push_back(i + 1); + } + } + + cout << g1.size() << '\n'; + for (auto i : g1) { + cout << i << ' '; + } + cout << '\n'; + cout << g2.size() << '\n'; + for (auto i : g2) { + cout << i << ' '; + } + cout << '\n'; +}