From 704b6fec602a92961c0572c3a28a987681c33d23 Mon Sep 17 00:00:00 2001 From: Segcolt Date: Wed, 8 Apr 2026 14:42:50 -0300 Subject: [PATCH] More stuff --- .../C. DIY.cpp | 130 ++++++++++++ .../G. Guess One Character.cpp | 131 ++++++++++++ .../A. The Equalizer.cpp | 121 +++++++++++ .../B. Flip the Bit (Easy Version).cpp | 126 +++++++++++ .../C. Grid Covering.cpp | 114 ++++++++++ .../F. Rudolf and Imbalance.cpp | 193 +++++++++++++++++ .../C. Minimizing the Sum.cpp | 148 +++++++++++++ Hello 2024/C. Grouping Increases.cpp | 134 ++++++++++++ .../D. Darius' Wisdom.cpp | 200 ++++++++++++++++++ .../C. Remove the Bracket.cpp | 139 ++++++++++++ problemlist.md | 9 + 11 files changed, 1445 insertions(+) create mode 100644 2024-2025 ICPC, NERC, Southern and Volga Russian Regional Contest (Unrated, Online Mirror, ICPC Rules, Preferably Teams)/C. DIY.cpp create mode 100644 2024-2025 ICPC, NERC, Southern and Volga Russian Regional Contest (Unrated, Online Mirror, ICPC Rules, Preferably Teams)/G. Guess One Character.cpp create mode 100644 Codeforces Round 1091 (Div. 2) and CodeCraft 26/A. The Equalizer.cpp create mode 100644 Codeforces Round 1091 (Div. 2) and CodeCraft 26/B. Flip the Bit (Easy Version).cpp create mode 100644 Codeforces Round 1091 (Div. 2) and CodeCraft 26/C. Grid Covering.cpp create mode 100644 Codeforces Round 933 (Div. 3)/F. Rudolf and Imbalance.cpp create mode 100644 Educational Codeforces Round 165 (Rated for Div. 2)/C. Minimizing the Sum.cpp create mode 100644 Hello 2024/C. Grouping Increases.cpp create mode 100644 Rayan Programming Contest 2024 - Selection (Codeforces Round 989, Div. 1 + Div. 2)/D. Darius' Wisdom.cpp create mode 100644 TypeDB Forces 2023 (Div. 1 + Div. 2, Rated, Prizes!)/C. Remove the Bracket.cpp diff --git a/2024-2025 ICPC, NERC, Southern and Volga Russian Regional Contest (Unrated, Online Mirror, ICPC Rules, Preferably Teams)/C. DIY.cpp b/2024-2025 ICPC, NERC, Southern and Volga Russian Regional Contest (Unrated, Online Mirror, ICPC Rules, Preferably Teams)/C. DIY.cpp new file mode 100644 index 0000000..9ace9b0 --- /dev/null +++ b/2024-2025 ICPC, NERC, Southern and Volga Russian Regional Contest (Unrated, Online Mirror, ICPC Rules, Preferably Teams)/C. DIY.cpp @@ -0,0 +1,130 @@ +/* Problem URL: https://codeforces.com/problemset/problem/2038/C */ + +#include +#include +#include + +using namespace std; +using namespace __gnu_pbds; + +template > +using ordered_set = tree; + +#define V vector + +#define rmin(a, b) a = min(a, b) +#define rmax(a, b) a = max(a, b) + +#define rep(i, lim) for (int i = 0; i < (lim); i++) +#define nrep(i, s, lim) for (int 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; +} + +const int oo = INT32_MAX >> 1; +const ll OO = INT64_MAX >> 1; + + +void pre() +{ + +} + +#define TEST 1 + +void solve() +{ + int n; + cin >> n; + + map c; + rep(i, n) { + ll x; + cin >> x; + c[x]++; + } + + vi a; + repv(i, c) { + i.second -= (i.second & 1); + while (i.second--) { + a.push_back(i.first); + } + } + + if (a.size() < 8) { + cout << "NO\n"; + return; + } + + cout << "YES\n"; + cout << a[0] << ' ' << a[2] << ' ' << a[1] << ' ' << a[a.size() - 1] << ' ' << a[a.size() - 3] << ' ' << a[2] << ' ' << a[a.size() - 3] << ' ' << a[a.size() - 1] << '\n'; +} + +int main() +{ + ios::sync_with_stdio(false); + cin.tie(nullptr); + + pre(); + + int t; + (TEST && cin >> t) || (t = 1); + while (t--) { + solve(); + } +} diff --git a/2024-2025 ICPC, NERC, Southern and Volga Russian Regional Contest (Unrated, Online Mirror, ICPC Rules, Preferably Teams)/G. Guess One Character.cpp b/2024-2025 ICPC, NERC, Southern and Volga Russian Regional Contest (Unrated, Online Mirror, ICPC Rules, Preferably Teams)/G. Guess One Character.cpp new file mode 100644 index 0000000..4237a50 --- /dev/null +++ b/2024-2025 ICPC, NERC, Southern and Volga Russian Regional Contest (Unrated, Online Mirror, ICPC Rules, Preferably Teams)/G. Guess One Character.cpp @@ -0,0 +1,131 @@ +/* Problem URL: https://codeforces.com/problemset/problem/2038/G */ + +#include +#include +#include + +using namespace std; +using namespace __gnu_pbds; + +template > +using ordered_set = tree; + +#define V vector + +#define rmin(a, b) a = min(a, b) +#define rmax(a, b) a = max(a, b) + +#define rep(i, lim) for (int i = 0; i < (lim); i++) +#define nrep(i, s, lim) for (int 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; +} + +const int oo = INT32_MAX >> 1; +const ll OO = INT64_MAX >> 1; + + +void pre() +{ + +} + +#define TEST 1 + +void solve() +{ + int n; + cin >> n; + + auto ask = [&](string c) { + cout << "1 " << c << endl; + int ans; + cin >> ans; + return ans; + }; + + auto answer = [&](int i, int c) { + cout << "0 " << i << ' ' << c << endl; + int ans; + cin >> ans; + }; + + int a1 = ask("1"); + int a11 = ask("11"); + int a10 = ask("10"); + + if (a1 != a11 + a10) { + answer(n, 1); + return; + } + + answer(n, 0); +} + +int main() +{ + ios::sync_with_stdio(false); + cin.tie(nullptr); + + pre(); + + int t; + (TEST && cin >> t) || (t = 1); + while (t--) { + solve(); + } +} diff --git a/Codeforces Round 1091 (Div. 2) and CodeCraft 26/A. The Equalizer.cpp b/Codeforces Round 1091 (Div. 2) and CodeCraft 26/A. The Equalizer.cpp new file mode 100644 index 0000000..c0aae04 --- /dev/null +++ b/Codeforces Round 1091 (Div. 2) and CodeCraft 26/A. The Equalizer.cpp @@ -0,0 +1,121 @@ +/* Problem URL: https://codeforces.com/contest/2217/problem/A */ + +#include +#include +#include + +using namespace std; +using namespace __gnu_pbds; + +template > +using ordered_set = tree; + +#define V vector + +#define rmin(a, b) a = min(a, b) +#define rmax(a, b) a = max(a, b) + +#define rep(i, lim) for (int i = 0; i < (lim); i++) +#define nrep(i, s, lim) for (int 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; +} + +const int oo = INT32_MAX >> 1; +const ll OO = INT64_MAX >> 1; + + +void pre() +{ + +} + +#define TEST 1 + +void solve() +{ + int n, k; + cin >> n >> k; + + vi a(n); + cin >> a; + int c = 0; + rep(i, n) { + c += a[i] & 1; + } + + if ((c & 1) || (~k & 1) || ((k & 1) && (~n & 1))) { + cout << "YES\n"; + return; + } + + cout << "NO\n"; +} + +int main() +{ + ios::sync_with_stdio(false); + cin.tie(nullptr); + + pre(); + + int t; + (TEST && cin >> t) || (t = 1); + while (t--) { + solve(); + } +} diff --git a/Codeforces Round 1091 (Div. 2) and CodeCraft 26/B. Flip the Bit (Easy Version).cpp b/Codeforces Round 1091 (Div. 2) and CodeCraft 26/B. Flip the Bit (Easy Version).cpp new file mode 100644 index 0000000..100a209 --- /dev/null +++ b/Codeforces Round 1091 (Div. 2) and CodeCraft 26/B. Flip the Bit (Easy Version).cpp @@ -0,0 +1,126 @@ +/* Problem URL: https://codeforces.com/contest/2217/problem/B */ + +#include +#include +#include + +using namespace std; +using namespace __gnu_pbds; + +template > +using ordered_set = tree; + +#define V vector + +#define rmin(a, b) a = min(a, b) +#define rmax(a, b) a = max(a, b) + +#define rep(i, lim) for (int i = 0; i < (lim); i++) +#define nrep(i, s, lim) for (int 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; +} + +const int oo = INT32_MAX >> 1; +const ll OO = INT64_MAX >> 1; + + +void pre() +{ + +} + +#define TEST 1 + +void solve() +{ + int n, k; + cin >> n >> k; + + vi a(n); + cin >> a; + + int p; + cin >> p; + p--; + + int a1 = 0; + for (int i = p - 1; i >= 0; i--) { + a1 += a[i] != a[i + 1]; + } + + int a2 = 0; + for (int i = p + 1; i < n; i++) { + a2 += a[i] != a[i - 1]; + } + + cout << max(a1 + (a[0] != a[p]), a2 + (a[n - 1] != a[p])) << '\n'; +} + +int main() +{ + ios::sync_with_stdio(false); + cin.tie(nullptr); + + pre(); + + int t; + (TEST && cin >> t) || (t = 1); + while (t--) { + solve(); + } +} diff --git a/Codeforces Round 1091 (Div. 2) and CodeCraft 26/C. Grid Covering.cpp b/Codeforces Round 1091 (Div. 2) and CodeCraft 26/C. Grid Covering.cpp new file mode 100644 index 0000000..0a4846d --- /dev/null +++ b/Codeforces Round 1091 (Div. 2) and CodeCraft 26/C. Grid Covering.cpp @@ -0,0 +1,114 @@ +/* Problem URL: https://codeforces.com/contest/2217/problem/C */ + +#include +#include +#include + +using namespace std; +using namespace __gnu_pbds; + +template > +using ordered_set = tree; + +#define V vector + +#define rmin(a, b) a = min(a, b) +#define rmax(a, b) a = max(a, b) + +#define rep(i, lim) for (int i = 0; i < (lim); i++) +#define nrep(i, s, lim) for (int 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; +} + +const int oo = INT32_MAX >> 1; +const ll OO = INT64_MAX >> 1; + + +void pre() +{ + +} + +#define TEST 1 + +void solve() +{ + ll n, m, a, b; + cin >> n >> m >> a >> b; + + if (gcd(n, a) != 1 || gcd(m, b) != 1 || gcd(n, m) > 2) { + cout << "NO\n"; + return; + } + + cout << "YES\n"; +} + +int main() +{ + ios::sync_with_stdio(false); + cin.tie(nullptr); + + pre(); + + int t; + (TEST && cin >> t) || (t = 1); + while (t--) { + solve(); + } +} diff --git a/Codeforces Round 933 (Div. 3)/F. Rudolf and Imbalance.cpp b/Codeforces Round 933 (Div. 3)/F. Rudolf and Imbalance.cpp new file mode 100644 index 0000000..7a998a7 --- /dev/null +++ b/Codeforces Round 933 (Div. 3)/F. Rudolf and Imbalance.cpp @@ -0,0 +1,193 @@ +/* Problem URL: https://codeforces.com/problemset/problem/1941/F */ + +#include +#include +#include + +using namespace std; +using namespace __gnu_pbds; + +template > +using ordered_set = tree; + +#define V vector + +#define rmin(a, b) a = min(a, b) +#define rmax(a, b) a = max(a, b) + +#define rep(i, lim) for (int i = 0; i < (lim); i++) +#define nrep(i, s, lim) for (int 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; +} + +const int oo = INT32_MAX >> 1; +const ll OO = INT64_MAX >> 1; + + +void pre() +{ + +} + +#define TEST 1 + +void solve() +{ + int n, m, k; + cin >> n >> m >> k; + + vl a(n); + vl d(m); + vl f(k); + cin >> a >> d >> f; + + map> c; + rep(i, n - 1) { + c[a[i + 1] - a[i]]++; + } + + if (c.begin()->second > 1 || c.begin()->first == 1) { + cout << c.begin()->first << '\n'; + return; + } + + sortv(d); + sortv(f); + + ll lim = c.begin()->first; + + int choice = 0; + rep(i, n - 1) { + if (a[i + 1] - a[i] == lim) { + choice = i; + break; + } + } + + auto getlesseq = [&](ll mid) { + ll ans = -1; + rep(i, m) { + auto itr = upper_bound(all(f), mid - d[i]) - f.begin(); + if (itr == 0) { + continue; + } + + rmax(ans, d[i] + f[itr - 1]); + } + + return ans; + }; + + auto getgreatereq = [&](ll mid) { + ll ans = OO; + rep(i, m) { + auto itr = lower_bound(all(f), mid - d[i]) - f.begin(); + if (itr == k) { + continue; + } + + rmin(ans, d[i] + f[itr]); + } + + return ans; + }; + + ll ch = a[choice]; + ll bt = max(ch - a[choice], a[choice + 1] - ch); + + auto getans = [&](ll m) { + if (m < a[choice] || m > a[choice + 1]) { + return; + } + ll tbt = max(m - a[choice], a[choice + 1] - m); + + if (tbt < bt) { + bt = tbt; + ch = m; + } + }; + + ll mid = (a[choice] + a[choice + 1]) >> 1; + + getans(getlesseq(mid)); + getans(getgreatereq(mid)); + + a.push_back(ch); + sortv(a); + + ll ans = 0; + rep(i, n) { + rmax(ans, a[i + 1] - a[i]); + } + + cout << ans << '\n'; +} + +int main() +{ + ios::sync_with_stdio(false); + cin.tie(nullptr); + + pre(); + + int t; + (TEST && cin >> t) || (t = 1); + while (t--) { + solve(); + } +} diff --git a/Educational Codeforces Round 165 (Rated for Div. 2)/C. Minimizing the Sum.cpp b/Educational Codeforces Round 165 (Rated for Div. 2)/C. Minimizing the Sum.cpp new file mode 100644 index 0000000..d96abe7 --- /dev/null +++ b/Educational Codeforces Round 165 (Rated for Div. 2)/C. Minimizing the Sum.cpp @@ -0,0 +1,148 @@ +/* Problem URL: https://codeforces.com/problemset/problem/1969/C */ + +#include +#include +#include + +using namespace std; +using namespace __gnu_pbds; + +template > +using ordered_set = tree; + +#define V vector + +#define rmin(a, b) a = min(a, b) +#define rmax(a, b) a = max(a, b) + +#define rep(i, lim) for (int i = 0; i < (lim); i++) +#define nrep(i, s, lim) for (int 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; +} + +const int oo = INT32_MAX >> 1; +const ll OO = INT64_MAX >> 1; + + +void pre() +{ + +} + +#define TEST 1 + +void solve() +{ + int n, k; + cin >> n >> k; + + vl a(n); + cin >> a; + + vvl sparse(20, vl(n)); + rep(i, n) { + sparse[0][i] = a[i]; + } + + nrep(j, 1, 20) { + for (int i = 0; i + (1 << (j - 1)) < n; i++) { + sparse[j][i] = min(sparse[j - 1][i], sparse[j - 1][i + (1 << (j - 1))]); + } + } + + auto squery = [&](int l, int r) { + int log = 31 - __builtin_clz(r - l + 1); + return min(sparse[log][l], sparse[log][r - (1 << log) + 1]); + }; + + vvl memo(n, vl(k + 1, -1)); + + function dp = [&](int i, int c) { + if (i >= n) { + return 0LL; + } + + ll &ans = memo[i][c]; + if (ans != -1) { + return ans; + } + + ans = OO; + for (int j = 0; j + c <= k && i + j < n; j++) { + rmin(ans, dp(i + j + 1, c + j) + squery(i, i + j) * (j + 1)); + } + + return ans; + }; + + cout << dp(0, 0) << '\n'; +} + +int main() +{ + ios::sync_with_stdio(false); + cin.tie(nullptr); + + pre(); + + int t; + (TEST && cin >> t) || (t = 1); + while (t--) { + solve(); + } +} diff --git a/Hello 2024/C. Grouping Increases.cpp b/Hello 2024/C. Grouping Increases.cpp new file mode 100644 index 0000000..6caa52e --- /dev/null +++ b/Hello 2024/C. Grouping Increases.cpp @@ -0,0 +1,134 @@ +/* Problem URL: https://codeforces.com/problemset/problem/1919/C */ + +#include +#include +#include + +using namespace std; +using namespace __gnu_pbds; + +template > +using ordered_set = tree; + +#define V vector + +#define rmin(a, b) a = min(a, b) +#define rmax(a, b) a = max(a, b) + +#define rep(i, lim) for (int i = 0; i < (lim); i++) +#define nrep(i, s, lim) for (int 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; +} + +const int oo = INT32_MAX >> 1; +const ll OO = INT64_MAX >> 1; + + +void pre() +{ + +} + +#define TEST 1 + +void solve() +{ + int n; + cin >> n; + vi a(n); + cin >> a; + + int x = oo; + int y = oo; + int ans = 0; + + rep(i, n) { + if (x > y) { + swap(x, y); + } + + if (a[i] <= x) { + x = a[i]; + continue; + } + + if (a[i] > y) { + x = a[i]; + ans++; + continue; + } + + y = a[i]; + } + + cout << ans << '\n'; +} + +int main() +{ + ios::sync_with_stdio(false); + cin.tie(nullptr); + + pre(); + + int t; + (TEST && cin >> t) || (t = 1); + while (t--) { + solve(); + } +} diff --git a/Rayan Programming Contest 2024 - Selection (Codeforces Round 989, Div. 1 + Div. 2)/D. Darius' Wisdom.cpp b/Rayan Programming Contest 2024 - Selection (Codeforces Round 989, Div. 1 + Div. 2)/D. Darius' Wisdom.cpp new file mode 100644 index 0000000..6ed03e2 --- /dev/null +++ b/Rayan Programming Contest 2024 - Selection (Codeforces Round 989, Div. 1 + Div. 2)/D. Darius' Wisdom.cpp @@ -0,0 +1,200 @@ +/* Problem URL: https://codeforces.com/problemset/problem/2034/D */ + +#include +#include +#include + +using namespace std; +using namespace __gnu_pbds; + +template > +using ordered_set = tree; + +#define V vector + +#define rmin(a, b) a = min(a, b) +#define rmax(a, b) a = max(a, b) + +#define rep(i, lim) for (int i = 0; i < (lim); i++) +#define nrep(i, s, lim) for (int 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; +} + +const int oo = INT32_MAX >> 1; +const ll OO = INT64_MAX >> 1; + + +void pre() +{ + +} + +#define TEST 1 + +void solve() +{ + int n; + cin >> n; + vi a(n); + cin >> a; + + array c = {0, 0, 0}; + set o; + rep(i, n) { + c[a[i]]++; + if (a[i] == 1) { + o.insert(i); + } + } + + V> ans; + + auto printans = [&]() { + cout << ans.size() << '\n'; + repv(i, ans) { + cout << i.first << ' ' << i.second << '\n'; + } + }; + + nrep(i, c[0], c[0] + c[1]) { + if (a[i] == 1) { + o.erase(i); + continue; + } + } + + int val = -1; + nrep(i, c[0], c[0] + c[1]) { + if (o.empty()) { + break; + } + + if (a[i] != 1) { + if (o.size() == 1) { + val = i; + break; + } + swap(a[*o.begin()], a[i]); + ans.emplace_back(*o.begin() + 1, i + 1); + o.erase(o.begin()); + } + } + + set t; + set z; + rep(i, c[0]) { + if (a[i] > 1) { + t.insert(i); + } + } + + nrep(i, c[0] + c[1], n) { + if (a[i] < 1){ + z.insert(i); + } + } + + int ch = c[0]; + if (!o.empty()) { + ch = *o.begin(); + } else { + if (t.empty() || z.empty()) { + cout << "0\n"; + return; + } + + ans.emplace_back(*t.begin() + 1, c[0] + 1); + val = c[0]; + ch = *t.begin(); + t.erase(t.begin()); + } + + int now = ch > c[0]; + while (!t.empty() || !z.empty()) { + if (now) { + ans.emplace_back(*t.begin() + 1, ch + 1); + ch = *t.begin(); + t.erase(t.begin()); + now ^= 1; + continue; + } + + ans.emplace_back(*z.begin() + 1, ch + 1); + ch = *z.begin(); + z.erase(z.begin()); + now ^= 1; + } + + ans.emplace_back(ch + 1, val + 1); + + printans(); +} + +int main() +{ + ios::sync_with_stdio(false); + cin.tie(nullptr); + + pre(); + + int t; + (TEST && cin >> t) || (t = 1); + while (t--) { + solve(); + } +} diff --git a/TypeDB Forces 2023 (Div. 1 + Div. 2, Rated, Prizes!)/C. Remove the Bracket.cpp b/TypeDB Forces 2023 (Div. 1 + Div. 2, Rated, Prizes!)/C. Remove the Bracket.cpp new file mode 100644 index 0000000..3be2c3c --- /dev/null +++ b/TypeDB Forces 2023 (Div. 1 + Div. 2, Rated, Prizes!)/C. Remove the Bracket.cpp @@ -0,0 +1,139 @@ +/* Problem URL: https://codeforces.com/problemset/problem/1787/C */ + +#include +#include +#include + +using namespace std; +using namespace __gnu_pbds; + +template > +using ordered_set = tree; + +#define V vector + +#define rmin(a, b) a = min(a, b) +#define rmax(a, b) a = max(a, b) + +#define rep(i, lim) for (int i = 0; i < (lim); i++) +#define nrep(i, s, lim) for (int 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; +} + +const int oo = INT32_MAX >> 1; +const ll OO = INT64_MAX >> 1; + + +void pre() +{ + +} + +#define TEST 1 + +void solve() +{ + int n; + ll s; + cin >> n >> s; + vl a(n); + cin >> a; + + V> act(n); + rep(i, n) { + if (a[i] >= s * 2) { + act[i] = {s, a[i] - s}; + continue; + } + + if (a[i] >= s) { + ll diff = a[i] - s; + act[i] = {diff, a[i] - diff}; + continue; + } + + act[i] = {0, a[i]}; + } + + vvl dp(n, vl(2, OO)); + dp[1][0] = a[0] * act[1].first; + dp[1][1] = a[0] * act[1].second; + + nrep(i, 2, n - 1) { + auto [x, y] = act[i]; + auto [xb, yb] = act[i - 1]; + dp[i][0] = min(dp[i - 1][0] + (a[i - 1] - xb) * x, dp[i - 1][1] + (a[i - 1] - yb) * x); + dp[i][1] = min(dp[i - 1][0] + (a[i - 1] - xb) * y, dp[i - 1][1] + (a[i - 1] - yb) * y); + } + + cout << min(dp[n - 2][0] + (a[n - 2] - act[n - 2].first) * a[n - 1], dp[n - 2][1] + (a[n - 2] - act[n - 2].second) * a[n - 1]) << '\n'; +} + +int main() +{ + ios::sync_with_stdio(false); + cin.tie(nullptr); + + pre(); + + int t; + (TEST && cin >> t) || (t = 1); + while (t--) { + solve(); + } +} diff --git a/problemlist.md b/problemlist.md index d1e7dca..ef938e0 100644 --- a/problemlist.md +++ b/problemlist.md @@ -112,6 +112,10 @@ A little collection of interesting problems that I randomly decided to do. Interesting to think about the transitions and the states, although figuring out it's a dp problem is already a challenge by itself. +- [C. Minimizing the Sum](https://codeforces.com/problemset/problem/1969/C) + + Simple dp problem, but it's still interesting to think about it. + ## Graph @@ -128,6 +132,11 @@ A little collection of interesting problems that I randomly decided to do. A very simple problem once you finally understand it, interesting to learn about dfs and all that. +- [G1. Min-Fund Prison (Easy)](https://codeforces.com/problemset/problem/1970/G1) + + A really easy problem, at least it is once you realize that it's just a tree and the + calculation is simple. + ## Math - [E2. Rudolf and Snowflakes (hard version)](https://codeforces.com/problemset/problem/1846/E2)