传送门 线段树好题啊. 题目要求的是sum−a−b−c+maxsum-a-b-c+maxsum−a−b−c+max{∣a+v∣+∣b+v∣+∣c+v∣|a+v|+|b+v|+|c+v|∣a+v∣+∣b+v∣+∣c+v∣}. 那么后面有几种情况: a+v+b+v+c+va+v+b+v+c+va+v+b+v+c+v a+v−b−v+c+va+v-b-v+c+va+v−b−v+c+v a+v+b+v−c−va+v+b+v-c-va+v+b+v−c−v −a−v+b+v+c+v-a-v+b+v+c+v−…
传送门 考虑到模数等于7 * 13 * 17 * 19. 那么只需要维护四棵线段树求出每个数处理之后模7,13,17,197,13,17,197,13,17,19的值再用crtcrtcrt合并就行了. (因为太懒不想写crt改用枚举求解水过) 代码…
传送门 组合数学好题. 题目要求输出的结果成功把概率转化成了种类数. 本来可以枚举统计最小值为iii时的概率. 现在只需要统计最小值为iii时的方案数,每一行有不少于iii个1的方案数. 显然一行选i个1的方案数为(mi)∗xm−i∗yi\binom {m} {i}*x^{m-i}*y^{i}(im​)∗xm−i∗yi 于是对于每一行分开考虑最后用快速幂合并就行了. 代码: #include<bits/stdc++.h> #define ll long long using namespace…
传送门 根据题目列出方程: fi=pi∗(fi−1+fi−2)+(1−pi)∗(fi+1+fi)f_i=p_i*(f_{i-1}+f_{i-2})+(1-p_i)*(f_{i+1}+f_i)fi​=pi​∗(fi−1​+fi−2​)+(1−pi​)∗(fi+1​+fi​) 但这会牵扯到iii之后的状态没法做. 因此考虑如果合成失败会变成一个等级为i−2i-2i−2的武器. 相当于消耗了一个等级为i−1i-1i−1的武器. 因此fi=pi∗(fi−1+fi−2)+(1−pi)∗(fi−1+fi)f…
传送门 纯粹是为了熟悉板子. 然后发现自己手生了足足写了差不多25min而且输出的时候因为没开long longWA了三次还不知所云 代码…
传送门 带修莫队板题. 直接按照经典写法做就行了. 代码…
传送门 换根dpdpdp傻逼题好像不好码啊. 考虑直接把每一个二进制位拆开处理. 先dfsdfsdfs出每个点到1的异或距离. 然后分类讨论一波: 如果一个点如果当前二进制位到根节点异或距离为1,那么对于当前二进制位到这个点距离为000的就是到根节点距离为111的,如果当前二进制位到这个点距离为111的就是到根节点距离为000的. 如果一个点如果当前二进制位到根节点异或距离为1,那么对于当前二进制位到这个点距离为000的就是到根节点距离为000的,如果当前二进制位到这个点距离为111的就是到根节…
传送门 好题. 考察了莫队和组合数学两个知识板块. 首先需要推出单次已知n,mn,mn,m的答案的式子. 我们令f[i]f[i]f[i]表示当前最大值为第iii个数的方案数. 显然iii之后的数都是单调递减且连续的. 所以后面的方法是1种. 考虑第111~i−1i-1i−1个位置. 显然放法数为∑j=1i−1f[j]\sum _{j=1} ^{i-1}f[j]∑j=1i−1​f[j] 又因为f[1]=1,f[i−1]=∑j−1i−2f[j]f[1]=1,f[i-1]=\sum _{j-1} ^{…
传送门 f[i][j]f[i][j]f[i][j]表示后iii个对答案贡献有jjj个a的方案数. 可以发现最后a,ba,ba,b的总个数一定是n∗(n−1)/2n*(n-1)/2n∗(n−1)/2 因此直接转移就行了. f[i][j]=f[i+1][j]+f[i+1][j−i]f[i][j]=f[i+1][j]+f[i+1][j-i]f[i][j]=f[i+1][j]+f[i+1][j−i] 解释:要么当前不选,要么选了就会有iii个aaa的贡献. 发现空间有点大?滚动数组优化 代码…
传送门 勉强算一道dp好题. 显然第kkk列和第k+nk+nk+n列放的棋子数是相同的. 因此只需要统计出前nnn列的选法数. 对于前mmm%nnn列,一共有(m−1)/n+1(m-1)/n+1(m−1)/n+1列跟它放的棋子数一定相同. 而对于第mmm%n+1n+1n+1~nnn列,一共有m/nm/nm/n列跟它放的棋子数一定相同. 因此枚举当前在第几列,一共放了几个棋子,然后用背包+快速幂优化转移就行了. 代码…