2016-E44-team1
从 Trac 迁移的文章
这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。
原文章内容如下:
{{{
#!html
<pre class="wiki" style="font: normal 13px Consolas">
┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ 2017/03/31 18:14-23:14 · Siunaus · Akalm/JTJL/sfiction │
├────────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│H [0:48]│ 1 OooO oOOOOoooooOOo.2! .oOoo# 3 │
│I [0:12]│ 1OOO# 2 │
│L [0:18]│ 1 2 oOOo.o..o.o3 o! ! . . # │
├────────┼════════════════════════────────────────────────════════════════════════────────────────────────════════════════════════┤
│F [0:16]│ oO1OOo# 3 │
├────────┼════════════════════════────────────────────────════════════════════════────────────────────────════════════════════════┤
│A [0:24]│ 1 oOOoooooo.o# 2 3 │
│B [0:10]│ 1 OOo#2 3 │
│D [0:03]│ 1o# │
├────────┼════════════════════════────────────────────────════════════════════════────────────────────────════════════════════════┤
│* [3:30]│ oOOOOOooOOOOoOOo...OooOOOoooooo.ooOOOOoooooOOo.o. .oOoo.oOOooOOOooo.oOooOOo.o..o.oo oOOOooO. oo.o o . oOOo..oooooO│
├────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│C3[0:00]│ 1 │
│E0[0:00]│ │
│G3[0:32]│ 1OOooOOOooo.oOo. │
│J5[0:00]│ 1 │
│K [0:47]│ 1 2 oOOooO. oo.o o . 3OOo..oooooO│
└────────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
</pre>
}}}
||#||When||Problem||Lang||Verdict||Time||Memory||
||463||4:15:42||1345||L||g++0x||OK||N/A||
||462||3:45:41||1001||L||g++0x||Wrong answer||12||
||461||3:40:36||1000||L||g++0x||Wrong answer||12||
||460||2:24:41||2392||H||g++0x||OK||N/A||
||459||2:06:08||2180||H||g++0x||Memory limit exceeded||1||
||458||1:28:12||1720||A||g++0x||OK||N/A||
||457||0:47:35||981||B||g++0x||OK||N/A||
||456||0:46:41||980||B||g++0x||Compilation error||N/A||
||455||0:37:24||1957||I||g++0x||OK||N/A||
||454||0:24:24||1229||F||g++0x||OK||N/A||
||453||0:09:29||499||D||g++0x||OK||N/A||
比赛链接: http://opentrains.snarknews.info/~ejudge/team.cgi?contest_id=006275
start at 18:15
== 流水账 ==
== 总结 ==
== 题解 ==
{{{
#!html
<script type="text/x-mathjax-config">MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}});</script>
<script type="text/javascript" async src="http://10.71.10.90/sfiction/tool/MathJax/MathJax-master/MathJax.js?config=TeX-MML-AM_CHTML"></script>
}}}
=== A. Album of Numbers [sfiction] ===
{{{
#!html
$ans=\sum{(a_i-a_{i-1})/\prod_{j=1}^{i-1}{(b_j+1)}}$,其中ai是从小到大排序的数字,bi是其出现次数。另外要除去空集。注意到分母增长很快,因此每次只需暴力计算前50项。O(nlogn+50q)。
}}}
比赛时的做法是用线段树维护结果,用对数形式保存分母,过大时当成inf。
=== B. Well Off [sfiction] ===
将每个未知量的正负视为点,对每种情况连边判环。O(n+m)。
=== C. Accurate Shots (8M ML!) [sfiction] ===
考虑折半搜索。由于空间限制,不能存下所有的数。可以枚举高位部分模为x的所有值,统计最少修改、数量和最小值。然后枚举低位部分模为m-x的所有值,求出相应量组合即可。O(n^0.5^),空间为O(1)。
本题折半的特殊之处在于两部分各自划分为数个集合,两侧集合一一对应。而且最优解的构成是分别从两个集合中取出最优解合并。限制很多。
=== G. Board Game ===
对颜色分治;计算两边颜色答案时,可以通过先将一边取负,然后求两边凸包的Minkowski和来找最大值。
=== H. Scouts [JTJL, Akalm] ===
写出n^3^的dp表达式后,可以发现在某个位置之后一定取左边(右边同理)。于是可以把结果算出来后拿数据结构维护区间最小值。
赛后仔细想想发现是可以用树状数组维护的……
=== I. Insects [Akalm] ===
最大权闭合子图。
=== J. Cave [Akalm] ===
不难想到用f[st][i]表示当前走过的集合为st,位于i,还需多久找到物品的期望,分两种(直接走、重新随机选点)情况转移。但第二种转移:
{{{
#!html
$E_st = t + \frac{1}{n}(\sum_{i \notin st}f[st | 1 << i][i] + \sum_{i \in st}f[st][i])$ <br>
是有环的。
记$f'[st][i]$为仅做第一种转移后的结果,显然有
$f[st][t] = min(f'[st][t], E_st)$ <br>
代入得
$E_st = t + \frac{1}{n}(\sum_{i \notin st}f[st | 1 << i][i] + \sum_{i \in st}min(f'[st][i], E_st)$ <br>
而$f'[st][i]$的计算不依赖于$E_st$,于是可以求出$f'[st][i]$,排序后枚举$E_st$所处的区间来破掉min()即可进行转移。
}}}
=== K. Blocks [JTJL, sfiction] ===
根据最小块的放置位置可以得到递推式f(n,p,l)=f(n-1,p,l)*(n-1)+f(n-1,p-1,l)+f(n-1,p,l-1)。暴力做O(npl)。
{{{
#!html
根据递推式可以直接得出固定n的生成函数$\prod_{i=0}^{n-1}{(x+y+i)}$,将$x+y$视为整体展开,可以$O(n(p+l))$计算确定x和y总次数的项的系数,然后再乘上$\binom{p-1}{p+l-2}$。对系数的直观的解释,可以考虑将两个相邻可见块中间的部分视为一段,例如21534视为[2,1],[5],[3,4],容易发现两侧段的交换是合法的。
}}}
=== L. Postman [Akalm] ===
试着写出确定顺序后的树dp表达式,就可以发现转移并不依赖于子树访问顺序,于是可以做换根树dp。
┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐│ 2017/03/31 18:14-23:14 · Siunaus · Akalm/JTJL/sfiction │├────────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤│H [0:48]│ 1 OooO oOOOOoooooOOo.2! .oOoo# 3 ││I [0:12]│ 1OOO# 2 ││L [0:18]│ 1 2 oOOo.o..o.o3 o! ! . . # │├────────┼════════════════════════────────────────────────════════════════════════────────────────────────════════════════════════┤│F [0:16]│ oO1OOo# 3 │├────────┼════════════════════════────────────────────────════════════════════════────────────────────────════════════════════════┤│A [0:24]│ 1 oOOoooooo.o# 2 3 ││B [0:10]│ 1 OOo#2 3 ││D [0:03]│ 1o# │├────────┼════════════════════════────────────────────────════════════════════════────────────────────────════════════════════════┤│* [3:30]│ oOOOOOooOOOOoOOo...OooOOOoooooo.ooOOOOoooooOOo.o. .oOoo.oOOooOOOooo.oOooOOo.o..o.oo oOOOooO. oo.o o . oOOo..oooooO│├────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤│C3[0:00]│ 1 ││E0[0:00]│ ││G3[0:32]│ 1OOooOOOooo.oOo. ││J5[0:00]│ 1 ││K [0:47]│ 1 2 oOOooO. oo.o o . 3OOo..oooooO│└────────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
| # | When | Problem | Lang | Verdict | Time | Memory |
| 463 | 4:15:42 | 1345 | L | g++0x | OK | N/A |
| 462 | 3:45:41 | 1001 | L | g++0x | Wrong answer | 12 |
| 461 | 3:40:36 | 1000 | L | g++0x | Wrong answer | 12 |
| 460 | 2:24:41 | 2392 | H | g++0x | OK | N/A |
| 459 | 2:06:08 | 2180 | H | g++0x | Memory limit exceeded | 1 |
| 458 | 1:28:12 | 1720 | A | g++0x | OK | N/A |
| 457 | 0:47:35 | 981 | B | g++0x | OK | N/A |
| 456 | 0:46:41 | 980 | B | g++0x | Compilation error | N/A |
| 455 | 0:37:24 | 1957 | I | g++0x | OK | N/A |
| 454 | 0:24:24 | 1229 | F | g++0x | OK | N/A |
| 453 | 0:09:29 | 499 | D | g++0x | OK | N/A |
比赛链接: http://opentrains.snarknews.info/~ejudge/team.cgi?contest_id=006275
start at 18:15
流水账
总结
题解
A. Album of Numbers [sfiction]
$ans=\sum{(a_i-a_{i-1})/\prod_{j=1}^{i-1}{(b_j+1)}}$,其中ai是从小到大排序的数字,bi是其出现次数。另外要除去空集。注意到分母增长很快,因此每次只需暴力计算前50项。O(nlogn+50q)。比赛时的做法是用线段树维护结果,用对数形式保存分母,过大时当成inf。
B. Well Off [sfiction]
将每个未知量的正负视为点,对每种情况连边判环。O(n+m)。
C. Accurate Shots (8M ML!) [sfiction]
考虑折半搜索。由于空间限制,不能存下所有的数。可以枚举高位部分模为x的所有值,统计最少修改、数量和最小值。然后枚举低位部分模为m-x的所有值,求出相应量组合即可。O(n0.5),空间为O(1)。
本题折半的特殊之处在于两部分各自划分为数个集合,两侧集合一一对应。而且最优解的构成是分别从两个集合中取出最优解合并。限制很多。
G. Board Game
对颜色分治;计算两边颜色答案时,可以通过先将一边取负,然后求两边凸包的Minkowski和来找最大值。
H. Scouts [JTJL, Akalm]
写出n3的dp表达式后,可以发现在某个位置之后一定取左边(右边同理)。于是可以把结果算出来后拿数据结构维护区间最小值。
赛后仔细想想发现是可以用树状数组维护的……
I. Insects [Akalm]
最大权闭合子图。
J. Cave [Akalm]
不难想到用f[st][i]表示当前走过的集合为st,位于i,还需多久找到物品的期望,分两种(直接走、重新随机选点)情况转移。但第二种转移:
$E_st = t + \frac{1}{n}(\sum_{i \notin st}f[st | 1 << i][i] + \sum_{i \in st}f[st][i])$是有环的。记$f'[st][i]$为仅做第一种转移后的结果,显然有$f[st][t] = min(f'[st][t], E_st)$
代入得$E_st = t + \frac{1}{n}(\sum_{i \notin st}f[st | 1 << i][i] + \sum_{i \in st}min(f'[st][i], E_st)$
而$f'[st][i]$的计算不依赖于$E_st$,于是可以求出$f'[st][i]$,排序后枚举$E_st$所处的区间来破掉min()即可进行转移。
K. Blocks [JTJL, sfiction]
根据最小块的放置位置可以得到递推式f(n,p,l)=f(n-1,p,l)*(n-1)+f(n-1,p-1,l)+f(n-1,p,l-1)。暴力做O(npl)。
根据递推式可以直接得出固定n的生成函数$\prod_{i=0}^{n-1}{(x+y+i)}$,将$x+y$视为整体展开,可以$O(n(p+l))$计算确定x和y总次数的项的系数,然后再乘上$\binom{p-1}{p+l-2}$。对系数的直观的解释,可以考虑将两个相邻可见块中间的部分视为一段,例如21534视为[2,1],[5],[3,4],容易发现两侧段的交换是合法的。L. Postman [Akalm]
试着写出确定顺序后的树dp表达式,就可以发现转移并不依赖于子树访问顺序,于是可以做换根树dp。