noi 滚cu后7月oi生活
7-24
A了bzoj1001 狼抓兔子,屯了好久的题,一直没写,写的挺顺利的,做了那么长时间bzoj,都没有把它A掉
网络流,平面图转对偶图,然后跑一下最短路,类似证明貌似像是最大流最小割定理一样,求最大转换为求最小,具体也不知道QAQ
看了一下bzoj1064 假面舞会,想到可能是环的大小的gcd,lcm,然后发现细节好多,根本不会找简单环。然后果断去搜题解,纠结了好一会儿,然后发现了一个新技巧,顿时眼前一片明亮,不过此技巧貌似适用面不广。
对于每条又向边x->y,我们建x->y的边,边权为1,建y->x的边,边权为-1,然后dfs一遍,给每个点标号,当dfs到重复点时,此环的大小为原先标的号与现在应该标的数的绝对值的差,因为此环两点之间(不是同一个环上)不存在两点之间的有两条不一样长的路径,于是此方法适用。
然后看到bzoj1052 覆盖问题,好像随便暴利暴力就过去了。
必有一个L形框的端点在最外层矩形框的角上,然后递归就行,对于每种情况,我只需求当前一解,然后递归求之后一解,此idea挺不错的。
又去看了一下bzoj2753 滑雪与时间胶囊,一开始看错题啦~\(≧▽≦)/~啦啦啦。第一问非常显然,第二问一看不会。看题解中有最小树形图几个字,又去看,越看越不会,又发现好像为什么和并查集还有些联系,又在纠结,纠结了好一会儿,终于懂了。
算法看题解咯,假设这个算法不对,那么它就不会被选,然而选了这条边对答案不可能变差,因为本来该在的还在,不该在的一定比它差,看来算法有时候是可以互用的,就在于此题的特殊性质,看似不可能的事情,也有可能的一面,抓住每个算法的性质。比如kruskal,它的实际意义在于加入这条边不比不加这条边差,那么这条边就是可以加的,这种能入就入的贪心想法,挺好的。
7-25
随手看了bzoj2190 仪仗队,好开心啊,终于有一题会做了,于是果断去写,回忆了一下线性筛,交上去发现,怎么那么多人跑0ms,我怎么跑了32ms,不管了TAT。
所有的问题一定要先抽象成数学模型,回想之前很多次考试,题目想不出来的终究原因只是在表面打转转,并没有学会模型之间的转换,有时要学会抽象,停在表面不一定能看出事情的真相。
然后又翻了一道陈题,bzoj1009 GT考试,一开始就想到了矩阵乘法,对于细节有一些小小的纠结,然后没敢写,看了下题解,发现原来不用想那么复杂。QAQ
对于矩阵乘法的题,一定要先写出dp方程,然后转移矩阵一定要写对,不然后果很严重。。。。
看了一下bzoj1289,并不会,网上去找题解,也没找到,问11要了代码,然而并没有看懂,就让它在那放着吧。
网上打bestcoder,第一题一眼题,第二题也是,第三题随手一发贪心交上去,第四题随手dp交上去。然后发下是room第一好开心,去向第5题,一直无思路,不想写了。然后比赛快结束时发现第三题是错的,hack时拿这个数据hack了一群人,然而房间中有手速比我快的,非常桑心,hack快结束时,发现那人T2写跪了。最后第四题fst了,貌似是常数太大T了,rank68,然而惊奇发现竟然是room rank1,好高兴啊,有钱了,不过应该是我们room比较水吧,A两题就能rank1,真是太神奇了。
7-26
看了一下昨天BC的题解,发现第三题就是乱搞+乱判断+贪心,第四题好像要压位,不过貌似n^2也能水过,第五题可以lct或者点分治,我竟然一个都不会。不过想一想,点分还是可以想到的。
总结一下,贪心要多想一些,这道题没有想到正确的贪心,归根结底是因为没有先对题目进行转化,而是一味地贪心,没有去想一想正确性,当发现一个算法正确性不对时,应该考虑一下,改一改,调整一下,是否就对了。对于一些数据结构题,不能钻在一处想,会钻进死胡同,跳出来,换种算法想,要多写写多学学常用算法。
介于不会点分治的缘故,去写了下bzoj1758 重建计划,调了一下午没调出来,好桑心啊,写法和网上又不一样,实在不想去调。中途买了个bzoj的权限号,顿时心情大好,我看到所有题了!不过好贵300块,只能用两年,不过想想退役时刚好用完,觉得一点也不亏。
晚上去做了7k+出的hihocoder,第一题一看不就是个小学题吗,但怎么调都调不出来了,想想不计rating,果断放弃了。去看第二题,构造,在黑板上画了画,突然发现就是一道复制父亲,在所有第一个没有的位子上填上1,一遍A了。又去纠结第三题,不会做啊,第四题,看不懂,果断弃疗。结束后,发现第三题竟然是线段树合并,突然发现自己好傻,这都想不到,又去写T3,发现根本写不出来,脑补了好一会儿,还是没写出来,线段树合并,还加懒标记,等我脑子清醒了再写吧。
7-27
上午去上了一个奇奇怪怪的课,一片无语,下午去调重建计划,从WA调到T,改了好长时间终于A了,虽然跑的飞慢,但依旧很高兴。
点分治,就是在这棵子树中,找一个重心,然后统计所有跨过重心的情况,然后再从重心剖开,把树剖成好多子树处理,中途可以使用一些别的数据结构进行统计答案。
WA的原因:二分时很多动心没有清0,中间过程清0清的不够,边界没有处理好,这种时候一定要在纸上算一算,避免悲剧重新发生。
T的原因,有些东西,不会因为二分的答案而改变,我们可以在二分外面算出这些东西,免得再二分中浪费不必要的时间,log的时间也很重要,写程序时常数也要习惯性地压小。
7-28
巩固了一下点分治,做了一下bzoj1468,tree,作为ltc男人必做八题之一,我一个妹纸A了,感觉非常高兴。这次写点分写的快多了,没有花太长时间调了。
随便看了bzoj1041,然后脑补了很长时间都没想出来,去看了一下题解,发现有一步的转换非常巧妙,变形很重要。
题解见http://hzwer.com/1457.html,对于一个不会的数学问题,要尝试一切办法将它变为可做问题。
随手做了一下bzoj1935,发现是一个大坑,首先有一种神奇的质因数分解方法,在辗转相减的基础上,每次把2给除掉,这样的复杂度是log级别的,然而压位是大难题,压了8位,然而还是T,表示这个世界无望了,真应该压2^32次方的QAQ
下午打多校,果断被虐,学军出的题不能看,贴一下题解http://bestcoder.hdu.edu.cn/blog,有空多看看。
7-29
bzoj1875 hh散步,觉得自己真心没救了,这么简单的题都要想半天,考虑点不行,那么就考虑边,只要下一步走的边和这一步不同,就行啦!
矩阵乘法问题,实际上不难,对于有限定条件的矩阵乘法,一定要使转移变得简单,让它的影响只存在两个矩阵的转移中。
bzoj1878 hh的项链,第一眼看到就想莫队,后来到网上看题解,发现还可以离线用树状数组搞一搞,觉得此方法非常之妙。
因为是统计每个数出现了没有,所以我们的目的就是保证在l到r中,每种颜色的数只被标记了一次,所以我们每次只把它的下一个位置的数+1,这样之前的就可以减掉,并且时间复杂度也有保证,next数组的应用+树状数组,解决了很多这样的数字统计问题。
7-30
刷了一上午的水题QAQ,但启发性挺强的。
bzoj2656 数列,用高精直接暴力往下枚举,但是有一些东西已经算过了,再算就是冗余了,所以我们用两个数来记录答案,分别记录的是这个数,和这个数+/-1,每次只会有一个数的值,所以只要算log次。
bzoj1042硬币购物,一道dp+容斥,合法的减去不合法的,感觉终于有一题自己会做了。
bzoj2431逆序对数列,一道dp经典老提,一个一个差,就即可。
bzoj2748音量调节,一道dp裸题。
bzoj2751容易题,乘法原理,减一减就可以了。
刷了一上午水题,感觉非常好
下午打多校,果断被虐,感觉在拖后腿TAT
7-31
bzoj1257余数之和sum,终于会推数学题了,a%b=a-[a/b]*b,[a/b]只有根号个值,然后就可以算了。
bzoj1047理想的正方形,用单调队列求出每一行连续n个的最大值最小值,然后用同一种想法,合并每一列的答案,这样的合并,非常好,既有效率,也不难写,利用单调性可以解决很多的问题。
bzoj1046上升序列,利用一个一个放的思想来解决问题,字典序最小的这类问题,可以求出局部可以满足的最大解,然后o(n)去扫一遍,找到字典序最小的,省队分组赛时有这样一题,就利用了这种思路,当时太弱,并不会。TAT
(终于写完了,脱了好长时间,感觉一直在刷水题)