4.28模拟赛赛后总结
4.28模拟赛赛后总结
比赛历程
AM7:35 说好的用邮箱发题改成了U盘 不过不影响什么
这次比赛用NOIlinux了,我掏出了我的vim,不过在此之前,我先在文本编辑器gedit里写了我的常用代码框架,以及vim的set配置,这样就不用每次调一遍配置了。
复制还是有点蹩脚,不过问题不大。
准备好大概是45~50期间,开了6个终端,三个vim,三个用来编译和运行,先把每个文件尝试编译一下,因为题面上编译选项写了开O2,所以我也加上了这个,但是这个时候却在freopen的位置出现了warning,但是应该不是那种影响程序编译的,而是有潜在风险的,在dev里应该属于那种呈黄色的warning,具体是:warning : ignoring return value of 'FILE* freopen(const char*,const char *,FILE *);’ ,declared with attribute warn_unused_result [-Wunused-result]
我一头雾水,如果我把编译选项的O2给关掉它就不会提示这个,倒腾了一会儿并测试了一下确定并不会影响程序的运行,于是我才放下这个问题。
AM8:00 这个时候才开始正式看题。
T1 图论!连通分量? T2 图论,还是竞赛图,这啥啊! T3 区间异或啥的,好麻烦,先忽略吧。
想着正序开题,先打完暴力,不过还是先思考一下T1.
看数据范围,好像前70分可以搞一下,40~70的部分分区间向右挪,也就是说又要来莫队之类的吗,但是怎么处理增加或者减少的边呢?不会啊、、只会暴力重构,只能每次都做一遍联通分量吧。。那先搞暴力吧。感觉前30分也不用啥联通分量,Floyd的话,复杂度达到了1.25e8,感觉有点危险啊,还是打连通分量吧。我淦,强联通分量怎么求来着。。瞎搞了一番tarjan,vector启发式合并啥的,虽然印象里有强联通分量需要开栈什么的,但最终还是只会瞎搞,打不出来了。。
这个时候大概要9点了吧,先看T2吧,T2是竞赛图,搜吧,简单分析一下,大概是个组合数级别的爆搜,好像1s内搜出来n<=6的部分是没有压力的,大概只会跑2^{18}次,那就已经有40了,好,搜吧,\(2^{18}\)之后还要跑一边Floyd来判断图的可达性,然后dfs找到最长路,反正\(2^{18}\)小,乘一个\(n^{3}\)也没关系!(伏笔)
结果是搞到10点,答案竟然是错的,自闭,发现输出样例有分,打上去就有10分,就这吧。。
都10点了。T1还是个假的连通分量,危险啊,先搞搞这个吧,花了1个小时,瞎搞了一个dfs用bitset合并可达点,应该能够有强联通分量的效果吧,样例过去了。。
瞎搞的可太久了啊!
11:18分,T3还没打暴力!
快速浏览题目和数据范围,前20分只用for循环就行了,赶紧码。
11:25打完发现挺对的,两个样例都过了。
保存文件并待机
只有最低档暴力。然后发现他们T2都会打表,我说我表都不会打,只会输出样例了。
今天怎么这么蠢
感觉这么昏沉呢。
赛后发现
1 关于那个freopen 事后去网上搜索,什么也没搜出来,似乎没有任何人提过这个问题,但是这么久了都是这么用的,所以应该不会有问题。
2 T1 用Floyd果然能过。瞎搞只有报玲。果然这种有板子的东西还是不要自己瞎搞。。
3 伏笔回收。为什么我的T2搜完之后需要再跑一遍Floyd呢?因为要判断一下i->j 之后是不是还有j->i呢?因为我以为竞赛图是只存在i->j或者j->i的单向路径,而竞赛图实际上是只存在i->j或者j->i的单向边,题目上说的是”单向道路“, 淦啊,”单向边“多明显啊,考场上被这个给搞蒙了,手玩也玩不出来,(玩出来跟我跑的一样)。所以根本不需要那么麻烦,dfs到终点直接把图跑一遍然后累计答案就行了。但是还有一个问题就是我的搜索n=8的时候跑的贼慢,zyz说他的搜索1分钟就跑完了n=8,而我搜索。。1分钟只能跑完n=7。面对幂函数级别的增长,n=8就慢的离谱了。
4 又倒数了,今天打的啥啊,简直脑溢血。
5* Linux用的还不是很舒服,感觉怎么用都是没有Windows方便的;实现出来做法了还是不对,还是多读读题吧;有板子的东西一定要用板子(板子得多练;下次先最快的速度把所有暴力打完再想其他的,不能好高骛远,这次T3有点危险。。起码1h内所有的暴力都得有吧。
简单题解
自闭了,目前仅T2做出来了,T1。
T2是一个图计数的DP,主要是利用了竞赛图的性质,竞赛图一定存在一条哈密顿路径,所以说可以把图划分然后进行计数DP。
贴个比原题解好看的题解链接吧 [BZOJ 5219] [Lydsy2017省队十连测]最长路径_LPA的博客-CSDN博客