2025.2.6 test

我意识到写总结是不能只写题解的。

比赛过程是:0:00-2:00 干瞪 T1,观察到了一些性质,但是没想到 dp,2:00-3:00 写 T3 dfs 暴力,看了一会 T2 没仔细分析,然后 3:00-4:30 T1 想到可以用 dp 做,然后写,因为分讨太多最后写不出了结束了。

所以呢?T1 dp 需要再练?T3 的 dp,计数也要练。
还有 时间分配的问题,导致 T2 没看。也有畏难的成分。

A

一棵树/基环树,一开始每条边有方向,满足从 \(1\) 开始可以走到所有点。当一条边被走过一次其就会变成双向边。问从 \(1\) 走到 \(2\)\(2\) 走到 \(3\) … 走到 \(i\) 最少需要走多少步。\(n\le 5e5\)

先研究树,显然树的路径是唯一的且一定能走。对于基环树的树也是可以唯一考虑。
考虑环的状态,显然环是一个环或者一个 DAG。环的部分比较简单,考虑 DAG 的部分。
显然 DAG 的部分是由两条链组成 \(s\to t\) 的两条链。显然 \(1\)\(s\) 子树内。
考虑被打通的边的状态,一定是两条链分别打通了从 \(s\) 开始的一段。
我们现在面临一些决策问题,也就是倘若要从 \(s\) 走到 \(t\) 究竟走那边,我们没有直接想法考虑 dp。
注意到能造成影响的状态只有一整条链是否全部打通,那么只有四种状态,dp 即可。

B

给定序列 \(a\),有两种操作,一种是令 \(a_i=\min(a_i,a_{i+1})\),一种是令 \(a_i=\max(a_i,a_{i+1})\)。做完之后删掉最后一位。有 \(m\) 组操作,每组操作是进行 \(b_i\) 次操作 \(1\),再进行 \(b_i\) 次操作 \(2\)
\(q\) 次询问进行了 \(x\) 次操作后(不是组)区间和。

考虑 01 原理。操作 \(1\) 就是对 \(1\) 的连续段右端点左移一位。操作 \(2\) 就是对 \(1\) 的连续段左端点左移一位。
那么每次操作相当于删掉长度 \(\le b_i\)\(1\) 的连续段变成 \(0\)
\(L\) 为历史最大操作 \(1\) 减操作 \(2\) 次数,相当于把长度 \(\le L\) 的初始连续段删掉,剩下的区间都会被保留。
每个连续段都是独立的。那么可以算出连续段左右端点移动量 \(p,q\)
\([l,r]\) 表示初始的一个连续段。那么相当于求 \(\sum_{|[l,r]|>L}|[l-p,r-q]\cap [x,y]|\)\([x,y]\) 为查询区间。
\(p=q\) 可以转化为 \(|[l,r]\cap [x+p,y+p]|\),对 \(L\) 扫描线,区间加,区间和即可。
\(p=q\) 肯定 \(p<q\),设 \(u=q-p\),那么转化为 \(|[l,r-u]\cap [x+p,y+p]|\)
直接做是三维偏序。考虑拆成 \(|[l,r]\cap [x+p,y+p]|-|[r-u+1,r]\cap[x+p,y+p]|\)
左边可以正常算,右边是两段等差数列一段平着的形式。用两个树状数组维护即可。
具体地假设询问 \([x,y]\),不同位置的 \(r\) 贡献是已知的,\([x+u-1,y]\) 这段是 \(u\),两侧是等差数列。
考虑一般的序列,那么就是拆贡献变成 \(\sum_w\sum_i[a_i\ge w]\) 就变成 01 序列。
扫描线扫 \(w\),本质不同的连续段只有 \(O(n)\) 个,考虑处理出每个连续段存在的时间,代表其权值。
然后你再去扫 \(L\) 即可。

C

序列 \(n\) 个位置,\(0\)\(n+1\) 放置了烟花,\(m\) 次随机选一个没烟花的位置放置烟花,然后重复移动到相邻的位置若移动能使得距离最近的烟花更远。问每个位置有烟花的概率。

posted @ 2025-02-06 14:37  s1monG  阅读(20)  评论(0)    收藏  举报