# ICPC North Vietnam 2022 **Problem B:** ```cpp= #include <bits/stdc++.h> using namespace std; #define ll long long #define ld long double #define ull unsigned long long #define bigint __int128 #define pb push_back #define Task "B" #define testBit(a, k) ((a >> k) & 1) #define flipBit(a, k) (a ^ (1ll << k)) const int N = 1e6 + 2, T = 5e3 + 2, mod = 1e9 + 7; const ll MAX = 1e18, MOD = 1000000000000000009; int m, n, s0, a[12], b[12]; vector <int> dis(N, -1); int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); if(fopen(Task".inp", "r")) { freopen(Task".inp", "r", stdin); freopen(Task".out", "w", stdout); } cin >> m >> n >> s0; for(int i = 1; i <= n; i++) cin >> a[i] >> b[i]; queue <int> q; q.push(s0); dis[s0] = 0; while(!q.empty()) { int u = q.front(); q.pop(); for(int i = 1; i <= n; i++) { int v = (1ll * u * a[i] + b[i]) % m; if(dis[v] != -1) continue; q.push(v); dis[v] = dis[u] + 1; } } cout << dis[0]; } ``` **Problem D:** ```cpp= #include <bits/stdc++.h> using namespace std; #define ll long long #define ld long double #define ull unsigned long long #define bigint __int128 #define pb push_back #define Task "D" #define testBit(a, k) ((a >> k) & 1) #define flipBit(a, k) (a ^ (1ll << k)) const int N = 2e5 + 2, T = 5e3 + 2, mod = 1e9 + 7; const ll MAX = 1e18, MOD = 1000000000000000009; int y, fac[12]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); if(fopen(Task".inp", "r")) { freopen(Task".inp", "r", stdin); freopen(Task".out", "w", stdout); } cin >> y; if(y == 1) return cout << 0, 0; fac[0] = 1; for(int i = 1; i <= 9; i++) fac[i] = fac[i - 1] * i; string ans; while(y != 0) { int idx = 1; while(idx < 9 && fac[idx + 1] <= y) idx += 1; ans += char(idx + 48); y -= fac[idx]; } reverse(ans.begin(), ans.end()); cout << ans; } ``` **Problem G:** ```cpp= #include <bits/stdc++.h> using namespace std; #define ll long long #define ld long double #define ull unsigned long long #define bigint __int128 #define pb push_back #define Task "G" #define testBit(a, k) ((a >> k) & 1) #define flipBit(a, k) (a ^ (1ll << k)) const int N = 5e5 + 2, T = 5e3 + 2, mod = 1e9 + 7; const ll MAX = 1e18, MOD = 1000000000000000009; ll SumSqr[N]; string s; void solve() { cin >> s; int n = s.size(); s = '#' + s; vector <ll> fR(n + 3); for(ll i = n; i >= 1; i--) fR[i] = (fR[i + 1] + (n - i + 1) * i) % mod; ll beauty = 0; for(int i = 1; i <= n; i++) { int l = i, r = n - i + 1; ll Mn = min(l, r), Mx = max(l, r); ll cnt = (SumSqr[Mn] + Mn * (Mn + 1 + Mx - 1) * (Mx - Mn - 1) / 2 + fR[Mx]) % mod; beauty = (beauty + (s[i] - 96) * cnt) % mod; // cout << cnt << "\n"; } cout << beauty << "\n"; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); if(fopen(Task".inp", "r")) { freopen(Task".inp", "r", stdin); freopen(Task".out", "w", stdout); } for(ll i = 1; i <= 5e5; i++) SumSqr[i] = (SumSqr[i - 1] + i * i) % mod; int q; cin >> q; while(q--) solve(); } ``` **Problem H:** ```cpp= #include <bits/stdc++.h> using namespace std; #define ll long long #define ld long double #define ull unsigned long long #define bigint __int128 #define pb push_back #define Task "H" #define testBit(a, k) ((a >> k) & 1) #define flipBit(a, k) (a ^ (1ll << k)) const int N = 2e1, T = 4e5 + 2, mod = 1e9 + 7; const ll maximum = 1e18, MOD = 1000000000000000009; multiset <int> p1, p2; void solve() { string s; int x; cin >> s; if(s == "IN") { cin >> x; if(p1.size() == p2.size()) // -> p1.size > p2.size { if(x <= *p2.begin()) p1.insert(x); else { int val = *p2.begin(); p1.insert(val); p2.erase(p2.find(val)); p2.insert(x); } } else if(p1.size() > p2.size()) // -> p1.size = p2.size { if(x >= *p1.rbegin()) p2.insert(x); else { int val = *p1.rbegin(); p1.erase(p1.find(val)); p1.insert(x); p2.insert(val); } } } else if(s == "OUT") { cin >> x; if(p1.size() == p2.size()) // -> p1.size > p2.size { if(p2.find(x) != p2.end()) p2.erase(p2.find(x)); else { int val = *p2.begin(); p1.erase(p1.find(x)); p1.insert(val); p2.erase(p2.find(val)); } } else if(p1.size() > p2.size()) // -> p1.size = p2.size { if(p1.find(x) != p1.end()) p1.erase(p1.find(x)); else { int val = *p1.rbegin(); p1.erase(p1.find(val)); p2.erase(p2.find(x)); p2.insert(val); } } } else { if(p1.size() > p2.size()) cout << *p1.rbegin() << "\n"; else cout << (*p1.rbegin() + *p2.begin()) / 2.0 << "\n"; } // if(p1.size() < p2.size() || (!p1.empty() && !p2.empty() && *p1.rbegin() > *p2.begin())) // cout << "ERROR: " << s << " " << x << "\n"; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); if(fopen(Task".inp", "r")) { freopen(Task".inp", "r", stdin); freopen(Task".out", "w", stdout); } p1.insert(0); p2.insert(2e9); int q; cin >> q; while(q--) solve(); } ``` # ICPC Central Vietnam 2022 **Problem A:** ```cpp= #include<bits/stdc++.h> using namespace std; int n, k, p[305], f[305][305][305]; string s; bool dp(int l, int r, int c){ if(c == 0) return false; if(l > r) return c > 0; if(r == l) return c - s[l] > 0; int sum = p[n] - p[r] + p[l - 1]; if(sum - (k - c) >= k) return true; int& res = f[l][r][c]; if(res != -1) return res; return res = ((dp(l + 2, r, c - s[l]) && dp(l + 1, r - 1, c - s[l])) || (dp(l, r - 2, c - s[r]) && dp(l + 1, r - 1, c - s[r]))); } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); freopen("A.inp", "r", stdin); cin >> n >> k >> s; s = '#' + s; p[0] = 0; for(int i = 1; i <= n; i++) s[i] = (s[i] == 'B'), p[i] = p[i - 1] + (int)s[i]; memset(f, -1, sizeof(f)); cout << (dp(1, n, k) ? "YES" : "NO"); } ``` **Problem B:** ```cpp= ``` **Problem C:** ```cpp= #include <bits/stdc++.h> using namespace std; #define ll long long #define ld long double #define ull unsigned long long #define bigint __int128 #define pb push_back #define fi first #define se second #define Task "C" #define testBit(a, k) ((a >> k) & 1) #define flipBit(a, k) (a ^ (1ll << k)) const int N = 2e5 + 2, T = 2e5 + 2, mod = 1e9 + 7; const ll maximum = 1e18, MOD = 1000000000000000009; struct TSegmentTree { ll f[4 * N][12]; void Update(int id, int low, int high, int i, int k, ll d) { if(low > i || high < i) return; if(low == high) { f[id][k] = d; return; } int mid = (low + high) / 2; if(i <= mid) Update(id * 2, low, mid, i, k, d); else Update(id * 2 + 1, mid + 1, high, i, k, d); f[id][k] = f[id * 2][k] + f[id * 2 + 1][k]; } ll GetF(int id, int low, int high, int L, int R, int k) { if(low > R || high < L) return 0; if(L <= low && high <= R) return f[id][k]; int mid = (low + high) / 2; return GetF(id * 2, low, mid, L, R, k) + GetF(id * 2 + 1, mid + 1, high, L, R, k); } }; TSegmentTree Tree; pair <int, int> p[N]; int n, k; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); if(fopen(Task".inp", "r")) { freopen(Task".inp", "r", stdin); freopen(Task".out", "w", stdout); } cin >> n >> k; for(int i = 1; i <= n; i++) cin >> p[i].fi >> p[i].se; sort(p + 1, p + 1 + n); ll ans = 0; for(int i = 1; i <= n; i++) { Tree.Update(1, 1, n, p[i].se, 1, 1); if(k == 1) ans += 1; for(int j = 2; j <= k; j++) { ll S = Tree.GetF(1, 1, n, 1, p[i].se - 1, j - 1); Tree.Update(1, 1, n, p[i].se, j, S); if(j == k) ans += S; } } cout << ans; } ``` **Problem D:** ```cpp= ``` **Problem G:** ```cpp= ``` **Problem H:** ```cpp= ``` **Problem I:** ```cpp= ``` **Problem N:** ```cpp= #include <bits/stdc++.h> using namespace std; #define ll long long #define ld long double #define ull unsigned long long #define bigint __int128 #define pb push_back #define Task "N" #define testBit(a, k) ((a >> k) & 1) #define flipBit(a, k) (a ^ (1ll << k)) const int N = 2e1, T = 4e5 + 2, mod = 1e9 + 7; const ll maximum = 1e18, MOD = 1000000000000000009; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); if(fopen(Task".inp", "r")) { freopen(Task".inp", "r", stdin); freopen(Task".out", "w", stdout); } int q; cin >> q; while(q--) { double n; cin >> n; double ans = 1000000000.0 / (n + 1); cout << fixed << setprecision(9) << ans << "\n"; } } ``` # ICPC South Vietnam 2022