2022 ICPC第一场网络赛几句话题解
2022 ICPC第一场网络赛解题报告
rank31
A. 01 Sequence
一个结论题,对于一段连续的个,为偶数下可以消灭掉个,为奇数下可以消灭个。如果无法消灭完所有,输出剩下的的个数除以。
然后只要用前缀和处理区间信息就好了。很多人写线段树属于是魔怔了,不带修改为啥要线段树(
B. Power Station
还没补
C. Delete The Tree
输出叶子个数
D. Find the Number
找到区间中的,使得在二进制下的个数和后缀的个数相等。
两种做法:
- 预处理出所有满足条件的,之后在询问区间中查找。
- 首先枚举的个数,就可以确定一段,之后从高位到低位枚举哪一位于不同,然后填并判断。有一些小细节
E. Tower Defence
还没补
F. Bacteria
挺裸的积性筛板子
首先考虑等于以为结尾的数列个数,那么最终的答案就是。
考虑的组合含义:将进行质因数分解后填入个位置的方案。那么很显然可以分为进行放置质因数,并且方案独立。很显然是个积性函数。
最后只要预处理出的值(插板法),用Min_25
板子套上去就能过。
G. Read the Documentation
暴力dp冲了就过。
H. Step Debugging
用栈进行模拟计数,签到题。
I. Permutation
给出一个排列,求循环位移后所有的排列的康托展开之和。
首先对原排列进行考虑,产生的贡献为。再对所有的排列进行考虑:若,这一对数产生的贡献为,发现跟他们的距离有关系。如果 那么距离就应该是。
最后我们只需要统计出所有的
然后令表示数字出现的位置,目标求出所有。暴力求显然是不行的。
考虑分治:分为两个区间,递归求解区间内贡献,再考虑算出两个区间之间的答案。然后发现两个区间之间的贡献可以用的多项式来解出(N是原排列长度),但进行次多项式复杂度反而更劣了。然而分治到小区间时我们可以直接用的暴力计算,当区间长度满足时就直接暴力算,否则继续分治。
最后的复杂度为
考场上没有想到先转化成再进行分治,但是直觉确实是往多项式和分治这边想的,有点可惜。
J. Gachapon
队友写的,没看题
K. Pyramad
也是队友写的,但是知道一点思路。
最朴素的做法是的,因为状态比较多无法通过。但是一个关键信息是。假如前轮只管加,接下来轮只管加能力值就可以超过,那么后面的轮一定是全赢。可以利用这个信息来对状态数量进行限制:
令表示前轮,输了轮,时的最大能力值,那么显然第二维,第三维也有一定限制(我也不清楚具体是多少,尽量搞大,能过就行),然后冲个。
L. LCS-like Problem
队友秒了
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!