cf1904
vp 的,不是很行。
A.B. 略
C. 有点诈骗,发现三次以上肯定可以造出来一个 0。
D. 感觉有点难度,可以用单调栈之后,就变成区间取 max 的操作。
E.F. 板子题。
E. 是维护直径。
F. 是区间建图。
cf1907
没有速通的场。
G 题发现锁定基环树多出来的边之后方案唯一。
直接写就好了。
https://codeforces.com/contest/1907/submission/235936352
不想 dp 就能很快过了。
cf1902
模板题场。
E 字典树。
F 可持久化线性基。
https://codeforces.com/contest/1902/submission/235829632
cf1900
A. 有无>=3
B. 模拟这个操作或者结论,都能过。
C. 简单
D. 欧拉反演
E. 缩点之后 dp。
F. 观察操作次数不超过 log 然后分治。
cf1896
A. a[0] == 1
B. 模拟
C. 贪心
D. /*https://www.luogu.com.cn/blog/stoorz/hu-die-yu-hua-fou-dei-fou-shuo-di-gu-shi-ti-xie\*/
E. 线段覆盖扫描线
cf1901
A. 模拟
B. 贪心
C. 尝试都变成 l。
D. 贪心的寻找答案
1234567891011121314151617181920212223242526void solve() { int n; cin >> n; vi a(n); rep(i, n) cin >> a[i]; ll ans = lnf; // rep(i, n) { // ll res = a[i]; // rep(j, i) { // cmax(res, a[j] + n - 1 - j); // } // rep(j, i + 1, n) { // cmax(res, a[j] + j); // } // cmin(ans, res); // } vi b(n + 1); for (int i = n - 1; i >= 0; i--) b[i] = max(b[i + 1], a[i] + i); vi c(n + 1); for ...
cf1898
A. 贪心的换前缀即可
B. 倒序,贪心的平均拆分。
C. 构造一个环和一条+2的路。
D. 其实也就是改变两个位置的符号,枚举情况就好了。
123456789101112131415161718192021void solve() { int n; cin >> n; vc<pii> p(n); rep(i, n) cin >> p[i].fi; rep(i, n) cin >> p[i].se; sort(all(p)); ll res = 0; rep(i, n) { res += abs(p[i].fi - p[i].se); } vc<ll> w1, w2; rep(i, n) { w1.pb(p[i].fi + p[i].se - abs(p[i].fi - p[i].se)); w2.pb(-p[i].fi - p[i].se - abs(p[i].fi - p[i].se)); } cout << r ...
cf1899
速通场。
A. n%3==0
B. 前缀和,模拟
C. 简单dp
D. (x,x) (1,2)
E. 当操作进行到最小值的时候,整个序列都是不变的,事实上只需要最小值之后的有序就可以了。
F. 简单构造
G. 扫描线
cf1895
A.显然。
123456789101112void solve() { int x, y, k; cin >> x >> y >> k; if (y <= x) { cout << x << "\n"; } else { int t = min(x + k, y); cout << y + y - t << "\n"; } }
B.选择两个子集,极差之和最小。
显然是排序之后分两半。
12345678910111213141516171819void solve() { int n; cin >> n; vi a(n * 2); rep(i, n * 2) cin >> a[i]; sort(all(a)); vi x, y; rep(i, n) { x.pb(a[i]); } rep(i ...
cf1891
A.简单题。
12345678910111213141516int a[25];void solve() { int n; cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; } for (int i = 1; i < n; i++) { if ((i & -i) == i) continue; if (a[i] > a[i + 1]) { cout << "No\n"; return; } } cout << "Yes\n";}
B.考虑 $x$ 最后单调不增,模拟可以做到 $O(\log^2 + n)$。
123456789101112131415161718192021222324252627282930void solve() { int n, q; cin ...