T1:显然求逆序对就行了,然而我因为没有开long long只有84分。
总结:重申一遍需要计算的数值:数组范围,变量类型,时间复杂度。
T2:连边,bfs即可。
T3:二分答案,然后我们就要判断答案是否可行。
设f[i]表示以第i个单词作为某一行的结尾是否可行。自然我们的做法就是枚举一个j,表示j上一行的结尾。然后在j满足sum(j+1~i)+i-j-1<=w且(w-sum(j+1~i)-1)/(i-j-1)+1<=mid的情况下用f[j]来更新f[i]。
但这种做法的时间复杂度是O(n^2*log)的,需要优化。接着我们发现符合条件的j的区间是单调递增的。所以我们可以维护j区间的头和尾,再维护一个f的前缀和即可。
总结:比赛时我设了一个n^3的dp:f[i][j]表示第i行尾填的是第j个单词,导致我比别人少了一些分。dp时要看看有没有无用的状态,能省的状态就要省去。
T4:因为正方体有6个面,地面上最多12个空格、6个颜色面、2个起点和终点,所以一共最多有26个有颜色的地方。而这26个地方一定会有6个地方有颜色,那么总的颜色状态数就是C(26,6)=230230,再加上记录一个正方体的位置就是230230*20个状态。
这让人想到可以用bfs+hash记忆化来枚举。转移的时候枚举正方体的运动方向,事先预处理一下正方体想每个方向滚的时候每一面的变化情况,然后就可以了。
这题有点复杂,我最终TLE98.8分,开了O2才过去的。