ABC353

抽象局。

AB一眼。

C

相当于求 \(\sum\sum (a_i+a_j)\bmod P\),等价于 \(\sum\sum (a_i+a_j)-\lfloor \frac{a_i+a_j}{P}\rfloor\times P\),由于 \(a_i,a_j<P\),得到 \(\sum\sum a_i+a_j-[a_i+a_j>=P]\times P\),把 \(a\) 排序后二分一下就行。

D

考虑每个 \(a_i\) 的贡献,为 \(a_i\times (i-1)+a_i\times \sum\limits_{i+1}^n 10^{s(j)}\),其中 \(s(j)\) 代表 \(a_j\) 的数位数。

E

观察到 \(\sum |S|\) 不大,考虑枚举每个字符串的前缀,计算这段前缀的贡献。

剩下就是哈希入门了。


被高爷爷安利了 trie。

考虑把每个字符串扔到 trie 上,统计一下即可。

F

很厉害的题。

一种显然的贪心就是尽量走大瓦片,于是如果 \((x,y)\) 是一个散点,我们就枚举该点走到上下左右的哪个瓦片上,然后暴力分类讨论。

现在重点是计算从一个大瓦片到另一个大瓦片的贡献。

对于 \(k\ne 2\),相邻两个瓦片可以花费 \(2\) 的代价。

对于 \(k=2\),如果要从一个瓦片走到 \(y\) 相同的另一个大瓦片,可以直接横穿,花费 \(3\) 的代价。

然后随便推一推式子就做完了。

G

很厉害的题。

考虑 dp,令 \(dp_i\) 代表现在停留第 \(i\) 个城镇能得到的最大收益,有转移:

\[dp_{t_i}=\max\limits_{j=1}^n(dp_j-c\times |t_i-j|+p_i) \]

显然可以把绝对值拆开分讨,然后上个线段树就做完了,但是我不太正常

下面阐述一下抽象的赛时思路。

对于 \(t_i\),观察到 \(t_i-1\)\(t_i+1\) 相较于 \(t_i\)\(-c\),往后同理。

这是什么?等差数列啊!

于是直接扔棵线段树维护,本来应该用两棵,但是赛时只用了一棵,所以没调过。

现在问题就是,怎么维护呢?

回想一下我们的需求,单点修改,查询如果将某段区间加上等差数列后该段区间的最大值。

注意到公差 \(c\) 是确定的。

于是对于 \([l,r]\),我们在线段树上就维护 \(\max(v_l,v_{l+1}-c,v_{l+2}-2\times c,\cdots)\),这是好维护的。

然后查询时细节比较多,不太想写了。

两棵线段树维护一下就做完了。

posted @ 2024-05-12 01:07  BYR_KKK  阅读(85)  评论(0)    收藏  举报