2019.07.01【NOIP提高组】模拟 A 组

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才过去的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值