P5300 [GXOI/GZOI2019]与或和】的更多相关文章

题目地址:P5300 [GXOI/GZOI2019]与或和 考虑按位计算贡献 对于 AND 运算,只有全 \(1\) 子矩阵才会有贡献 对于 OR 运算,所以非全 \(0\) 子矩阵均有贡献 如果求一个 01 矩阵中全 \(0/1\) 子矩阵的个数呢? 单调栈可以 \(O(n^2)\) 实现 总时间复杂度 \(O(n^2k)\) 其中 \(k\) 是二进制位数 #include <bits/stdc++.h> #define ll long long using namespace std;…
传送门 题目涉及按位与以及按位或运算,所以可以拆位考虑,枚举某个二进制位,然后某个位置如果那个数的第\(i\)位是\(0\)就放\(0\),否则放\(1\),这一位的贡献就是位运算后值为\(1\)的子矩阵个数\(*2^i\).对于与运算,权值为\(1\)的矩阵为全\(1\)矩阵;对于或运算,权值为\(1\)的矩阵为含有\(1\)的矩阵,可以看成是总个数-全\(0\)矩阵个数,然后全\(0\)和全\(1\)矩阵个数可以单调栈求得 #include<bits/stdc++.h> #define L…
原题传送门 我们珂以拆位,拆成一个个0/1矩阵 贡献珂以用全0,全1的子矩阵的个数来计算 全0,全1的子矩阵的个数珂以用悬线法/单调栈解决 #include <bits/stdc++.h> #define N 1005 #define mod 1000000007 #define getchar nc using namespace std; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&…
GXOI/GZOI2019题解 P5300 [GXOI/GZOI2019]与或和 一眼题.. 显然枚举每个二进制位,答案就变成了全1子矩阵数量. 这个xjb推推,单调栈一下就行了. #include<bits/stdc++.h> #define il inline #define vd void #define mod 1000000007 typedef long long ll; il ll gi(){ ll x=0,f=1; char ch=getchar(); while(!isdig…
[BZOJ5505][GXOI/GZOI2019]逼死强迫症(矩阵快速幂) 题面 BZOJ 洛谷 题解 如果没有那两个\(1*1\)的东西,答案就是斐波那契数,可以简单的用\(dp\)得到. 大概是设\(f[i]\)表示当前除了到第\(i\)列的方案数,转移是考虑用\(2*1\)竖着覆盖一列还是\(2\)个\(1*2\)横着覆盖两列,得到转移\(f[i]=f[i-1]+f[i-2]\). 现在回假设要在这一行放上第二个\(1*1\),那么直到前一个\(1*1\)所在列之前的所有方块都被唯一确定了…
题目链接: [GXOI/GZOI2019]旅行者 我们考虑每条边的贡献,对每个点求出能到达它的最近的感兴趣的城市(设为$f[i]$,最短距离设为$a[i]$)和它能到达的离它最近的感兴趣的城市(设为$g[i]$,最短距离设为$b[i]$). 那么每条边$(u,v,w)$的贡献就是$a[u]+w+b[v]$,用这个值去更新答案即可(这个值代表$f[u]$到$g[v]$的最短路长度). 但要注意一条边能更新答案需要满足$f[u]\neq g[v]$,因为要保证起点和终点不同. 手画一下就可以知道最短…
题目链接: [GXOI/GZOI2019]旧词 对于$k=1$的情况,可以参见[LNOI2014]LCA,将询问离线然后从$1$号点开始对这个点到根的路径链修改,每次询问就是对询问点到根路径链查询即可. 可以发现,如果一个点的贡献被记入答案,那么这个点到根的路径上所有点的贡献都会被记入答案. 那么对于$k>1$的情况,只要每次将路径上点$u$的权值都$+1$变成每次将路径上点$u$的权值都$+(dep[u]^k-(dep[u]-1)^k)$即可. 同样用线段树维护树剖序的区间权值和即可. #in…
题目链接: [GXOI/GZOI2019]逼死强迫症 设$f[i][j]$表示前$i$列有$j$个$1*1$的格子的方案数,那么可以列出递推式子: $f[i][0]=f[i-1][0]+f[i-2][0]$ $f[i][1]=2*f[i-1][0]+f[i-1][1]$ $f]i][2]=f[i-1][2]+f[i-2][2]+f[i-2][1]$ 通过递推式子求出一个$6*6$的矩阵然后用矩阵乘法优化递推即可. #include<set> #include<map> #inclu…
题目链接: [GXOI/GZOI2019]宝牌一大堆 求最大值容易想到$DP$,但如果将$7$种和牌都考虑进来的话,$DP$状态不好设,我们将比较特殊的七小对和国士无双单独求,其他的进行$DP$. 观察其他五种和牌可以发现,他们都是由$4$组杠子或面子和$1$组雀头组成. 那么可以列出$DP$式子:$f[i][j][k][l][m][n]$表示前$i$种牌,其中有$j$个杠子或面子.$k$个雀头,第$i-2\sim i$种牌分别有$l,m,n$张时前$i-3$种牌的最大值. 转移时对顺子.杠子.…
题目地址:P5305 [GXOI/GZOI2019]旧词 这里是官方题解 \[\sum_{i \leq x}^{}\ depth(lca(i,y))^k\] \(k = 1\) 求的是 \(\sum_{i \leq x}^{}\ depth(lca(i,y))\) ,一堆点然后每个点和 \(y\) 求 \(lca\) 然后深度求和. 总体思路是把 \(lca\) 的值摊派到这个点到根的路径上(这个东西也叫树上差分?),再离线解决所有询问. 维护一个点权数组 \(sum\) ,初始为 \(0\)…