# Bài làm các đề thi thành phố vòng 1 ## Link đề thi [đề thi thành phố vòng 1](http://www.chuyentin.pro/search/label/%C4%90%E1%BB%81%20thi%20hoc%20sinh%20gi%E1%BB%8Fi%20tin%20h%E1%BB%8Dc%20l%E1%BB%9Bp%2012%20th%C3%A0nh%20ph%E1%BB%91%20H%C3%A0%20N%E1%BB%99i) ## 2018 ### Bài 1 ``` #include<bits/stdc++.h> using namespace std; const int MN = 1e6 + 7; long long n; bool unpr[MN]; int pr[MN], lim; void sieve() { unpr[0] = true; unpr[1] = true; pr[lim] = 1; for (int i = 2; i*i < MN; i++) { if (unpr[i]) continue; pr[++lim] = i; for (int j = i*i; j < MN; j += i) unpr[j] = true; } } void process() { cin >> n; long long ans = -1; for (int i = 1; i <= lim; i++) { if (pr[i]*pr[i+1]*pr[i+2] > n) break; ans = pr[i]*pr[i+1]*pr[i+2]; } cout << ans << "\n"; } int main() { freopen("BAI1.INP", "r", stdin); freopen("BAI1.OUT", "ư", stdout); int t; cin >> t; sieve(); while (t--) process(); return 0; } ``` ### Bài 2 ``` #include<bits/stdc++.h> using namespace std; const int MN = 1e5 + 5; int n; int a[MN], p[MN]; long long ans; int main() { freopen("BAI2.INP", "r", stdin); freopen("BAI2.OUT", "ư", stdout); cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; for (int i = 1; i <= n; i++) cin >> p[i]; int save = p[1], flag = 0; for (int i = 1; i <= n; i++) { if (p[i] < save) { ans += flag * save; save = p[i]; flag = 0; } flag += a[i]; } ans += flag * save; cout << ans; return 0; } ``` ### Bài 3 > Chưa làm ### Bài 4 > Chưa làm ## 2019 ### Bài 1 ``` #include<bits/stdc++.h> using namespace std; long long n, ans; int main() { freopen("BAI1.INP", "r", stdin); freopen("BAI1.OUT", "w", stdout); cin >> n; n *= 2; for (long i = 1; i <= sqrt(n); i++) { if (n % i == 0) { long long t = (n/i)-i+1; if (t % 2 == 0) ans++; } } cout << ans; return 0; } ``` ### Bài 2 ``` #include<bits/stdc++.h> using namespace std; int a, b, k; long long n; int main() { freopen("BAI2.INP", "r", stdin); freopen("BAI2.OUT", "w", stdout); cin >> a >> b >> k; k -= 10; long long t = 100; while (1) { long long ok = a*t+b; if (ok % k == 0) { n = ok/k; break; } t *= 10; } cout << n; return 0; } ``` ### Bài 3 > Chưa làm ### Bài 4 > Chưa làm ## 2020 ### Bài 1 ``` #include<bits/stdc++.h> using namespace std; #define ll long long ll l, r; ll sum(ll s, ll e) { return (e+s)*(e-s+1)/2; } ll bs(ll s, ll e) { ll mid = (s+e)/2; ll sum1 = sum(l, mid), sum2 = sum(mid+1, r); if (s >= e) { return mid; } if (sum1 == sum2) return mid; else if (sum1 < sum2) s = mid+1; else e = mid; return bs(s, e); } int main() { freopen("BAI1.INP", "r", stdin); freopen("BAI1.OUT", "w", stdout); cin >> l >> r; ll m = (l+r)/2; ll ans = m; for (ll i = m; i < r; i++) { if (sum(l,i) >= sum(i+1,r)) { if (sum(i,r)-sum(l,i-1) >= sum(l,i)-sum(i+1,r)) ans = i; else ans = i-1; break; } } cout << ans; return 0; } ``` ### Bài 2 ``` #include<bits/stdc++.h> using namespace std; string s; bool ok; long long sum; int main() { freopen("BAI2.INP", "r", stdin); freopen("BAI2.OUT", "w", stdout); cin >> s; for (auto c : s) { int t = c - '0'; if (t == 0) ok = true; sum += t; } if (ok && (sum % 3 == 0)) { sort(s.begin(), s.end(), greater<>()); cout << s; } else cout << -1; return 0; } ``` ### Bài 3 ``` #include<bits/stdc++.h> using namespace std; const int MN = 1e5 + 5; int n, m; int node[MN*4]; int ans; void update(int l, int r, int id, int u, int v) { if (l > v || r < u) return; if (u <= l && r <= v) { node[id]++; return; } int mid = (l+r)/2; update(l, mid, id*2, u, v); update(mid+1, r, id*2+1, u, v); } void lazy(int l, int r, int id) { if (l >= r) { ans = max(ans, node[id]); return; } node[id*2] += node[id]; node[id*2+1] += node[id]; node[id] = 0; int mid = (l+r)/2; lazy(l, mid, id*2); lazy(mid+1, r, id*2+1); } int source(int l, int r, int id) { if (l >= r) { if (node[id] == ans) return 1; return 0; } int mid = (l+r)/2; return source(l, mid, id*2) + source(mid+1, r, id*2+1); } int main() { freopen("BAI3.INP", "r", stdin); freopen("BAI3.OUT", "w", stdout); cin >> n >> m; int l, r; while (m--) { cin >> l >> r; if (l <= r) update(1, n, 1, l, r); else { update(1, n, 1, 1, r); update(1, n, 1, l, n); } } lazy(1, n, 1); cout << ans << " " << source(1, n, 1); return 0; } ``` ### Bài 4 ``` #include<bits/stdc++.h> using namespace std; const int MN = 1005; int n, m; int a[MN][MN]; int vs[MN][MN]; int x, y, z, t; int dir[4][2] = { {1,0}, {0,1}, {-1,0}, {0,-1} }; int bfs() { queue<pair<int,int>> q; vs[x][y] = 1; q.push({x,y}); while (q.size()) { int u = q.front().first; int v = q.front().second; q.pop(); if (!vs[u][v]) continue; for (int i = 0; i < 4; i++) { int uu = u + dir[i][0]; int vv = v + dir[i][1]; if (vs[uu][vv] || a[uu][vv] == 0) continue; vs[uu][vv] = vs[u][v] + 1; if (uu == z && vv == t) return vs[uu][vv]; q.push({uu,vv}); } } return 0; } int main() { freopen("BAI4.INP", "r", stdin); freopen("BAI4.OUT", "w", stdout); cin >> n >> m; cin >> x >> y >> z >> t; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { cin >> a[i][j]; } } cout << bfs()-1; return 0; } ``` ## 2021 ### Bài 1 ``` #include<bits/stdc++.h> using namespace std; int a = 1; int main() { freopen("TBS.INP", "r", stdin); freopen("TBS.OUT", "w", stdout); double j; for (int i = 0; i < 4; i++) { cin >> j; if (j == 0) a = 0; else if (j < 0) a *= -1; } cout << a; return 0; } ``` ### Bài 2 ``` #include<bits/stdc++.h> using namespace std; int a = 1; long long n; int main() { freopen("DKT.INP", "r", stdin); freopen("DKT.OUT", "w", stdout); cin >> n; long long ans = n*(n+1)/2; ans %= 26; char c = ans + 'A'; cout << c; return 0; } ``` ### Bài 3 ``` #include<bits/stdc++.h> using namespace std; #define ll long long const int MN = 1e5 + 5; int n, k; map<ll,ll> m; vector<ll> v; ll ans; int main() { freopen("DC.INP", "r", stdin); freopen("DC.OUT", "w", stdout); cin >> n >> k; ll a, b; for (int i = 1; i <= n; i++) { cin >> a >> b; ++b; m[a] += 1; m[b] -= 1; v.push_back(a); v.push_back(b); } sort(v.begin(), v.end()); ll t = 0, save = 0; for (auto c : v) { if (m[c] == 0) continue; t += m[c]; m[c] = 0; if (t == k) save = c; else { if (save != 0) ans += c - save; save = 0; } } cout << ans; return 0; } ``` ### Bài 4 ``` #include<bits/stdc++.h> using namespace std; const int MN = 1e5 + 5; int n, m, k; int vs[MN], r[MN]; vector<int> g[MN], bv; int mx, mn = MN; int ans; void tree() { queue<int> q; vs[1] = -1; r[1] = 1; q.push(1); while (q.size()) { int u = q.front(); q.pop(); for (auto v : g[u]) { if (vs[v] != 0) continue; vs[v] = u; r[v] = r[u]+1; q.push(v); } } } int trace(int u, int v) { if (r[u] < r[v]) swap(u,v); int k = 0; while (r[u] > r[v]) { u = vs[u]; k++; } while (u != v) { u = vs[u]; v = vs[v]; k += 2; } return k; } int main() { freopen("BV.INP", "r", stdin); freopen("BV.OUT", "w", stdout); cin >> n >> m >> k; for (int i = 1, u, v; i < n; i++) { cin >> u >> v; g[u].push_back(v); g[v].push_back(u); } for (int i = 1, j; i <= m; i++) { cin >> j; bv.push_back(j); } tree(); for (int i = 1; i <= n; i++) { bool ok = true; for (auto v : bv) { if (trace(i,v) > k) { ok = false; break; } } if (ok) ans++; } cout << ans; return 0; } ``` ### Bài 5 > Chưa làm ## 2022 ### Bài 1 ``` #include<bits/stdc++.h> using namespace std; const int MN = 1e6 + 6; long long a, b; bool unpr[MN]; long long ans; void sieve() { unpr[0] = 1; unpr[1] = 1; for (int i = 2; i*i < MN; i++) { if (unpr[i]) continue; for (int j = i*i; j < MN; j += i) unpr[j] = 1; } } int main() { freopen("CP.INP", "r", stdin); freopen("CP.OUT", "w", stdout); cin >> a >> b; sieve(); for (long long i = ceil(sqrt(a)); i <= sqrt(b); i++) { if (!unpr[i]) ans++; } cout << ans; return 0; } ``` ### Bài 2 ``` #include<bits/stdc++.h> using namespace std; long long n, x; long long ans; int main() { freopen("BS.INP", "r", stdin); freopen("BS.OUT", "w", stdout); cin >> n >> x; for (int i = 1, j; i <= sqrt(x); i++) { if (x%i) continue; j = x/i; if (j > n || i > n) continue; ans += 2; if (j == i) ans--; } cout << ans; return 0; } ``` ### Bài 3 ``` #include<bits/stdc++.h> using namespace std; const int MN = 505; const int MX = 1e5 + 5; long lim; int n; int a[MN]; bool dp[MN][MX]; int main() { cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; lim += a[i]; } dp[0][0] = true; for (int i = 1; i <= n; i++) { for (long j = 0; j <= lim; j++) { dp[i][j] = dp[i-1][j]; if (j >= a[i]) dp[i][j] = dp[i-1][j] || dp[i-1][j-a[i]]; } } for (long i = lim; i > 0; i--) { int t = i/2; if (i % 2 == 0 && dp[n][i] && dp[n][t]) { cout << t; break; } } return 0; } ``` ### Bài 4 > Chưa làm ### Bài 5 > Chưa làm :::info Đức Huy :::