diff --git a/Codeforces Round 1079 (Div. 1)/B. Another Problem about Beautiful Pairs.cpp b/Codeforces Round 1079 (Div. 1)/B. Another Problem about Beautiful Pairs.cpp new file mode 100644 index 0000000..8d35fe2 --- /dev/null +++ b/Codeforces Round 1079 (Div. 1)/B. Another Problem about Beautiful Pairs.cpp @@ -0,0 +1,139 @@ +/* Problem URL: https://codeforces.com/problemset/problem/2196/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; + cin >> n; + + vl a(n); + cin >> a; + + int b = sqrt(n) + 1; + + ll ans = 0; + rep(i, n) { + if (a[i] >= b) { + for (int k = 1; i + k * a[i] < n; k++) { + if (k == a[i + k * a[i]]) { + ans++; + } + } + + for (int k = -1; i + k * a[i] >= 0; k--) { + if (-k == a[i + k * a[i]]) { + ans++; + } + } + + continue; + } + + for (int k = 1; k < b && i + k * a[i] < n; k++) { + if (k == a[i + k * a[i]]) { + ans++; + } + } + } + + 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/Codeforces Round 945 (Div. 2)/C. Cat, Fox and Double Maximum.cpp b/Codeforces Round 945 (Div. 2)/C. Cat, Fox and Double Maximum.cpp new file mode 100644 index 0000000..9c419a0 --- /dev/null +++ b/Codeforces Round 945 (Div. 2)/C. Cat, Fox and Double Maximum.cpp @@ -0,0 +1,171 @@ +/* Problem URL: https://codeforces.com/problemset/problem/1973/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 p(n); + cin >> p; + + vi ans; + int best = 0; + + priority_queue> mi; + priority_queue, V>, greater<>> ma; + + auto getans = [&]() -> pair { + vi t(n); + + int now = 1; + while (!mi.empty()) { + auto [c, i] = mi.top(); + mi.pop(); + t[i] = now; + now++; + } + + now = n; + while (!ma.empty()) { + auto [c, i] = ma.top(); + ma.pop(); + t[i] = now; + now--; + } + + int ans = 0; + nrep(i, 1, n - 1) { + ans += t[i] + p[i] > max(t[i + 1] + p[i + 1], t[i - 1] + p[i - 1]); + } + + return {t, ans}; + }; + + rep(i, n) { + if (i & 1) { + mi.emplace(p[i], i); + } else { + ma.emplace(p[i], i); + } + } + + auto [t, v] = getans(); + swap(ans, t); + best = v; + + rep(i, n) { + if (i & 1) { + ma.emplace(p[i], i); + } else { + mi.emplace(p[i], i); + } + } + + auto [t2, v2] = getans(); + if (v2 > best) { + swap(ans, t2); + best = v2; + } + + cout << ans; +} + +int main() +{ + ios::sync_with_stdio(false); + cin.tie(nullptr); + + pre(); + + int t; + (TEST && cin >> t) || (t = 1); + while (t--) { + solve(); + } +} diff --git a/Helvetic Coding Contest 2024 online mirror (teams allowed, unrated)/G1. Min-Fund Prison (Easy).cpp b/Helvetic Coding Contest 2024 online mirror (teams allowed, unrated)/G1. Min-Fund Prison (Easy).cpp new file mode 100644 index 0000000..13b1788 --- /dev/null +++ b/Helvetic Coding Contest 2024 online mirror (teams allowed, unrated)/G1. Min-Fund Prison (Easy).cpp @@ -0,0 +1,135 @@ +/* Problem URL: https://codeforces.com/problemset/problem/1970/G1 */ + +#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; + ll c; + cin >> n >> m >> c; + + vvi graph(n); + while (m--) { + int a, b; + cin >> a >> b; + a--, b--; + graph[a].push_back(b); + graph[b].push_back(a); + } + + ll ans = OO; + function dfs = [&](int i, int p) { + ll c = 1; + repv(j, graph[i]) { + if (j == p) { + continue; + } + + c += dfs(j, i); + } + + rmin(ans, c * c + (n - c) * (n - c)); + return c; + }; + + dfs(0, 0); + 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)/C. Trapped in the Witch's Labyrinth.cpp b/Rayan Programming Contest 2024 - Selection (Codeforces Round 989, Div. 1 + Div. 2)/C. Trapped in the Witch's Labyrinth.cpp new file mode 100644 index 0000000..7bb572a --- /dev/null +++ b/Rayan Programming Contest 2024 - Selection (Codeforces Round 989, Div. 1 + Div. 2)/C. Trapped in the Witch's Labyrinth.cpp @@ -0,0 +1,184 @@ +/* Problem URL: https://codeforces.com/problemset/problem/2034/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, m; + cin >> n >> m; + + V a(n); + cin >> a; + + V> loop(n, V(m)); + + map> var; + var['U'] = {-1, 0}; + var['D'] = {1, 0}; + var['L'] = {0, -1}; + var['R'] = {0, 1}; + + V> vis(n, V(m)); + V> frame(n, V(m)); + + function dfs = [&](int i, int j) { + if (i < 0 || i >= n || j < 0 || j >= m) { + return false; + } + + if (frame[i][j] || loop[i][j]) { + loop[i][j] = true; + return true; + } + + if (vis[i][j]) { + return false; + } + + vis[i][j] = true; + frame[i][j] = true; + + if (a[i][j] == '?') { + repv(k, var) { + int id = i + k.second[0]; + int jd = j + k.second[1]; + + if (dfs(id, jd)) { + a[i][j] = k.first; + loop[i][j] = true; + frame[i][j] = false; + return true; + } + } + + frame[i][j] = false; + return false; + } + + auto [c, k] = var[a[i][j]]; + int id = i + c; + int jd = j + k; + + if (dfs(id, jd)) { + loop[i][j] = true; + frame[i][j] = false; + return true; + } + + frame[i][j] = false; + return false; + }; + + rep(i, n) { + rep(j, m) { + dfs(i, j); + } + } + + int ans = 0; + rep(i, n) { + rep(j, m) { + ans += loop[i][j]; + } + } + + cout << ans << '\n'; +} + +int main() +{ + ios::sync_with_stdio(false); + cin.tie(nullptr); + + pre(); + + int t; + (TEST && cin >> t) || (t = 1); + while (t--) { + solve(); + } +}