【题解】AtCoder-ABC320

发布时间 2023-09-17 08:56:16作者: SoyTony

AtCoder-ABC320A Leyland Number

依题意计算。

提交记录:Submission - AtCoder

AtCoder-ABC320B Longest Palindrome

直接 \(O(n^2)\) 枚举,\(O(n)\) 判断。

提交记录:Submission - AtCoder

AtCoder-ABC320C Slot Strategy 2 (Easy)

不妨将字符串复制三遍,枚举 \([0,3m)\) 判断。

提交记录:Submission - AtCoder

AtCoder-ABC320D Relative Position

由于确定了 \(1\) 的坐标,推断关系可以看作连边,DFS 处理即可。

提交记录:Submission - AtCoder

AtCoder-ABC320E Somen Nagashi

set 维护当前队列,小根堆维护仍处于等待阶段的队列,每次询问先将可以入队的从小跟堆插入 set 再计算。

提交记录:Submission - AtCoder

AtCoder-ABC320F Fuel Round Trip

过程一来一回,且要求每个位置来回只能加油一次,那么应当考虑一起 DP。

\(f(i,j,k)\) 表示当前考虑了前 \(i\) 个加油站,其中去程油箱油量 \(j\),返程油箱油量 \(k\) 的最小代价。这里转移比较奇怪,去程每次是移动消耗油,而返程是倒着做所以移动是增加油。

\(d=x_{i+1}-x_i\),讨论 \(i\) 位置是否加油。

如果不加油,转移有:

\[f(i+1,j-d,k+d)\leftarrow f(i,j,k) \]

如果去程加油,\(i+1\) 处油量是 \(\min(j+f_i,H)-d\),转移有:

\[f(i+1,\min(j+f_i,j)-d,k+d)\leftarrow f(i,j,k)+p_i \]

如果返程加油,设 \(i+1\) 处油量为 \(x\),那么有 \(\min(x-d+f_i,H)=k\),如果 \(k\neq H\),此时 \(x=k-f_i+d\),是唯一的,转移有:

\[f(i+1,j-d,k-f_i+d)\leftarrow f(i,j,k)+p_i \]

反之则要求 \(x-d+f_i\ge h\),那么 \(x\le H-f_i+d\),对这个范围内的所有 \(x\),转移有:

\[f(i+1,j-d,x)\leftarrow f(i,j,k)+p_i \]

由于第四个转移不为 \(O(1)\),但只有 \(k=H\) 时出现,因此复杂度是 \(O(nH^2)\)

初始认为 \(f(0,H,k)=0\),而答案应为 \(\min_{k=1}^H \{f(n,k,k)\}\)

提交记录:Submission - AtCoder

AtCoder-ABC320G Slot Strategy 2 (Hard)

考虑二分答案,区间在 \([0,nm)\),对于每个数 \(d\),建左部点为 \(i\in[1,n]\),右部点为 \(j\in[0,mid]\) 的二分图,当第 \(i\) 个轮可以在 \(j\) 时刻显示 \(d\) 时连边。

这样复杂度过高,注意到左部点数量较少,根据 Hall 定理,要求 \(|T|\le |N_G(T)|\),那么每个左部点只连前 \(n\) 条边就能保证存在完美匹配。

这样点数和边数只有 \(O(n^2)\),二分直接二分右部点的一个前缀即可。

提交记录:Submission - AtCoder