NOI2020省队选拔赛前训练(打摆)记录
Day -9
打了一场省选模拟,又垫底了。
T1
带分类讨论,不想写。
甚至数据出锅
T2
AGC020C
T3
读错题了还能拿到50pts
首先先将坐标分开处理,记\(s_i=\sum_{j=0}^ix_j\),且令\(x_0=1\),那么\(Ans=\sum_{i=1}^n[\max(s_i,s_{i-1})>0][\min(s_i,s_{i-1})<0]\).
考虑将\((s_{i-1},s_i)\)看成一段区间,那么答案就是包含\(0\)的区间数量。
注意到每次修改影响到的都是从当前指针开始的后缀,我们可以考虑将当前指针之后的区间全部丢入线段树中,这些区间会对应一个全新的零点(由于修改产生的位移),那么对坐标的修改可以考虑先减去之前的贡献,再加上修改后新的贡献即可。对指针的修改则可以直接加入/删去线段树中的一个区间。
Day -7
打了一场省选模拟,又垫底了。
今天debuff真的严重,唯一的好消息可能只有把(看起来是)稍微码农的字符串写出来了。
T1
没有把这个题做出来,感觉思维有点危险。
一个简单的暴力是记\(f_{i,j}\)表示在经过了\(i\)条边后能否到达点\(j\)。这个东西可以暴力转移然后过掉sub2. 看起来这个可以矩乘转移,然后又注意到转移矩阵只有\(O(c)\)种,看起来很可行。但是会被卡,注意到这个矩阵乘法可以只用and和or,于是可以用bitset优化矩阵乘法。
T2
注意到\(\prod_{i=1}^n a_i-(a_j-1)\prod_{i=1,i\neq j}^na_i=\prod_{i=1,i\neq j}^na_i\),所以k次操作后产生的伤害和只与初状态和末状态有关,有一个显然的\(O(nk^2)\)dp就不再说明。
记第\(i\)个元素被减了\(b_i\)次,那么答案就是:
后面那个东西很像一堆生成函数的某个次项,记\(F_i(x)=\sum_{j\geq 0}\frac{a_i-j}{j!}x^j\),那么后面那个东西就是\([x^k]\prod F_i(x)\).
后面的那个东西可以分治NTT做,之后枚举乘积的次数暴力算一算就好了。
T3
也就是对\(\forall r\in[1,n]\)求出每个子串在\(s_{1...r}\)中出现次数的平方。
建出广义SAM,对parent树做树链剖分,每次枚举\(r\)时先找到对应节点再跳parent,用树链剖分加速这个过程的同时用线段树维护出现次数的平方和。看起来很复杂但是写起来异常的清晰。
Day -4
打了一场省选模拟,又垫底了。
T1
POI2014 Hotel
T2
考虑如何快速计算最后一项
第一项就是个等差数列求和,对第二项,记\(d=\gcd(a,c)\),不难发现\(ia\% c\)是一个以\(d\)为周期的数列,且每个周期内的数从大到小排列为\(jd(0\leq j<\frac{c}{d})\),故
直接计算即可
T3
建出广义SAM,然后那询问串暴力在上面跑匹配即可。在parent树上预处理出每个点到根节点的链中所有节点对应的串的总个数。这样可以在之后的匹配的统计答案中避免暴力跳parent
Day -3
打了一场省选模拟,又垫底了。
T1
记\(a_n\)为所求,那么有\(a_n=\sum_{i=1}^{n-1}a_i+n^k\).
记\(s_n=\sum_{i=1}^na_i\),则\(s_n=s_{n-1}+a_n=2s_{n-1}+n^k\),并将问题转化为求\(s_n\)
再次化简得到\(\frac{s_n}{2^n}=\frac{s_{n-1}}{2^{n-1}}+\frac{n^k}{2^n}\).于是可以考虑求数列\(\{\frac{n^k}{2^n}\}\)的前缀和。
由于根据数据范围的要求我们需要一个与\(k\)相关的算法,所以在算这个前缀和的时候我们需要枚举的下标不是\(n\)而是\(k\)。
记\(f_k=\sum_{i=1}^n\frac{i^k}{2^i}\),则由错位相减法知
预处理出\(2^n,n^i\)即可。
T2
维护的是\(\prod_{i=1}^n (A_ix+B_i)\)的最低的\(c\)次项,由于\(c\)很小可以直接用线段树存每个区间的多项式的积。
T3
考虑如何使用最小割解决这个问题。
钦点\(1\)号点与\(s\)相连,再枚举一个一定和\(t\)相连的点,两条边的流量均为正无穷,跑最大流求出最小割即可。