4.26赛后总结
比赛历程
今天感觉不困了,不过脖子疼,但是这个不影响什么。
AM7:30发下题,仍然遍历题目,简单的把三道题”翻译“了一下然后注释在程序下边,方便一会儿分析。
开始分析T1,一开始以为这个要线性(O(n)),之后发现这个m和w非常小,如果能够确定前m个方案,那么后边的数就是一个简单的不定方程问题,之后乘法原理就可以了。
考虑到m和w的范围,应当需要一个(mw^2)或者(m^2w)的算法,看着这个复杂度,才想到了DP。
设(f[i][j])为前(i)个数选取的值为(j)的方案数,每次转移大概是(O(sumw imes w))的,这样就有 (m^2w^2)的算法了!
实现出来大概AM8:30,分析了一下数据兴许已经有70分了,感觉可以在转移上优化,只是一时不知道怎么做,所以先看T2了;
T2是在一个边的序列中求区间最小生成森林,暴力相当可做,(O(qmlogm)) 就可以了,数据范围有一个(c_i)随着(i)递增的部分分
这样直接省去了克鲁斯卡尔的排序过程,不过直接暴力的话还是(O(qm))的,(1e9)的级别,所以不能奢望直接暴力。但是想到这个应该可以莫队搞一搞,不过感觉也不大会实现。
再研究一番,发现(n<=100) 那生成树最多也就99条边,那应该考虑prim而不是kruskal啊,思考prim怎么写
似乎是贪心的找集合内最小的边,这怎么办,不止要最小值,还可能需要次小值啊?主席树?100颗平衡树?
感觉都不太可写的样子,于是先打了暴力。
T2这一系列过程搞完已经是AM9:30了
T3思考了一番,发现只会bfs,然后写了队列套vector套结构体,然后整体bfs。
60分说是一个完整的矩形,但是没什么思路,这个时候没的多想了,感觉zyz,jyh,ztw人均前两题A了已经开始互相膜了
我就稳稳的拿分好了,,,然后我就只写了个BFS,60分只不过把整体跑bfs改成了4条边跑bfs。
也不知道怎么的,就到了十点半了吧。
开始思考T1的转移的优化,延续一开始想优化的时候,在想怎么把上一层整体的转移到这一层。
胡乱画了一下T1转移的图,终于发现这个转移是一段前缀和(太sb了吧,这么显然的东西),然后开始码,调试。
终于在AM11:00的时候,调过了所有的手造样例,然后要对拍一下了,对拍拍出来有个地方sum没取模,然后就挺对的;
不过这个时候,想测试一下程序把数据跑满能跑多快,嗯不错,0.7s。这个时候我鬼使神差的又点开out文件,感觉怎么这么不对劲呢
突然震惊,我调试没有关,输出了好多行,而对拍的两个文件调试也没有关,所以完全一样。
好在发现了,在11:25的时候确认没有问题,静待提交。
赛后发现
噢神仙翻车了
还好提交快,比同分的高一名,要加分了
zyz本地不对,扣了70,我当了rk1?
然后不计rating了
计不计rating没关系,因为长期保持的rating才是水平的体现,就算这次涨了,如果并不是实力所趋,那一定会再掉的。
计不计rating,JYH都还是RK1 orz
这次比赛也就是比较稳,打的都没挂,不过,确实大家T2都打的有模有样,而我什么都没实现,数据结构问题很大。
T3的60分似乎也不难,如果我提高速度的话或许也有机会想到。
离NOI说长也不长了啊,紧张起来多加练习吧。
简单题解
说起来我连题面都没交代,写啥题解啊。
T1写在了程序后边,不想再写了。
T2 正解是一个线段树区间的归并,感觉很陌生啊。不过大家又是回滚莫队又是线段树合并区间,花式AC,自闭了。
T3 60分考虑二维前缀和然后bfs然后差分。100分是一个奇妙的多项式方向的转化,感觉思路有点雷人,最后需要FFT/NTT解决(战略放弃?)。