2016-E01-team2
从 Trac 迁移的文章
这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。
原文章内容如下:
||User||Problem||Result||Memory||Time||Language||Length||Submit Time||
||TaZoF||E||WA|| || ||G++||2631||2016-07-28 16:39:28||
||TaZoF||J||AC||0||273||GCC||2145||2016-07-28 15:40:37||
||TaZoF||E||WA|| || ||G++||2613||2016-07-28 15:35:04||
||TaZoF||C||AC||0||3||GCC||1698||2016-07-28 13:56:36||
||TaZoF||G||AC||0||26||G++||1584||2016-07-28 13:28:37||
||TaZoF||C||WA|| || ||GCC||1688||2016-07-28 13:26:10||
||TaZoF||G||WA|| || ||G++||1377||2016-07-28 13:06:51||
||TaZoF||D||AC||0||122||GCC||724||2016-07-28 12:50:38||
||TaZoF||F||AC||0||3||G++||803||2016-07-28 12:39:20||
||TaZoF||F||WA|| || ||G++||696||2016-07-28 12:30:05||
||TaZoF||B||AC||0||3||GCC||824||2016-07-28 12:14:01||
||TaZoF||B||WA|| || ||GCC||821||2016-07-28 12:12:12||
||TaZoF||A||AC||0||0||GCC||139||2016-07-28 12:03:35||
比赛链接: http://acm.hust.edu.cn/vjudge/contest/124554
== 流水账 ==
=== TsReaper ===
练习前20分钟我们讨论了一波队名,在经过了Happy Coding Friends,Codimon Go以及随机生成队名之后,还是决定把三个人的id各选一个字母组成队名。后来发现念不出来,就往中间插了两个元音...
开始后我从A开始看,Starve学长从E开始看,hzf学长从K开始看。A题是个签到题,'''A1y3''',好久没见过这么签到的签到题...B题也是个签到题,然而手滑把>=写成>,'''B2y12'''。Starve学长发现了模拟题F题,但是似乎并不难写,交流了一遍题意之后就让Starve学长上机了。而hzf学长的三个题貌似都不是简单题,暂时还不太有明确的思路。
Starve学长写题的时候我发现模拟题C题和签到题D题也都很简单(感觉这一场的签到题都在我这边- -),就和hzf学长交流起了其它题的题意。I题是一个几何题,我不太擅长,决定先放在一边。J题有一个奇怪(其实并不奇怪)的式子,一下子也没有什么思路,也暂时搁置。H题虽然看似简单,但是细节很多,也暂时放弃。此时Starve学长写好了F题然而并没有答对,我就上机开始写D题。写了一小段时间之后Starve学长发现了程序中的错误,改了改'''F2y39'''。不久我的D题也写好了,'''D1y50'''。
此时两位学长发现了G题是一个相对简单的二分,Starve学长再次上机。我和hzf学长开始讨论E题和I题。E题貌似是dp或者贪心,但是这样的dp之前没有见过,状态转移方程也推不出来,学长决定贪心一下试试看。I题我们想到了朴素的O(n^2^)做法,然而n <= 10000。Starve学长的G题并没有答对,我就开始写C,学长们debug G。C题交上去以后也没有答对,幸好学长们发现了G题的错误,'''G2y88'''。我看了几遍C题的代码并没有发现错误,请Starve学长帮忙debug,发现漏了一个条件判断,改了改'''C2y116'''。
虽然前期犯了一些不该犯的错误,不过罚时也还好。练习开始两个小时左右我们就进入了中档题阶段。因为现场赛的回放记录中有队伍过了E题,我们决定先做一下E,然而过了很久也没有很大的进展。hzf学长想了一个贪心的做法,虽然听起来有点怪,但是也找不到反例,就让学长上机试一下。回放中又有队伍过了I题,我就和Starve学长开始想I题。学长希望通过半平面交、凸包、分治等方法希望把复杂度降低到O(n(logn)^2^),但是我们并不会写...
练习进行了三个小时后我们决定讨论一下J题,发现J题其实是很简单的二分+最大流,感觉一开始跳错了坑...hzf学长写好了E题但是样例过不了,我就上机开始写J题。然而不知道为什么,感觉写题的时候有点疲惫,还不小心把模板抄错了,表现得非常急躁,影响了队伍的士气。中间休息了一下,让hzf学长继续调E题,可惜没有通过。最后发现了J的错误,'''J1y220'''。
之后hzf学长继续调E题,我们就在E题和I题间摇摆不定。最后一个小时Starve学长决定上机尝试一下I,但是程序过于复杂还是放弃。最后半小时我们决定乱搞一下,让hzf学长正着贪心一遍,倒着贪心一遍,不过仍然没有通过。结束时中档题仍然只答对了一题。
赛后阅读sf学长队伍去年的练习小结,发现I题暴力可过,~~有一种想要殴打学长们的冲动~~
=== 3z ===
Tsr学长说了这么多。。
=== hzf ===
Tsr学长都说完啦
== 总结 ==
=== TsReaper ===
* 签到题少犯错,不然太亏...
* 心态要平稳。感觉自己太情绪化,而且容易有负面情绪,很容易影响队伍士气。
* 离15分钟一道简单题,中档题尽量全部做完的目标还是太遥远了...多练习吧...
* 简单题和中档题之间的“沟”太大,不知道该怎么办...
=== 3z ===
* 代码有问题的时候还是尽量和队友一起debug,一个人debug可能在坑里转不出来。。
* 手速还是太慢,羡慕Tsr的手速
* 心态要平和(其实我觉得这场比的还不错啊~
* 要相信评测机的速度啊,最后没有事情干的时候要敢于写暴力!
=== hzf ===
* 读题要认真,题意转述错了坑了队友。。
* 想题的时候多听队友的意见,否则经常掉进坑里出不来
== 题解 ==
sf学长说很多比赛不提供题解...还是写一下题解,希望以后做这套比赛的学长能用到...?
ABCDFG是简单题,略过...
=== E ===
很容易得到一个贪心的结论:信号塔一定会建在某间房子右端点+R处。
如果我们能考虑哪些点放复合信号塔,剩下的没有被覆盖的房子用1类/2类信号塔覆盖,就能得到答案。
先把房子按右端点排序。设g[i][j]表示只用1类/2类信号塔满足第i~第j座房子的需求,且第i-1座房子右端点+R处有一座复合信号塔的最小花费。设f[i]表示满足前i座房子的需求的最小花费,我们就可以枚举最后一座符合信号塔放在哪里,也就是f[i] = min(f[j-1] + g[j+1][i] + C3)。答案就是f[n].
=== H ===
如果直接对每一段路线求交了多少保护金,在正方形的角上很容易多算或者漏算,总之会有各种细节问题。
所以我们整体考虑问题,求出每一个正方形与路线相交的区间,区间的端点表示的是从整条路径的起点出发走过的距离。这样就变成了一个比较容易的问题:如何用最少的区间覆盖一个区间并。而且不会出现正方形的角上各种细节,非常科学。
=== I ===
感觉正解不是O(n^2^)的,然而更优复杂度的做法并不会...
对于一段路线l,如果之后的路线出现在了以l两端为垂心分别作垂线的长条形范围内,就不符合要求。这样我们暴力检查之后路线是否经过这个区域即可。这个判断条件还可以更加简化成一个半平面。
=== J ===
二分答案,这样我们就得到了在当前的答案下,每个人最多可以付多少次车钱。
设第i个人可以付Pi次车钱,他在第Di1, Di2, ... Dik天有坐车,那么就从源点向第i个人连容量为Pi的边,从第i个人向第Di1, Di2, ... Dik天分别连容量为1的边,然后每天向汇点分别连容量为1的边。做一遍最大流,看看最大流是否等于总天数即可。
== 补题 ==
=== TsReaper ===
~~E~~, ~~H~~, ~~I~~, K
=== 3z ===
E, I
=== hzf ===
E, I
| User | Problem | Result | Memory | Time | Language | Length | Submit Time |
| TaZoF | E | WA | G++ | 2631 | 2016-07-28 16:39:28 | ||
| TaZoF | J | AC | 0 | 273 | GCC | 2145 | 2016-07-28 15:40:37 |
| TaZoF | E | WA | G++ | 2613 | 2016-07-28 15:35:04 | ||
| TaZoF | C | AC | 0 | 3 | GCC | 1698 | 2016-07-28 13:56:36 |
| TaZoF | G | AC | 0 | 26 | G++ | 1584 | 2016-07-28 13:28:37 |
| TaZoF | C | WA | GCC | 1688 | 2016-07-28 13:26:10 | ||
| TaZoF | G | WA | G++ | 1377 | 2016-07-28 13:06:51 | ||
| TaZoF | D | AC | 0 | 122 | GCC | 724 | 2016-07-28 12:50:38 |
| TaZoF | F | AC | 0 | 3 | G++ | 803 | 2016-07-28 12:39:20 |
| TaZoF | F | WA | G++ | 696 | 2016-07-28 12:30:05 | ||
| TaZoF | B | AC | 0 | 3 | GCC | 824 | 2016-07-28 12:14:01 |
| TaZoF | B | WA | GCC | 821 | 2016-07-28 12:12:12 | ||
| TaZoF | A | AC | 0 | 0 | GCC | 139 | 2016-07-28 12:03:35 |
比赛链接: http://acm.hust.edu.cn/vjudge/contest/124554
流水账
TsReaper
练习前20分钟我们讨论了一波队名,在经过了Happy Coding Friends,Codimon Go以及随机生成队名之后,还是决定把三个人的id各选一个字母组成队名。后来发现念不出来,就往中间插了两个元音...
开始后我从A开始看,Starve学长从E开始看,hzf学长从K开始看。A题是个签到题,A1y3,好久没见过这么签到的签到题...B题也是个签到题,然而手滑把>=写成>,B2y12。Starve学长发现了模拟题F题,但是似乎并不难写,交流了一遍题意之后就让Starve学长上机了。而hzf学长的三个题貌似都不是简单题,暂时还不太有明确的思路。
Starve学长写题的时候我发现模拟题C题和签到题D题也都很简单(感觉这一场的签到题都在我这边- -),就和hzf学长交流起了其它题的题意。I题是一个几何题,我不太擅长,决定先放在一边。J题有一个奇怪(其实并不奇怪)的式子,一下子也没有什么思路,也暂时搁置。H题虽然看似简单,但是细节很多,也暂时放弃。此时Starve学长写好了F题然而并没有答对,我就上机开始写D题。写了一小段时间之后Starve学长发现了程序中的错误,改了改F2y39。不久我的D题也写好了,D1y50。
此时两位学长发现了G题是一个相对简单的二分,Starve学长再次上机。我和hzf学长开始讨论E题和I题。E题貌似是dp或者贪心,但是这样的dp之前没有见过,状态转移方程也推不出来,学长决定贪心一下试试看。I题我们想到了朴素的O(n2)做法,然而n <= 10000。Starve学长的G题并没有答对,我就开始写C,学长们debug G。C题交上去以后也没有答对,幸好学长们发现了G题的错误,G2y88。我看了几遍C题的代码并没有发现错误,请Starve学长帮忙debug,发现漏了一个条件判断,改了改C2y116。
虽然前期犯了一些不该犯的错误,不过罚时也还好。练习开始两个小时左右我们就进入了中档题阶段。因为现场赛的回放记录中有队伍过了E题,我们决定先做一下E,然而过了很久也没有很大的进展。hzf学长想了一个贪心的做法,虽然听起来有点怪,但是也找不到反例,就让学长上机试一下。回放中又有队伍过了I题,我就和Starve学长开始想I题。学长希望通过半平面交、凸包、分治等方法希望把复杂度降低到O(n(logn)2),但是我们并不会写...
练习进行了三个小时后我们决定讨论一下J题,发现J题其实是很简单的二分+最大流,感觉一开始跳错了坑...hzf学长写好了E题但是样例过不了,我就上机开始写J题。然而不知道为什么,感觉写题的时候有点疲惫,还不小心把模板抄错了,表现得非常急躁,影响了队伍的士气。中间休息了一下,让hzf学长继续调E题,可惜没有通过。最后发现了J的错误,J1y220。
之后hzf学长继续调E题,我们就在E题和I题间摇摆不定。最后一个小时Starve学长决定上机尝试一下I,但是程序过于复杂还是放弃。最后半小时我们决定乱搞一下,让hzf学长正着贪心一遍,倒着贪心一遍,不过仍然没有通过。结束时中档题仍然只答对了一题。
赛后阅读sf学长队伍去年的练习小结,发现I题暴力可过,有一种想要殴打学长们的冲动
3z
Tsr学长说了这么多。。
hzf
Tsr学长都说完啦
总结
TsReaper
- 签到题少犯错,不然太亏...
- 心态要平稳。感觉自己太情绪化,而且容易有负面情绪,很容易影响队伍士气。
- 离15分钟一道简单题,中档题尽量全部做完的目标还是太遥远了...多练习吧...
- 简单题和中档题之间的“沟”太大,不知道该怎么办...
3z
- 代码有问题的时候还是尽量和队友一起debug,一个人debug可能在坑里转不出来。。
- 手速还是太慢,羡慕Tsr的手速
- 心态要平和(其实我觉得这场比的还不错啊~
- 要相信评测机的速度啊,最后没有事情干的时候要敢于写暴力!
hzf
- 读题要认真,题意转述错了坑了队友。。
- 想题的时候多听队友的意见,否则经常掉进坑里出不来
题解
sf学长说很多比赛不提供题解...还是写一下题解,希望以后做这套比赛的学长能用到...?
ABCDFG是简单题,略过...
E
很容易得到一个贪心的结论:信号塔一定会建在某间房子右端点+R处。
如果我们能考虑哪些点放复合信号塔,剩下的没有被覆盖的房子用1类/2类信号塔覆盖,就能得到答案。
先把房子按右端点排序。设g[i][j]表示只用1类/2类信号塔满足第i~第j座房子的需求,且第i-1座房子右端点+R处有一座复合信号塔的最小花费。设f[i]表示满足前i座房子的需求的最小花费,我们就可以枚举最后一座符合信号塔放在哪里,也就是f[i] = min(f[j-1] + g[j+1][i] + C3)。答案就是f[n].
H
如果直接对每一段路线求交了多少保护金,在正方形的角上很容易多算或者漏算,总之会有各种细节问题。
所以我们整体考虑问题,求出每一个正方形与路线相交的区间,区间的端点表示的是从整条路径的起点出发走过的距离。这样就变成了一个比较容易的问题:如何用最少的区间覆盖一个区间并。而且不会出现正方形的角上各种细节,非常科学。
I
感觉正解不是O(n2)的,然而更优复杂度的做法并不会...
对于一段路线l,如果之后的路线出现在了以l两端为垂心分别作垂线的长条形范围内,就不符合要求。这样我们暴力检查之后路线是否经过这个区域即可。这个判断条件还可以更加简化成一个半平面。
J
二分答案,这样我们就得到了在当前的答案下,每个人最多可以付多少次车钱。
设第i个人可以付Pi次车钱,他在第Di1, Di2, ... Dik天有坐车,那么就从源点向第i个人连容量为Pi的边,从第i个人向第Di1, Di2, ... Dik天分别连容量为1的边,然后每天向汇点分别连容量为1的边。做一遍最大流,看看最大流是否等于总天数即可。
补题
TsReaper
E, H, I, K
3z
E, I
hzf
E, I