码迷,mamicode.com
首页 > 其他好文 > 详细

南外联测 191112 做题总结

时间:2019-11-13 01:11:28      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:范围   art   begin   ceil   最短路   数据   不用   lock   固定   

Game

重述题意:

有这样一个游戏, 这个游戏里有n只怪, 每只怪血量 \(a_i\)

每次攻击时, 玩家选择一个数\(p\), 使得

for(int i = p; i <= min(n, k+p-1); i++) {
    a[i] -= k+p-i;
}

求最小的k, 使得玩家可以通过m次攻击使得所有\(a[i] < 0\)

数据范围:

50% data: \(n \le 10^3\)

100% data: \(n \le 10^6, m \le 1e9, a[i] \le 1e9\)

首先明显 k 具有可二分性。

对于每一个k,操作的方法只有: 对\(a_i\)数列顺序“施加攻击”。

但是怎么模拟这个操作呢?毕竟每次都区间减等差数列的数据结构 非常高级,而且难写

(当然写好暴力区间减就50分到手 再一次说明写暴力重要性

形式化的讲, 每次攻击\(a_i\) 需要施加 \(l = \lceil \frac{a_i}{k} \rceil\) 次攻击, 影响一直波及到 \(a_{i+k-1}\)

考虑差分。 定义 \(\Delta a_i = a_{i+1} - a_i\)

则有: \(\Delta a_i ' = \Delta a_i + l\) 。 所以 区间加等差数列等于区间差分加上一个固定的数

而对\(\forall \Delta a_x, \ i \le x\le i+k-1\), 都有上式成立。 故对每个操作,打上一个“区间减法”标记就可以了。

(其实这个标记的真正含义是二阶差分

考后总结

  1. 50分暴力必须要写。 写了可以对拍。
  2. 二分时注意 解区间开闭性和边界, 二分其实有很多坑的。重点要记住, 二分区间一致是一个 半开半闭 区间。
  3. 数组未初始化, 调了40分钟(哭哭哭。
  4. 其实k = 0的情况是存在的, 但是不能写进二分的判定里(若是让k = 0 ,那么判断时会除以0)
    1. 所以k=0情况要特判。

Friend

百度地图的实时路况 简化版。

考后感想

特别要注意: 这张图是有重边和自环的。

我没有给边判重,得20分

判重之后, 满分!!

Revenge

重述题意:

有一颗n个点的树, 每个点有一个颜色,总共有c种颜色。求最短的树上路径(一个点最多经过一次),使得路径上每种颜色的点都有。

60% data: \(n \le 2000\)

100% data : \(c\le 9, n \le 20000\)

这道题我在考试时想到的思路是这样的(类比求树的直径):

\[ \begin{align} 动态规划:\&f(i,sta) = 以点i为根,经过点集为sta的最短路径长度&\&g(i,sta) = 以点i为根,经过点集为sta的次短路径长度 \end{align} \]
但是其实这样无法保证最短路径和次短路径不相交 . 保证 不相交 才是最重要的.

但是我却写了这个错误的解法. 所以最后没时间调试, 我没分了.

考后感想

其实, 通过n次\(dfs\)就可以得到60分.

所以, 一个方法务必想清楚为什么正确!!不能确定正确的话, 先写个暴力.

100分做法:

动态规划: 仔细看, 定义改成了 \(f(i,sta) = 以点i为根,经过点集至少为为sta的最短路径长度\)

转移时, 可以优化:
\[{DP:} \begin{align} \&ans =\min _s f(u, s) + f(v,s')\&f(u, s+c_u) = \min \{f(v, s+c_u) + 1, f(u, s)\} \end{align}\]

复杂度 \(O(n*2^n)\)

注意!!

\(f(i, sta)\)\(sta\)至少 经过点集为sta的最短路径长度

这个至少 很重要。 否则, 这道题就需要用\(SOSdp\), 一种\(FWT\)的变体来更新ans了。

这里有一篇\(SOSdp\)的博客: https://blog.csdn.net/weixin_38686780/article/details/100109753

(原汁原味英文版: https://codeforces.com/blog/entry/45223

不过现在就先不学了。

怎么处理这个 至少 呢? (不用枚举子集)

再加一个状态转移方程: \(f_{u, s} = \min \{ f_{v,s} + 1, f_{u, s}\}\)就可以了。(有点意思!)

这样, 对于任意一条路径, 所有可能的 忽略某些点 的方案都会被统计到。(毕竟“至少” 就是要 忽略某些在路径上的点)

南外联测 191112 做题总结

标签:范围   art   begin   ceil   最短路   数据   不用   lock   固定   

原文地址:https://www.cnblogs.com/Eroad/p/11846163.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!