vector<int> a(n); for (int i = 0; i < n; ++i) { cin >> a[i]; }
vector<pair<int, int>> res; auto dfs = [&](auto&& self, int l, int r) -> void { if (r - l < 2) return; int mid = l + r >> 1; for (int i = 0; i < n; ++i) { if (mid <= a[i] && a[i] < r) { res.push_back({ 2, i + 1 }); } } for (int i = l + 1; i < mid; ++i) { res.push_back({ 1, i }); } self(self, l, mid); self(self, mid, r); }; dfs(dfs, 0, n + 1);
cout << res.size() << "\n"; for (auto& [a, b] : res) { cout << a << " " << b << "\n"; }
return0; } /********************************************************************** Problem: 1237 User: KobicGend Language: C++ Result: AC Time:24 ms Memory:2548 kb **********************************************************************/
vector<pair<int, int>> a(n); for (int i = 0; i < n; ++i) { int x; cin >> x; a[i] = { x, i + 1 }; } sort(a.begin(), a.end());
vector<pair<int, int>> ans; auto solve = [&](auto&& self, int l, int r, int mn = 0) -> void { if (l > r) return; int mx = -1, mxnum = 0; for (int i = l; i <= r; ++i) { if ((r - i + 1) * (a[i].first - mn) > mx) { mx = (r - i + 1) * (a[i].first - mn); mxnum = i; } } if (a[mxnum].first > mn) { for (int i = mxnum; i <= r; ++i) { ans.push_back({ 2, a[i].second }); } } for (int i = mn + 1; i < a[mxnum].first; ++i) { ans.push_back({ 1, i }); } self(self, mxnum + 1, r, a[mxnum].first); self(self, l, mxnum - 1, mn); }; solve(solve, 0, n - 1);
cout << ans.size() << "\n"; for (auto [k, v] : ans) { cout << k << " " << v << "\n"; }
return0; }
/********************************************************************** Problem: 1237 User: KobicGend Language: C++ Result: AC Time:19 ms Memory:2552 kb **********************************************************************/
vector<vector<pair<int, int>>> E(n); for (int i = 0; i < n; ++i) { int u, v; cin >> u >> v; u--, v--; E[u].push_back({ v, i }); E[v].push_back({ u, i }); }
// 拓扑排序 queue<int> Q; vector<int> deg(n), vis(n); for (int u = 0; u < n; ++u) { deg[u] = E[u].size(); if (deg[u] == 1) Q.push(u); } while (!Q.empty()) { int v = Q.front(); Q.pop(); vis[v] = 1; for (auto [u, id] : E[v]) { if (deg[u] > 1) { if (--deg[u] == 1) Q.push(u); } } }
// dfs 找环 vector<int> V; for (int u = 0; u < n; ++u) { if (vis[u]) continue; V.push_back(u); int fromid = -1; dofor(auto [v, id] : E[V.back()]){ if (deg[v] != 1 && id != fromid) { vis[v] = 1; fromid = id; V.push_back(v); break; } } while (u != V.back()); }
ll ans = 0; vector<int> cnt(6); for (int u = 0; u < n; ++u) { deg[u] = E[u].size(); cnt[deg[u]]++; } for (int i = 1; i < V.size(); ++i) { int u = V[i], v = V[i - 1]; auto tcnt = cnt; --tcnt[deg[u]]; --tcnt[deg[v]]; ++tcnt[deg[u] - 1]; ++tcnt[deg[v] - 1];
if (tcnt[5]) continue; ans += tcnt[1] + tcnt[2] + tcnt[3]; }
cout << ans << "\n";
return0; } /********************************************************************** Problem: 1242 User: KobicGend Language: C++ Result: AC Time:85 ms Memory:9448 kb **********************************************************************/
bool flag = 0; voiddfs(int u, int fau = 0){ if (vis[u]) { circle.push_back(u); for (int i = fau; i != u; i = fa[i]) { circle.push_back(i); } flag = 1; circle.push_back(u); return; } vis[u] = 1; fa[u] = fau; for (auto v : E[u]) { if (v != fau) { dfs(v, u); if (flag) return; } } }
while (q--) { Hash t; int res = 0; for (int id = 0; id < n; ++id) { int kcnt = 0, i = 0; while (i < m) { // 比较第 i 位是否相同 if (t(i, i + 1) != s[id](i, i + 1)) { if (++kcnt > k) break; } int len = m - i; while (len) { if (t(i, i + len) != s[id](i, i + len)) len /= 2; elsebreak; } i += max(1, len); } res += kcnt <= k; } cout << res << endl; }
int ans = 0; auto solve = [&](ll t) { auto cal = [&](ll b) { ll a = b + t; vector<ll> powa(k), powb(k); powa[0] = powb[0] = 1; for (int i = 1; i < k; ++i) { if (1.0 * powa[i - 1] * a > inf) return inf; powa[i] = powa[i - 1] * a; if (1.0 * powb[i - 1] * b > inf) return inf; powb[i] = powb[i - 1] * b; } ll sum = 0; for (int i = 0; i < k; ++i) { if (1.0 + sum + powa[i] * powb[k - 1 - i] > inf) return inf; sum += powa[i] * powb[k - 1 - i]; } if (1.0 * sum * (a - b) > inf) return inf; sum *= a - b; return sum; }; ll l = 1, r = 1e9; while (l < r) { ll mid = l + r >> 1; if (cal(mid) >= n) r = mid; else l = mid + 1; } ans += cal(l) == n; };
for (ll i = 1; i * i <= min(mx, n); ++i) { if (n % i) continue; solve(i); if (i != n / i) solve(n / i); }
cout << ans << "\n"; }
return0; }
/********************************************************************** Problem: 1245 User: KobicGend Language: C++ Result: AC Time:259 ms Memory:2380 kb **********************************************************************/