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 eq j}^na_i=prod_{i=1,i eq j}^na_i),所以k次操作后产生的伤害和只与初状态和末状态有关,有一个显然的(O(nk^2))dp就不再说明。
记第(i)个元素被减了(b_i)次,那么答案就是:
后面那个东西很像一堆生成函数的某个次项,记(F_i(x)=sum_{jgeq 0}frac{a_i-j}{j!}x^j),那么后面那个东西就是([x^k]prod F_i(x)).
后面的那个东西可以分治NTT做,之后枚举乘积的次数暴力算一算就好了。
T3
也就是对(forall rin[1,n])求出每个子串在(s_{1...r})中出现次数的平方。
建出广义SAM,对parent树做树链剖分,每次枚举(r)时先找到对应节点再跳parent,用树链剖分加速这个过程的同时用线段树维护出现次数的平方和。看起来很复杂但是写起来异常的清晰。
Day -4
打了一场省选模拟,又垫底了。
T1
POI2014 Hotel
T2
考虑如何快速计算最后一项
第一项就是个等差数列求和,对第二项,记(d=gcd(a,c)),不难发现(ia\% c)是一个以(d)为周期的数列,且每个周期内的数从大到小排列为(jd(0leq 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}^nfrac{i^k}{2^i}),则由错位相减法知
预处理出(2^n,n^i)即可。
T2
维护的是(prod_{i=1}^n (A_ix+B_i))的最低的(c)次项,由于(c)很小可以直接用线段树存每个区间的多项式的积。
T3
考虑如何使用最小割解决这个问题。
钦点(1)号点与(s)相连,再枚举一个一定和(t)相连的点,两条边的流量均为正无穷,跑最大流求出最小割即可。