2016-C03-team2

从 Trac 迁移的文章

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

原文章内容如下:

||User||Problem||Result||Memory||Time||Length||Submit Time||
||TaZoF||C||CE|| || ||1742||2016-08-03 14:09:06||
||TaZoF||C||MLE|| || ||1772||2016-08-03 14:07:45||
||TaZoF||C||RE|| || ||1771||2016-08-03 14:07:12||
||TaZoF||C||TLE|| || ||1278||2016-08-03 14:02:29||
||TaZoF||F||AC||0||15||984||2016-08-03 13:48:34||
||TaZoF||C||TLE|| || ||901||2016-08-03 13:47:12||
||TaZoF||H||AC||11552||156||2245||2016-08-03 13:28:37||
||TaZoF||H||WA|| || ||2151||2016-08-03 13:13:32||
||TaZoF||D||AC||4||15||1203||2016-08-03 12:00:36||
||TaZoF||A||AC||4||15||1275||2016-08-03 11:51:16||
||TaZoF||A||WA|| || ||1154||2016-08-03 11:47:43||
||TaZoF||F||WA|| || ||992||2016-08-03 11:40:58||
||TaZoF||F||WA|| || ||480||2016-08-03 11:23:43||
||TaZoF||A||WA|| || ||1062||2016-08-03 11:12:45||
||TaZoF||A||WA|| || ||1062||2016-08-03 11:09:00||
||TaZoF||D||WA|| || ||1040||2016-08-03 10:46:57||
||TaZoF||D||WA|| || ||1040||2016-08-03 10:45:15||
||TaZoF||D||WA|| || ||1125||2016-08-03 10:39:54||
||TaZoF||D||WA|| || ||1117||2016-08-03 10:34:41||
||TaZoF||D||WA|| || ||1061||2016-08-03 10:29:09||
||TaZoF||D||WA|| || ||915||2016-08-03 10:17:58||
||TaZoF||D||WA|| || ||791||2016-08-03 10:09:00||
||TaZoF||I||AC||0||202||307||2016-08-03 09:42:34||

== 流水账 ==
=== TsReaper ===
今天题目难度比较大,没有简单题。我们队并没有练习过难度比较高的比赛,可能因此比赛节奏并不是很好。

练习开始后根据现场回放我们开始想I题,一段时间后我想到了一个二进制的做法,'''I1y32'''。hzf学长也想到了D的做法,但调了几次都没有答对。我们看到题目中提到了“自然数”,但并不知道欧洲人的自然数是从0开始还是从1开始(练习结束后发现D题的自然数和G题的自然数不一样~~感觉欧洲人有毒~~)。我们商量了一下觉得可能是从1开始的,但是hzf学长改了改还是没有答对。学长决定再考虑一下,我就上机写模拟题A,然而也没有答对。同时卡两题比较郁闷,我debug的时候hzf学长猜了F的结论,但是还没有答对,我们队的罚时就比较爆炸。debug一段时间后我觉得自己的A并没有写错,可能是题目里有特殊数据,不能用随机化的方式判断,要构造几个特殊情况。两种方法一起判断后'''A4y161'''(练习结束后据说其他队的学长一把就答对了,感觉自己脸太黑...)。之后又帮hzf学长debug F,发现学长的程序不能通过极限数据,INF开小了。修改后'''D8y170'''。

Starve学长根据现场回放觉得H应该很可做,上机写了一段时间,并用一些特殊数据调了一下'''H2y258'''。剩下的题目应该只有F可做了,因为我们没有带数学手册,就向fengsuiyan学长借了一本,结果fengsuiyan学长正好翻到结论那一页- -确认了猜测的结论正确后,hzf学长发现可能是因为没开long long,改了改'''F3y278'''。最后一点时间Starve学长乱搞C。

=== 3z ===
学长说的好!

== 总结 ==
=== TsReaper ===
 * 比较困难的比赛我们队可能不是很有节奏。
 * 记得开long long,INF要开大。

=== 3z ===
 * 前期节奏太差,三开了一段时间,虽然最后都做出了,但是这样太冒险了
 * 思路不清晰,或者样例没手算的情况下不要写代码,很容易崩掉
 * 对于一些思考的技巧还是没有把握好,比如B题,发现修改次数多的话,就应该往适当增加查询的复杂度来降低修改的复杂度方向想,当时却只想了常数优化。。

=== hzf ===
 * 注意开long long...
 * 要正确估计极限数据的范围 
 * 交题不能太莽了...

== 题解 ==
=== B - Tree of Almost Clean Money ===
因为修改的次数太多了,用普通的DFS序+树状数组的套路会TLE.

我们可以用分块让复杂度更偏袒修改。同样记录树的DFS序,进入新节点和从节点出来都要记。设bgn[x]表示新进入第x个节点的DFS序,end[x]表示从第x个节点出来的DFS序。如果给x的权值加上v,可以把bgn[x]位置加上v,再把end[x]位置扣去v。容易发现,bgn[x]的前缀和就是从根到x的权值之和。这样我们分块维护,O(1)修改,O(sqrt(n))查询即可。

=== E - Taxies ===
因为C(15,1)+C(15,2)+C(15,3)+C(15,4)约为2000不会太大,我们完全可以先用spfa求出公司和15个人的家两两间的最短距离,再枚举每一种坐车情况和下车顺序,用一个2^15^的状压dp(表示当前已经把哪些人送回家,枚举下一辆车的坐车情况进行转移)就能解决了。

其实程序并不会很难写,如果今天节奏比较好的话,这题应该还能再答对。

=== I - Olympic Parade ===
因为空间限制太小,不能一次性读入所有数然后排序(其实可以刚好卡过,但是题目本意应该不是这样)。

考虑把所有数弄成二进制,如果所有数二进制第i位1的个数不能被K整除,说明答案的二进制第i位是1.

== 补题 ==
=== TsReaper ===
~~B~~, C, ~~E~~
UserProblemResultMemoryTimeLengthSubmit Time
TaZoFCCE 17422016-08-03 14:09:06
TaZoFCMLE 17722016-08-03 14:07:45
TaZoFCRE 17712016-08-03 14:07:12
TaZoFCTLE 12782016-08-03 14:02:29
TaZoFFAC0159842016-08-03 13:48:34
TaZoFCTLE 9012016-08-03 13:47:12
TaZoFHAC1155215622452016-08-03 13:28:37
TaZoFHWA 21512016-08-03 13:13:32
TaZoFDAC41512032016-08-03 12:00:36
TaZoFAAC41512752016-08-03 11:51:16
TaZoFAWA 11542016-08-03 11:47:43
TaZoFFWA 9922016-08-03 11:40:58
TaZoFFWA 4802016-08-03 11:23:43
TaZoFAWA 10622016-08-03 11:12:45
TaZoFAWA 10622016-08-03 11:09:00
TaZoFDWA 10402016-08-03 10:46:57
TaZoFDWA 10402016-08-03 10:45:15
TaZoFDWA 11252016-08-03 10:39:54
TaZoFDWA 11172016-08-03 10:34:41
TaZoFDWA 10612016-08-03 10:29:09
TaZoFDWA 9152016-08-03 10:17:58
TaZoFDWA 7912016-08-03 10:09:00
TaZoFIAC02023072016-08-03 09:42:34

流水账

TsReaper

今天题目难度比较大,没有简单题。我们队并没有练习过难度比较高的比赛,可能因此比赛节奏并不是很好。

练习开始后根据现场回放我们开始想I题,一段时间后我想到了一个二进制的做法,I1y32。hzf学长也想到了D的做法,但调了几次都没有答对。我们看到题目中提到了“自然数”,但并不知道欧洲人的自然数是从0开始还是从1开始(练习结束后发现D题的自然数和G题的自然数不一样感觉欧洲人有毒)。我们商量了一下觉得可能是从1开始的,但是hzf学长改了改还是没有答对。学长决定再考虑一下,我就上机写模拟题A,然而也没有答对。同时卡两题比较郁闷,我debug的时候hzf学长猜了F的结论,但是还没有答对,我们队的罚时就比较爆炸。debug一段时间后我觉得自己的A并没有写错,可能是题目里有特殊数据,不能用随机化的方式判断,要构造几个特殊情况。两种方法一起判断后A4y161(练习结束后据说其他队的学长一把就答对了,感觉自己脸太黑...)。之后又帮hzf学长debug F,发现学长的程序不能通过极限数据,INF开小了。修改后D8y170

Starve学长根据现场回放觉得H应该很可做,上机写了一段时间,并用一些特殊数据调了一下H2y258。剩下的题目应该只有F可做了,因为我们没有带数学手册,就向fengsuiyan学长借了一本,结果fengsuiyan学长正好翻到结论那一页- -确认了猜测的结论正确后,hzf学长发现可能是因为没开long long,改了改F3y278。最后一点时间Starve学长乱搞C。

3z

学长说的好!

总结

TsReaper

  • 比较困难的比赛我们队可能不是很有节奏。
  • 记得开long long,INF要开大。

3z

  • 前期节奏太差,三开了一段时间,虽然最后都做出了,但是这样太冒险了
  • 思路不清晰,或者样例没手算的情况下不要写代码,很容易崩掉
  • 对于一些思考的技巧还是没有把握好,比如B题,发现修改次数多的话,就应该往适当增加查询的复杂度来降低修改的复杂度方向想,当时却只想了常数优化。。

hzf

  • 注意开long long...
  • 要正确估计极限数据的范围
  • 交题不能太莽了...

题解

B - Tree of Almost Clean Money

因为修改的次数太多了,用普通的DFS序+树状数组的套路会TLE.

我们可以用分块让复杂度更偏袒修改。同样记录树的DFS序,进入新节点和从节点出来都要记。设bgn[x]表示新进入第x个节点的DFS序,end[x]表示从第x个节点出来的DFS序。如果给x的权值加上v,可以把bgn[x]位置加上v,再把end[x]位置扣去v。容易发现,bgn[x]的前缀和就是从根到x的权值之和。这样我们分块维护,O(1)修改,O(sqrt(n))查询即可。

E - Taxies

因为C(15,1)+C(15,2)+C(15,3)+C(15,4)约为2000不会太大,我们完全可以先用spfa求出公司和15个人的家两两间的最短距离,再枚举每一种坐车情况和下车顺序,用一个215的状压dp(表示当前已经把哪些人送回家,枚举下一辆车的坐车情况进行转移)就能解决了。

其实程序并不会很难写,如果今天节奏比较好的话,这题应该还能再答对。

I - Olympic Parade

因为空间限制太小,不能一次性读入所有数然后排序(其实可以刚好卡过,但是题目本意应该不是这样)。

考虑把所有数弄成二进制,如果所有数二进制第i位1的个数不能被K整除,说明答案的二进制第i位是1.

补题

TsReaper

B, C, E

附加文件