这次又被坑了。。。
估分:60+30+30=120
实际得分:60+0+0=60
T1:
我们把一次操作定义为一段的头移到尾,那么总操作次数为n / 2 + n / 3 + ... + n / n <= nlogn。我们发现,对于某一段长k,第一段的头恰好移动到第二段的头,第二段的头恰好移动到第三段的头,依此类推,故每次操作时间复杂度O(1)。时间复杂度O(nlogn)。
T2:
小Y只有攻击型卡牌(共50%):贪心策略一(不消耗对方的防御型卡牌),把小X的卡牌从大到小排序,小Y的攻击性卡牌从小到大排序,然后依次对应用到不能用为止。时间复杂度O(nlogn + mlogm)。
30%:DFS,搜索小X的每张卡牌的使用对象是小Y的哪张卡牌。时间复杂度O(n^m)。
100%:贪心策略二(消耗完对方的防御型卡牌),对于小Y的每张防御型卡牌,都选小X的比其力量值大的力量值最小的卡牌来消耗,接下来同贪心策略一。将贪心策略一、二结合即可。时间复杂度O(nlogn + mlogm)。
事实证明,题解是错误的。怎么做呢?小X的大的牌匹配小Y的大的牌?
T3:
30%:DFS,每秒只有用魔法或不用魔法两种可能。时间复杂度O(2^n)。
60%:DP,f[x][y][t]表示t时刻到位置(x, y)的最长滑行路程,决策只有t时刻使用或者没使用两种情况。时间复杂度O(nmt)。
100%:DP,f[x][y][k]表示第k段时间结束时到位置(x, y)的最长滑行路程,那么决策区间就是在该段时间对应的方向上在该位置之前长度为该段时间长的一段,可以使用单调队列把转移时间复杂度优化到O(1)。时间复杂度O(nmk)。
对于单调队列可以维护一个f[i][j][k-1]+i/+j的形式的单调不升的队列
例如上升,我们可以从f[i+l][j][k-1]+l 转移过来(1<=l<=r-l+1),因此从n到1维护一个f[q[h]][j][k-1]+q[h]单调不升的队列然后即可O(1)转移。
后两题都0分的原因是即用getchar读入有用scanf读入,于是就GG了。。。
据说这两种读入方法是不能同是使用的。。。
以后必须要多加注意了。
2019.08.04【NOIP提高组】模拟 B 组总结
最新推荐文章于 2020-10-20 21:16:24 发布