2016-E18-team1

从 Trac 迁移的文章

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

原文章内容如下:

||Run ID||Time||Size||Problem||Language||Result||
||814||4:59:42||1848||A||g++0x||Wrong answer||6||
||813||4:59:29||1849||A||g++0x||Time-limit exceeded||6||
||812||4:59:16||1849||A||g++0x||Time-limit exceeded||6||
||811||4:58:35||1849||A||g++0x||Time-limit exceeded||6||
||810||4:57:43||1848||A||g++0x||Wrong answer||6||
||809||4:56:36||1848||A||g++0x||Wrong answer||6||
||808||4:54:18||1760||A||g++0x||Time-limit exceeded||6||
||807||4:53:45||1761||A||g++0x||Memory limit exceeded||6||
||806||4:53:27||1760||A||g++0x||Memory limit exceeded||6||
||805||4:52:58||1760||A||g++0x||Time-limit exceeded||6||
||804||4:52:00||1763||A||g++0x||Time-limit exceeded||6||
||803||4:50:46||1763||A||g++0x||Time-limit exceeded||6||
||802||4:49:45||1764||A||g++0x||Memory limit exceeded||6||
||801||4:48:30||1769||A||g++0x||Memory limit exceeded||6||
||800||4:47:06||1727||A||g++0x||Memory limit exceeded||6||
||799||4:46:31||1735||A||g++0x||Time-limit exceeded||5||
||798||4:40:26||1722||A||g++0x||Wrong answer||5||
||797||4:38:08||1717||A||g++0x||Wrong answer||5||
||796||4:19:08||1420||B||g++0x||OK||N/A||
||795||4:06:01||1418||B||g++0x||Wrong answer||4||
||794||3:02:13||2523||J||g++0x||OK||N/A||
||793||2:39:58||3528||G||g++0x||OK||N/A||
||792||2:33:19||1671||D||g++0x||OK||N/A||
||791||2:17:46||3310||G||g++0x||Wrong answer||33||
||790||2:05:40||3279||G||g++0x||Wrong answer||33||
||789||1:51:29||847||J||g++0x||Time-limit exceeded||6||
||788||1:40:40||2808||G||g++0x||Wrong answer||25||
||787||1:06:50||976||C||g++0x||OK||N/A||
||786||0:55:10||1588||I||g++0x||OK||N/A||
||785||0:32:39||1298||E||g++0x||OK||N/A||
||784||0:22:18||847||F||g++0x||OK||N/A||
||783||0:15:33||825||F||g++0x||Wrong answer||5||
||782||0:11:51||817||F||g++0x||Wrong answer||5||

Start at 18:20

比赛链接: http://opentrains.snarknews.info/~ejudge/team.cgi?contest_id=006280

== 流水账 ==

== 总结 ==

=== sfiction ===

前期除了 F 之外还算顺利。中期 G 题因为各种细节卡了一个小时,J 则是因为读错题浪费了十分钟,并多等了一个小时。后期题目里,B 过得有点迷……K 题正确题意不难,基本上想到树分治就能做了,可能还是因为过的人少,没有细想。A 最后还差第二部分的 DP 不会处理……H 则是基本没什么想法。

=== JTJL ===

实名反对楼上,前期的F过得挺不顺利的…… ~~B也很科学的嘛~~,树分治的锅修好了真是太好了!

== 题解 ==

=== A. Fancy Antiques [Akalm] ===

把店看作点,商品看成边,抠掉sz有下限的带权最大团即可。

=== B. Alternative Bracket Notation [JTJL] ===

迭代。

=== C. Greetings! [sfiction] ===

暴力状压DP。

=== D. Programming Team [Akalm] ===

二分答案,设c[u] = a[u] - ans*b[u],树dp找权值和最大子树。

=== E. K-Inversions [sfiction] ===

暴力NTT。

=== F. Mountain Scenes [JTJL] ===

DP。注意 n/w 和 h 的大小关系。

=== G. Symmetry [JTJL] ===

分类讨论,注意对称轴可能不是任意两点的中垂线。

=== H. Jewel Thief [Akalm] ===

按同种质量合并后dp,可以用单调队列优化。

sfiction: 首先合并同代价物品,显然同代价应该先取高收益,之后暴力DP可以得到O(K^2^logS)的做法。只考虑一个阶段,且假设s=1,设状态f[i]为大小为i的背包的最大收益,而不是恰好为i所得最大收益。转移函数f[i]=max(f[i-j]+sum(a[1..j]))。设g[j]=sum(a[1..j]),容易发现g是单调递增的凸函数。这类问题有一种通用的优化方法,可以将复杂度从O(n^2^)优化到O(nlogn)。考虑用一个单调队列来维护并选取最优决策,则对于队列中的两个决策点i<j,应该有f[i]<f[j],否则因为g的单调性,i永远比j更优。队列中i当前比j更优,但随着当前状态k的增大,因为g的凸性,两个决策的差值会逐渐减小直到大小关系反转,此时就应该将i移出队列。注意到给定两个决策点,我们是可以通过二分计算出令他们大小关系反转的时间点k的。假如队列中存在三个决策点l1<l2<l3,(l1,l2)的反转时间要晚于(l2,l3),则在l1被移出前,l2会先被移出,因此l2并不会被用来更新答案,于是也不需要加入队列。因此这个单调队列的单调性体现在f[i]关于i单调递增,相邻决策点的反转时间点关于i单调递增。队首保证反转时间点大于等于当前位置。

=== I. Tourists [Akalm] ===

暴力枚举两点计算距离即可。

=== J. Whiteboard [sfiction] ===

未经过的点必须为0。中断时间要晚于所有1的最后一次经过,并早于所有0的最后一次经过。因此只需处理出所有位置的最后一次经过时间。分四个方向离线处理,每行/列用一个优先队列维护当前事件最大值即可。

=== K. YATP [JTJL & sfiction] ===

单侧路径可以用(a_u,s(u,w))来表示,固定w,路径可以表示为a_u*a_v+s(u,w)+s(v,w),是斜率优化的形式。路径处理用树分治即可。

== 补题 ==

~~A~~ ~~H~~ ~~K~~

=== JTJL ===

 * Unaccepted: K
Run IDTimeSizeProblemLanguageResult
8144:59:421848Ag++0xWrong answer6
8134:59:291849Ag++0xTime-limit exceeded6
8124:59:161849Ag++0xTime-limit exceeded6
8114:58:351849Ag++0xTime-limit exceeded6
8104:57:431848Ag++0xWrong answer6
8094:56:361848Ag++0xWrong answer6
8084:54:181760Ag++0xTime-limit exceeded6
8074:53:451761Ag++0xMemory limit exceeded6
8064:53:271760Ag++0xMemory limit exceeded6
8054:52:581760Ag++0xTime-limit exceeded6
8044:52:001763Ag++0xTime-limit exceeded6
8034:50:461763Ag++0xTime-limit exceeded6
8024:49:451764Ag++0xMemory limit exceeded6
8014:48:301769Ag++0xMemory limit exceeded6
8004:47:061727Ag++0xMemory limit exceeded6
7994:46:311735Ag++0xTime-limit exceeded5
7984:40:261722Ag++0xWrong answer5
7974:38:081717Ag++0xWrong answer5
7964:19:081420Bg++0xOKN/A
7954:06:011418Bg++0xWrong answer4
7943:02:132523Jg++0xOKN/A
7932:39:583528Gg++0xOKN/A
7922:33:191671Dg++0xOKN/A
7912:17:463310Gg++0xWrong answer33
7902:05:403279Gg++0xWrong answer33
7891:51:29847Jg++0xTime-limit exceeded6
7881:40:402808Gg++0xWrong answer25
7871:06:50976Cg++0xOKN/A
7860:55:101588Ig++0xOKN/A
7850:32:391298Eg++0xOKN/A
7840:22:18847Fg++0xOKN/A
7830:15:33825Fg++0xWrong answer5
7820:11:51817Fg++0xWrong answer5

Start at 18:20

比赛链接: http://opentrains.snarknews.info/~ejudge/team.cgi?contest_id=006280

流水账

总结

sfiction

前期除了 F 之外还算顺利。中期 G 题因为各种细节卡了一个小时,J 则是因为读错题浪费了十分钟,并多等了一个小时。后期题目里,B 过得有点迷……K 题正确题意不难,基本上想到树分治就能做了,可能还是因为过的人少,没有细想。A 最后还差第二部分的 DP 不会处理……H 则是基本没什么想法。

JTJL

实名反对楼上,前期的F过得挺不顺利的…… B也很科学的嘛,树分治的锅修好了真是太好了!

题解

A. Fancy Antiques [Akalm]

把店看作点,商品看成边,抠掉sz有下限的带权最大团即可。

B. Alternative Bracket Notation [JTJL]

迭代。

C. Greetings! [sfiction]

暴力状压DP。

D. Programming Team [Akalm]

二分答案,设c[u] = a[u] - ans*b[u],树dp找权值和最大子树。

E. K-Inversions [sfiction]

暴力NTT。

F. Mountain Scenes [JTJL]

DP。注意 n/w 和 h 的大小关系。

G. Symmetry [JTJL]

分类讨论,注意对称轴可能不是任意两点的中垂线。

H. Jewel Thief [Akalm]

按同种质量合并后dp,可以用单调队列优化。

sfiction: 首先合并同代价物品,显然同代价应该先取高收益,之后暴力DP可以得到O(K2logS)的做法。只考虑一个阶段,且假设s=1,设状态f[i]为大小为i的背包的最大收益,而不是恰好为i所得最大收益。转移函数f[i]=max(f[i-j]+sum(a[1..j]))。设g[j]=sum(a[1..j]),容易发现g是单调递增的凸函数。这类问题有一种通用的优化方法,可以将复杂度从O(n2)优化到O(nlogn)。考虑用一个单调队列来维护并选取最优决策,则对于队列中的两个决策点i

I. Tourists [Akalm]

暴力枚举两点计算距离即可。

J. Whiteboard [sfiction]

未经过的点必须为0。中断时间要晚于所有1的最后一次经过,并早于所有0的最后一次经过。因此只需处理出所有位置的最后一次经过时间。分四个方向离线处理,每行/列用一个优先队列维护当前事件最大值即可。

K. YATP [JTJL & sfiction]

单侧路径可以用(a_u,s(u,w))来表示,固定w,路径可以表示为a_u*a_v+s(u,w)+s(v,w),是斜率优化的形式。路径处理用树分治即可。

补题

A H K

JTJL

  • Unaccepted: K