XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Romania
A. Balance
- 相当于x[i]+y[j]>=a[i][j], 最大化\(\sum x[i]+y[i]\)
- 以为是bm,其实不是
- 上单纯形
B. Entanglement
C. Gravity
D. Infinite Pattern Matching
- 分类讨论
E. Inheritance
F. Movies
G. Origami
H. Qnp
I. Salaj
upsolved
- 考虑 dp 维护图的形状。NG
- 考虑一个序列是不是合法的,手玩一会儿发现 \(f_i=f_{i-1}\) 可以获得一枚金币,\(f_i<f_{i-1}\) 需要支付 \(f_{i-1}-f_i\) 枚金币。
- \(dp[i][j][k]\) 前 \(i\) 个位置,剩下 \(j\) 枚金币的方案数,花掉了 \(k\) 个的方案数,空间就 \(O(n^5)\) 了,糟糕!
- 发现第二维不用开这么大,因为最多用 \(n-1\) 枚金币,所以 \(dp[i][n][k]\) 可以表示 \(\sum_{j=n}^{+} dp[i][j][k]\)
- 有些状态是不合法的,如果加入 \(i\) 条边后,SCC 至多为 lim,那么 \(f[i][][<(m-lim)]\) 的状态是不合法的。
- 仔细思考一下 dp 优化,类似于多重背包的转移,可以 \(O(n^4)\) 解决问题。
- 卡常,不要用 LL,用 int。
J. Taxi
- 先考虑放好了 2m 个点后怎么求。
- 两条路径不交一定不是最优。
- 一条边左边有 \(x\) 个人,\(y\) 辆车,右边有 \(x'\) 个人,\(y'\) 辆车,那么这条边的贡献为 \(min(x,y')+min(x',y)\)
- 考虑每条边的贡献,先求一求子树内放 \(?\) 只卜,子树外放 \(m-?\) 只卜的方案数,讨论一下 \(x,y'\) 谁更小,前缀和优化。
K. Tris
L. Xormites
- xorsum = 0,谁也 win 不了,因为得分肯定一样,判掉。
- 观察到 \(n\) 为偶数,先手一定 win,因为先手可以拿走所有奇数位置的元素,也可以拿走所有偶数位置的元素,判掉。【排骨龙】
- 盯着 xorsum 看,我们发现影响胜负的是最高位的 1!
- nice!变成 01 序列了
- 先手第一步必须拿 1,不然就【排骨龙】了
- 先手操作完第一步后,后手拿什么,先手就得跟什么,不然就【排骨龙】了
- 如果 1 的个数模 4 等于 3,先手就完蛋了,因为能跟上到最后也会完蛋。
- 问题转化成给一个长度为偶数的 01 序列,两人轮流操作,问后手能不能每轮都拿和先手一样的数字。
- 打表找规律?不会证明啊!
- 若
a[l]!=a[r]
,当且仅当每段都是偶数。 - 否则
solve(l,r) = solve(l+1,r-1)
- 若