Typesetting math: 100%

2023牛客暑假多校 Day1

D

SB题

J

麻, 自己看了快十分钟还不会做就离谱, 队友哥写的。

观察到每次赢都是增加 1 的钱, 那直接按照钱从小往大 DP, 转移本质不同的只有 log 段, 快速幂转移一下就完了。

K

直接搞 bfs 树, 每个点数一下返祖边, 讨论一下叶子结点要不要伸长就搞完了。

H

考试的时候讨论半天给人讨论傻了最后没给个做法,看看群发现退役一年是真的变成 SB 了。

Δ=|aibj|+|ajbi||aibi||ajbj|

后面两项只和 i,j 有关, 考虑拆开前面的绝对值使得 i,j 独立。

对于一查询点 (ai,bi) 考虑把 (bj,aj) 存进数据结构, 对左下, 左上, 右下, 右上开四个数据结构移项查询一下即可。这个直接线段树搞搞就行。

赛时 aw 编了一个和正解可能差不多的东西, 没有搞懂, 听 mg 讲也没懂, 但是自己后来又搞出来了。

就是先把这东西 分成 ai<biai>bi 两类, 只有这样的交换才可能有贡献。

然后放到数轴上, 如果两个区间没有交集是没用的, 有交集或者包含是有用的, 也就是交换以后答案会变小, 且变小的大小就是两个区间交集的两倍。

那这个就很容易做了, 把区间按照右端点从大往小排序, 维护前缀最小左端点即可。

Submission #214210498 - Codeforces

L

excrt板板, 没开到, 血亏。

M

妈的, 赛时会了然后一直挂, 给大家找个不同。

下面是我赛时的代码

auto gt = [&] (i64 d) -> void {
		i64 m = b * d + x0, n = y0 - a * d;
		if (m >= 0 && n >= 0) ans = std :: min(ans, 2 * (m + n));
		else ans = std :: min(ans, 2 * (abs(m) + abs(n)) - 1ll);
	} ;

下面是 AC 代码

auto gt = [&] (i64 d) -> void {
		i64 m = b * d + x0, n = y0 - a * d;
		if (m >= 0 && n >= 0) ans = std :: min(ans, 2 * (m + n));
		else ans = std :: min(ans, 2ll * (abs(m) + abs(n)) - 1ll);
	} ;

玉玉了, 真的玉玉了。

做法很简单, 直接 exgcd 即可。

A, B

对我来说不可做

C

这个是不是应该当套路记录下来。

a=bk+c

  • 对于操作一, 令 ci+1=ci+x

  • 对于操作二, 如果 aikci+1=cik, 否则让 ci+1=cik,bi+1=bi+1

那么所有操作以后 bm=ceil(minicik)

那么使用一个维护区间历史最值的线段树即可简单维护。

E

什么超级加强版 slope trick

F

计算几何, G

G

不是人做的, G

本文作者:HN-wrp

本文链接:https://www.cnblogs.com/clover4/p/17562406.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   HN-wrp  阅读(37)  评论(2编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起