2017-Sp177-team2

从 Trac 迁移的文章

这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。

原文章内容如下:

 [[Image(1.png,500px)]]
== 流水账 ==
出门各自看题,感觉A是个用力单纯型,思考了一会儿sub发现这个东西可以转化成经典的x[i]+y[i]>=k的形式,然后再求Σ的最优解,然后就是经典KM操作了,cjb上机'''A1y63'''。之后yzc开始上机写C,sub推式子给cjb搞J,然后cjb tle了,改了改'''J2y133'''。yzc Cwa了,很自闭,cjb上机写L,'''L1y153''',之后yzc发现C的问题,重写了,然后不停自闭,终于'''C7y223'''。cjb和sub开出了G,sub和cjb先后上机'''G1y264'''。cjb和yzc讨论了I,sub加入讨论后很快会做了,'''I1y292'''。
== 总结 ==
=== chenjb ===
码量有点大,这个D到底怎么搞啊。。。
=== oipotato ===
=== subconscious  ===

== 题解 ==
 * A:式子可以变成每行的逐位差数组完全相同,然后推得一定存在x[i],y[i],ans[i][j]=x[i]+y[j],又有ans[i][j]>=a[i][j],且求Σans[i][j]最小,符合KM算法,直接把原图当成邻接矩阵跑一次,顶标即为所求的x[i],y[i]。

 * B:

 * C:用差分约束跑出每个点最多向下移动多远。

 * D:

 * E:

 * F:

 * G:显然行列无关,压成一维。从左往右每次取尽可能短的折叠,途中记录目前需要的最右端的位置,倒过来再做一次,可以发现用树状数组sort一下插入统计即可。

 * H:

 * I:f[cur][I][j]代表目前有cur条边,并且有i个联通块,并且联通块数值有j次改变的方案数,可以计算出当前状态合不合法,转移是枚举下一次吃掉多少人,可以轻易算出最多能吃多少人。

 * J:枚举每一条边,推式子后暴力求解。

 * K:

 * L:如果异或和为0则平局,否则考虑最高位是否为1,那么把原数列变成0101,如果n为偶数,则必然先手胜(黑白染色后选全黑或全白),然后如果a[1]和a[n]都是0,则后手必胜。之后双方必定互相模仿,模拟就知道谁赢了。
[[Image(L.png,500px)]]

流水账

出门各自看题,感觉A是个用力单纯型,思考了一会儿sub发现这个东西可以转化成经典的x[i]+y[i]>=k的形式,然后再求Σ的最优解,然后就是经典KM操作了,cjb上机A1y63。之后yzc开始上机写C,sub推式子给cjb搞J,然后cjb tle了,改了改J2y133。yzc Cwa了,很自闭,cjb上机写L,L1y153,之后yzc发现C的问题,重写了,然后不停自闭,终于C7y223。cjb和sub开出了G,sub和cjb先后上机G1y264。cjb和yzc讨论了I,sub加入讨论后很快会做了,I1y292

总结

chenjb

码量有点大,这个D到底怎么搞啊。。。

oipotato

subconscious

题解

  • A:式子可以变成每行的逐位差数组完全相同,然后推得一定存在x[i],y[i],ans[i][j]=x[i]+y[j],又有ans[i][j]>=a[i][j],且求Σans[i][j]最小,符合KM算法,直接把原图当成邻接矩阵跑一次,顶标即为所求的x[i],y[i]。
  • B:
  • C:用差分约束跑出每个点最多向下移动多远。
  • D:
  • E:
  • F:
  • G:显然行列无关,压成一维。从左往右每次取尽可能短的折叠,途中记录目前需要的最右端的位置,倒过来再做一次,可以发现用树状数组sort一下插入统计即可。
  • H:
  • I:f[cur][I][j]代表目前有cur条边,并且有i个联通块,并且联通块数值有j次改变的方案数,可以计算出当前状态合不合法,转移是枚举下一次吃掉多少人,可以轻易算出最多能吃多少人。
  • J:枚举每一条边,推式子后暴力求解。
  • K:
  • L:如果异或和为0则平局,否则考虑最高位是否为1,那么把原数列变成0101,如果n为偶数,则必然先手胜(黑白染色后选全黑或全白),然后如果a[1]和a[n]都是0,则后手必胜。之后双方必定互相模仿,模拟就知道谁赢了。

附加文件