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)
posted @ 2020-04-14 22:54  FST_stay_night  阅读(323)  评论(0编辑  收藏  举报