voidsolve(){ int a, b, c, m; cin >> m >> a >> b >> c; cout << std::min(a, m) + std::min(b, m) + std::min(2 * m - std::min(a, m) - std::min(b, m), c) << '\n'; }
voidsolve(){ int a, b, c, m; cin >> m >> a >> b >> c; cout << std::min(a, m) + std::min(b, m) + std::min(2 * m - std::min(a, m) - std::min(b, m), c) << '\n'; }
E题
转化为$y=x\cdot k^n$,考虑枚举$k^n$,然后对边界情况取交集即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
voidsolve(){ u64 k, l1, r1, l2, r2, ans = 0; cin >> k >> l1 >> r1 >> l2 >> r2; u64 tk = 1; while (l1 * tk <= r2) { int l = std::max(l1, (l2 + tk - 1) / tk); int r = std::min(r1, r2 / tk); if (r >= l) { ans += r - l + 1; } tk *= k; } cout << ans << '\n'; }
voidsolve(){ int n, m, q; cin >> n >> m >> q; std::vector<bool> hasha(2 * n + 1), hashb(2 * m + 1); i64 suma = 0, sumb = 0; for (int i = 0; i < n; i++) { int a; cin >> a; suma += a; hasha[a + n] = true; } for (int j = 0; j < m; j++) { int b; cin >> b; sumb += b; hashb[b + m] = true; } auto check = [&](i64 x, i64 y) -> bool { if (x > n || x < -n || y > m || y < -m) returnfalse; return hasha[x + n] && hashb[y + m]; }; while (q--) { int que; cin >> que; bool flag = false; for (int i = 1; 1ll * i * i <= std::abs(que); i++) { if (que % i == 0) { if (check(suma - i, sumb - que / i) || check(suma + i, sumb + que / i) || check(suma - que / i, sumb - i) || check(suma + que / i, sumb + i)) { flag = true; cout << "YES\n"; break; } } } if (!flag) { cout << "NO\n"; } } }
voidsolve(){ int n; cin >> n; std::vector<int> a(n + 1), in(n + 1); for (int i = 1; i <= n; i++) { cin >> a[i]; in[a[i]]++; } int ans = 2; std::queue<int> q; for (int i = 1; i <= n; i++) { if (in[i] == 0) { q.push(i); } } while (!q.empty()) { ans++; int size = q.size(); while (size--) { int u = q.front(); q.pop(); if (--in[a[u]] == 0) { q.push(a[u]); } } } cout << ans << '\n'; }
voidsolve(){ int n; cin >> n; std::vector<int> dp(n + 1, 1), in(n + 1), r(n + 1); for (int i = 1; i <= n; i++) { cin >> r[i]; in[r[i]]++; } std::queue<int> q; for (int i = 1; i <= n; i++) { if (!in[i]) { q.push(i); } } int ans = 2, t = 1; while (!q.empty()) { ans++; int size = q.size(); while (size--) { int u = q.front(); q.pop(); if (dp[u] > t) { q.push(u); } int v = r[u]; if (dp[u] == t) { dp[v] += dp[u]; if (--in[v] == 0) { q.push(v); } } } t++; } cout << ans << '\n'; }