您的位置:首页 > 其它

GDKOI总结

2016-02-23 18:54 169 查看

GDKOI总结

第一次用c++出战还是有很多问题的

如果不理解,可以看下面的Code&Details(代码与细节)

Day 1:

[b]Problem 1 魔卡少女[/b]

要维护所有连续子段xor的和,支持修改,很明显是线段树。我开始打了棵维护连续xor的线段树a1和维护a1的线段树a2,由于打的十分暴力,交上去只有30分。用十棵线段树来维护每一位的0和1的个数就能100。比赛是没想到,打只有30分的方法浪费了很多时间。

Code&Details

[b]Problem 2 不稳定的传送门[/b]

这道题用全排列暴力只有20分。但是比赛结束才发现c++struct里面的实数不能直接读入…最后爆零。一开始我也想到了排个序,不过排的方法错了。设f[i]为i到n的最小期望值。假设先走第i个传送门传送到toi比先走第j传送门传送到toj更优,长度为c,概率为p,那么就是

c[i]+p[i] * f[toi]+(1-p[i]) * (c[j]+p[j]*f[toj])<

c[j]+p[j] * f[toj]+(1-p[j]) * (c[i]+p[i]*f[toi])<

那么展开后就是

c[i]+p[i] * f[toi]+c[j]+p[j] * f[toj]-p[i] * c[j]-p[i] * p[j] * f[toj]<

c[j]+p[j] * f[toj]+c[i]+p[i] * f[toi]-p[j] * c[i]-p[j] * p[i] * f[toi]

然后转移一下

p[i] * c[j]+p[i] * p[j] * f[toj]>p[j] * c[i]+p[j] * p[i] * f[toi]

再和一下p[i] * (c[j]+p[j] * f[toj])>p[j] * (c[i]+p[i] * f[toi])

然后再移一下p[i]/(c[i]+p[i] * f[toi])>p[j]/(c[j]+p[j] * f[toj])

倒着做,排个序依次连边,然后走到第一个概率为1的就退出。

其实在求期望的时候会自动省略的,因为(1-1)=0

Code&Details

[b]Problem 3 寻宝[/b]

这题一开始看错题了,导致爆零,可怜…大水法都可以打将近80分,泪奔。。。大神们说是最大权闭合子图加上01分数规划:一个点集,出边连的点都在这个点集中,是一个闭合子图,要求权值和最大的闭合子图。

题目要求∑ki=1ai∑ki=1bi\sum_{i=1}^{k}a_i\over\sum_{i=1}^{k}b_i最大,首先二分一个ans,然后假设

∑ki=1ai∑ki=1bi\sum_{i=1}^{k}a_i\over\sum_{i=1}^{k}b_i=ans

那么就是

∑ki=1ai\sum_{i=1}^{k}a_i=∑ki=1bi∗ans\sum_{i=1}^{k}b_i*ans

再移项

∑ki=1ai−ans∗bi\sum_{i=1}^{k}a_i-ans*b_i

然后就是最大权闭合子图的连边,s连向正权,负权连向t(绝对值),然后中间正常连边,s所在的集是最大权闭合子图,用正边权和减去最小割就是答案(如果原本点权是负的,贡献也是负的,因为正权和并没有加它)。

但是这题要求权值和最小,所以把ai−ans∗bia_i-ans*b_i取个相反数再连边就好了。

Code&Details

[b]Problem 4 地图[/b]

第四题一开始以为是快搜加些排列数什么的,打着打着发现太麻烦时间不够放弃了,而我却不小心忘记了很简单的30分大暴搜,凄惨。然而这题是插头DP(轮廓线动态规划)。可以理解为状态压缩DP,要处理保证起点,终点,神器联通就可以了。

[b]Day 1心得[/b]

结果第一天的总分只有30+0+0+10=40,可怜。总是追求正解,却忽略了暴搜,这样是不行的,以后答题前应该好好规划,富榄都没打完四题,但是还有330%%%。不过还是涨了很多见识,比如说:一个图就什么方案数的很明显的插头DP;考虑先后问题是不是DP就是想一个排序式;位运算的维护操作维护每位的0,1个数;在选不选这个数对一个分数有影响,用0,1分数规划。struct里的实数不能直接输入,泪啊。

————————————————————分割线————————————————————

Day 2:

[b]Problem 1 染色大战[/b]

这题很明显是棵博弈树,博弈树的经典做法就是极大极小值搜索(MinMax算法)。我一开始怕c++爆栈(错误了预估了c++的栈),我竟然打了BFS,最后是废了,本来预估100的,哎。。。

一层一层的每次轮换选手,维护要求的那个选手的最优获得值。因为是博弈,在我方这一层肯定选获得只最大的,在对手那一层,肯定选获得值最小的,所以是极大极小值搜索。极大极小值搜索有个兄弟剪枝:αβ\alpha \beta剪枝(alpha阿尔法α\alpha beta贝塔β\beta) 。alpha表示我方这一层当前选的值的下线,beta表示对手这一层的当前选的值得上线。如果当前节点i(对手)的beta小于等于father[i-1] (我方) 的alpha,那么节点i就剪枝,因为我要选最大的但是这个比我最小的都小就没必要选了。beta剪枝类似。

其实直接用记忆化搜索就可以100了

Code&Details

[b]Problem 2 QT和泰剧[/b]

这个一眼题就是数位DP,但是记起第一天暴搜没打,所以这题先没有打正解,而打的是暴搜,最后导致没时间打正解。这还不说,题目估计是文件名打错了,抄不到文件啊,50就埋了。

设f[i][j][k][l]表示从高到低枚举到第i位,j是前面数的和%3的值,k表示上一位有没有到上限(如果到上限这一位最大的也是上限,否则可以是任意数),l表示是否有前导0,f[]表示数的个数。转移很显然,最后在用前缀和思想就可以了。

Code&Details

[b]Problem 3 项链[/b]

去年是用manachar来判断最长双回文子串(某道题),今年是构造最长双回文子串。我用manachar打了个不优美的暴搜不知道为什么爆零了。

如果是项链那么很容易想到在后面copy一遍串。用数据结构维护所有的p,然后找两个相交的或接触的回文子串的最大长度就是答案。因为我找到了这个那它肯定满足,然后再把前面那一段删去就可以了…..【i……【j…】i……】j…(【i】和【j】互相相交,【i前面的删掉了,如果不相交的话,就必须删掉两次,所以不合法).刚好满足,所以一定要选相交的回文串。

Code&Details

[b]Problem 4 小学生数学题[/b]

一开始见到还以为是水题,不就是欧拉定理在加个暴搜就能50分,再加个矩阵优化一下就行了。哇,打着打着,发现问题了分数线上下两个不互质那怎么办……最后统计了所有的分子和分母,终于在冒着215的危险下过了样例,然后就没分了,本来有30分的,想哭。

Code&Details

[b]Day 2心得[/b]

结果第二天分数惨的可怜10+0+0+0=10,哎……感觉也不能老是打暴搜,有把握的题目还是要打正解的。打题的时候应该全部想好,我就这不行,总是错误的方法打完之后才知道它错了。一看到博弈题就应该想到极大极小值搜索,不应该想会爆栈,还有αβ\alpha\beta呢;看到数位DP就应该打,一般这种题的拍不超过5分钟就打完了,不应该先打拍的;逆元要在分子分母互质时才能用,错误不应该再犯了,不然又会耗很多时间;像之前做过的题的加深版,要拿到更多的分,最好还是在以前思维的基础上想题保险一点。

发现一个个未遇见过得错误,一个个新思维和心得,其实收获挺大的。

希望在即将到来的GDOI上,这些错误不要犯。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: