#include<bits/stdc++.h> #include<random> using ll = longlong; constexpr ll V = 1e12;
ll n, k; ll thres; std::mt19937_64 rng(std::random_device{}());
ll ceil(ll x, ll y){ return (x - 1) / y + 1; }
ll f(ll n, ll k){ ll m, v = 0; while (true) { if (n < k) { m = n - 1; break; } n = n - ceil(n, k); v++; } while (v--) m = m + m / (k - 1) + 1; return m; }
ll handle(){ ll rounds = 0; [&] { ll e = n; auto find_l = [&] { ll f = (e + k - 1) / k; ll v = std::max(2ll, (f - 1) * k + 1); return v; };
while (e > 1) { ll l = find_l(); ll t = (e + k - 1) / k; ll x = (e - l) / t + 1; rounds += x; e -= t * x; } }();
ll s = 0; auto find_max = [&] { ll f = s / (k - 1); return (f + 1) * (k - 1) - 1; };
for (; rounds > 0;) { ll r = find_max(); ll t = s / (k - 1) + 1; ll x = (r - s) / t + 1; x = std::min(x, rounds); s = s + x * t; rounds -= x; }
return s; }
voidrun(){ std::cin >> n >> k; thres = std::sqrt(n);
if (k == 1) std::cout << n << "\n"; elseif (k <= thres) { auto res = f(n, k); std::cout << res + 1 << "\n"; } else std::cout << handle() + 1 << "\n"; }
intmain(){ std::cin.tie(0)->sync_with_stdio(0), std::cout.tie(0); int t = 100; std::cin >> t; while (t--) run(); }
#include<bits/stdc++.h> constexprint N = 256; using bs = std::bitset<N>;
int n, k; std::vector<int> g[N]; bool vis[N];
namespace solver { bs B[N], val[N]; std::pair<int, int> seg[N]; int cnt; int res[N];
voidinsert(bs b, int l, int r){ if (cnt == n) return;
auto tmp = b; while (true) { int i = b._Find_first(); if (i > n) break; if (!vis[i]) { vis[i] = true; B[i] = b, val[i] = tmp; seg[i] = {l, r}; cnt++; return; } else b ^= B[i]; } }
boolcheck(){ return cnt == n; }
// <coef, RHS> voidsolve(std::vector<std::pair<bs, int>> &vec){ // reduce for (int i = 1; i < n; i++) { for (int j = 1; j <= i; j++) { if (vec[i].first.test(j)) { vec[i].first ^= vec[j - 1].first; vec[i].second ^= vec[j - 1].second; } } }
for (int i = n - 2; i >= 0; i--) { for (int j = n; j > i + 1; j--) { if (vec[i].first.test(j)) { vec[i].first ^= vec[j - 1].first; vec[i].second ^= vec[j - 1].second; } } }
std::cout << "! "; for (int i = 1; i < n; i++) std::cout << vec[i].second << ' '; std::cout << std::endl; } }; // namespace solver
voiddfs(int l, int u, int fa, bs &mask, int dep){ mask.set(u); if (dep == k) { if (l <= u) solver::insert(mask, l, u); mask.reset(u); return; } for (auto v : g[u]) { if (v == fa) continue; dfs(l, v, u, mask, dep + 1); } mask.reset(u); }
intmain(){ std::cin >> n >> k; for (int i = 1, u, v; i < n; i++) { std::cin >> u >> v; g[u].push_back(v), g[v].push_back(u); }
voidrun(){ std::cin >> a >> b; auto reduce = [&](ll &x, ll &y) { ll g = std::gcd(x, y); x /= g, y /= g; }; ll g = std::gcd(a, b); a /= g, b /= g;
std::queue<std::tuple<ll, ll, ll>> q; q.push({a, b, 0}); ll ans = 0; while (!q.empty()) { auto [x, y, c] = q.front(); q.pop(); if (y % x == 0) { std::cout << 2 + c << "\n"; return; } reduce(x, y); q.push({x - 1, y, c + 1}), q.push({x, y - 1, c + 1}); } }
intmain(){ std::cin.tie(0)->sync_with_stdio(0), std::cout.tie(0); int t; std::cin >> t; while (t--) run(); }
#include<bits/stdc++.h> constexprint N = 5e5 + 10; using ll = longlong;
ll n, m, a[N], b[N];
voidrun(){ std::cin >> n >> m; int atk = 0; for (int i = 1; i <= n; i++) std::cin >> a[i], atk += a[i] != 1; for (int i = 1; i <= m; i++) std::cin >> b[i]; atk += (atk != n);
std::sort(a + 1, a + 1 + n); std::sort(b + 1, b + 1 + m);
ll boom = 0; int p1 = 1, p2 = 1; while (true) { if (p1 <= n && a[p1] <= boom) { p1++, boom++; continue; } if (p2 <= m && b[p2] <= boom) { p2++, boom++; continue; }
if (p1 <= n && a[p1] - 1 <= boom) { p1++, boom++; continue; } if (p2 <= m && b[p2] - atk <= boom) { int at = b[p2] - boom; atk -= at; p2++, boom++; continue; } elseif (p2 <= m && b[p2] - atk > boom) { std::cout << "NO\n"; return; } break; }
std::cout << "YES\n"; }
intmain(){ std::cin.tie(0)->sync_with_stdio(0), std::cout.tie(0); int t; std::cin >> t; while (t--) run(); }
#include<bits/stdc++.h> #include<cstdio> constexprint N = 1005;
int n, m; int g[N][N];
voidrun(){ std::cin >> n >> m; int t = 1; for (int sum = 2; sum <= n + m; sum++) { for (int i = 1; i <= n; i++) { int j = sum - i; if (1 <= j && j <= m) g[i][j] = t++; } }
std::cout << "YES\n"; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) std::cout << g[i][j] << " \n"[j == m]; } }
intmain(){ std::cin.tie(0)->sync_with_stdio(0), std::cout.tie(0); int t; std::cin >> t; while (t--) run(); }