比赛时间安排
7.30-7.35
t1还没来得及看就被告知是原题,还好换了(我还没写到呢)
7.35-7.45
t2 看不懂题
t3 不是说好不出期望吗?不过暴力还是很简单的,可以搞一下
t1 暴力可以。。。?2^(nm)?!让我死吧
7.45-7.55
t3暴力写完,认为肯定没问题了
7.55-8.30
把t1好好想了想
觉得可以搞网络流
刚看过有源汇上下界最小流(奇怪的线段树),于是就想到了,发现好像可以,而且求的也很符合!而且数据那么小,网络流的可能性很大
首先考虑建图,我可以把每行每列都分出来一个点,再和每行每列的点都连一下,这样点数就是。。nm?!,1e4?!逗我呢!于是想了想有没有其他的建边方式,发现想不到了,于是就放弃了
8.30-9.00
我觉得t3好像可以记忆化搜索搞一手,写了发现假了,自闭,不过发现了我原程序的一个小bug,在对拍程序里改了,没在原程序里改,导致我交错了!!!自闭(都是后话了)
9.00-10.30
继续想t1的
感觉现在直接想图论模型的转换有点不太现实,还是先把暴力打好再说吧,有分最重要
于是我想了一下,1010最坏的情况就是K=0,如果要求为5的话是最大的,也就是C(10,5),如果直接暴力的话是(C(10,5)C(10,5)10010),好像卡卡可以!
然后我兴致勃勃的去写了,造了一组数据直接t飞,发现复杂度算错了是(C(10,5)^1010010) 自闭ing
但是不能这样放弃啊,于是我把dfs分开写,先处理每行的状态,2^m*n的复杂度,然后枚举每行的选择,这样总算过了6,(其实1s多),但是复杂度还是贼高,先这样吧,想不到了
10.30-11.20
秉持每道题都要有分的原则,我又去看t2了(实际是我其他不会了),发现这么简单?!!!!在树上跑一遍,对于同一父亲的儿子,只有当他们的度数不同的时候才会有贡献,于是赶紧写了。样例过了。这复杂度不对啊!A了?!我当然不相信题这么简单,于是又想了想,发现不同父亲的结点贡献也可能重复,于是我。。。
开始写暴力
用vector套vector,记录每个长度的路径,然后20分到手
11.20-12.00
想到t3是不断/2,那么最多也就20多次,枚举每次经过哪20个点?复杂度也不现实,不过肯定是和k有关的,但是会有重复,不会搞,自闭时间
赛后总结反思
- 交代码的时候一定要确认是否是最终版本,10分的教训
- 要敢于写贪心,学会写贪心,毕竟t1贪心能A啊!!哭了
- 能想到网络流很好,建边的思路需要加强
与正解的差距
T1
正解真的是网络流啊!!!!!!!!!!!!
只是正解的建边只用到了行和列,和具体点数没关系,这样确实可行,其实把每个点加上的时候我并不知道这每个点怎么和行列连边,这下复杂度和连边问题都解决了(顺带一提,dinic的复杂度是假的1e8也能跑)
T2
正解将该问题转化成求本质不同的字串的个数,后缀自动机不熟练,导致想不到,其实是原题呀
T3
正解用到了我想的性质(激动),然后进行容斥+dp
我连最基础的dp式子都没写,所以更别说优化了,不过最基础的也能想到,以后遇到这种题可以选择找规律或者dp(不要一直执着于dfs啦)