「GXOI / GZOI 2019」与或和
传送门
problem
对于一个由非负整数构成的矩阵 AnA_nAn,定义矩阵的 AND\texttt{AND}AND 值为矩阵中所有数二进制 AND(&)\texttt{AND(\&)}AND(&) 的运算结果;定义矩阵的 OR\texttt{OR}OR 值为矩阵中所有数二进制 OR(|)\texttt{OR(|)}OR(|) 的运算结果。
给定一个 n×nn\times nn×n 的矩阵,请求出:
- 该矩阵的所有子矩阵的 AND\texttt{AND}AND 值之和(所有子矩阵 AND\texttt{AND}AND 值相加的结果)。
- 该矩阵的所有子矩阵的 OR\texttt{OR}OR 值之和(所有子矩阵 OR\texttt{OR}OR 值相加的结果)。
答案对 109+710^9+7109+7 取模。
数据范围:1≤n≤10001\le n\le 10001≤n≤1000,Aij<231A_{ij}< 2^{31}Aij<231。
solution
蛮简单的一道题。
首先还是按位处理,把问题转换成,求一个 010101 矩阵中全为 111 的子矩阵数量以及至少有一个 111 的子矩阵数量。
第一个可以用单调栈做,如果不会可以先做仓鼠窝这道题。
对于第二个,由于子矩阵的总数是 (n(n+1)2)2(\frac{n(n+1)}2)^2(2n(n+1))2,所以我们可以反转后算全为 111 的子矩阵数量。
为什么 n×nn\times nn×n 的矩阵的子矩阵总数是 (n(n+1)2)2(\frac{n(n+1)}2)^2(2n(n+1))2 呢?
把矩阵看成网格图,那么有 n+1n+1n+1 条竖线和 n+1n+1n+1 条横线。而一个子矩阵相当于是两条竖线和两条横线形成的,所以子矩阵数是 Cn+12×Cn+12=(n(n+1)2)2C_{n+1}^2\times C_{n+1}^2=(\frac{n(n+1)}2)^2Cn+12×Cn+12=(2n(n+1))2。
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 1005
#define P 1000000007
using namespace std;
int n,tot,A[N][N],a[N][N],h[N],stk[N],num[N];
int add(int x,int y) {return x+y>=P?x+y-P:x+y;}
int dec(int x,int y) {return x-y< 0?x-y+P:x-y;}
int mul(int x,int y) {return 1ll*x*y%P;}
int calc(){int ans=0;memset(h,0,sizeof(h));for(int i=1;i<=n;++i){int top=0;for(int j=1;j<=n;++j){if(!a[i][j]) h[j]=i;while(top&&h[stk[top]]<h[j]) top--;num[top+1]=add(num[top],mul(i-h[j],j-stk[top]));stk[++top]=j,ans=add(ans,num[top]);}}return ans;
}
int main(){scanf("%d",&n);for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)scanf("%d",&A[i][j]);int Xor=0,Or=0;tot=n*(n+1)/2,tot=mul(tot,tot);for(int k=30;~k;--k){for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)a[i][j]=(A[i][j]>>k)&1;Xor=add(Xor,mul(calc(),1<<k));for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)a[i][j]=(!a[i][j]);Or=add(Or,mul(dec(tot,calc()),1<<k));}printf("%d %d\n",Xor,Or);return 0;
}
「GXOI / GZOI 2019」与或和相关推荐
- 「GXOI / GZOI 2019」逼死强迫症
传送门 problem ITX351 要铺一条 2×n2×n2×n 的路,为此他购买了 nnn 块 2×12×12×1 的方砖.可是其中一块砖在运送的过程中从中间裂开了,变成了两块 1×11×11×1 ...
- 「云市场2019」IaaSPaaS 三强:AWS,Azure,GCP
2019年的云计算竞赛将具有明确的多云旋转. 下面介绍云领导者如何加入,混合云市场,SaaS运营商以及最新的战略举措. 2019年的顶级云提供商保持了自己的地位,但市场的主题,策略和方法都在不断变化. ...
- 【LOJ6713】「EC Final 2019」狄利克雷 k 次根 加强版(狄利克雷生成函数)
传送门 题解: 我记得 SCOI2019 考完之后我就口胡过这个东西,当时D1T3 超矩形... 考虑 Dirichlet 生成函数:F(x)=∑i≥1fiixF(x)=\sum_{i\geq 1}\ ...
- [TJOI2013]拯救小矮人(反悔贪心证明),「ICPC World Finals 2019」Hobson 的火车(基环树,差分)
2021-09-07 test [TJOI2013]拯救小矮人 「ICPC World Finals 2019」Hobson 的火车 [TJOI2013]拯救小矮人 luogu4823 考试题目的数据 ...
- 2019「友盟杯」数据分析大赛结果公布
" 如果将一次参赛看作是一回登峰之旅,你觉得自己能走到哪里? 是不到终点不罢休,还是半路即返航? " 故事要从这里开始说起: 4 月 1 日,由友盟+和人人都是产品经理联合举办的& ...
- 【LOJ】#3086. 「GXOI / GZOI2019」逼死强迫症
LOJ#3086. 「GXOI / GZOI2019」逼死强迫症 这个就是设状态为\(S,j\)表示轮廓线为\(S\),然后用的1×1个数为j 列出矩阵转移 这样会算重两个边相邻的,只要算出斐波那契数 ...
- LOJ#3054. 「HNOI 2019」鱼
LOJ#3054. 「HNOI 2019」鱼 https://loj.ac/problem/3054 题意 平面上有n个点,问能组成几个六个点的鱼.(n<=1000) 分析 鱼题,劲啊. 容易想 ...
- 「CSP-S模拟赛」2019第四场
「CSP-S模拟赛」2019第四场 T1 「JOI 2014 Final」JOI 徽章 题目 考场思考(正解) T2 「JOI 2015 Final」分蛋糕 2 题目 考场思考(正解) T3 「CQO ...
- 重磅!陀螺财经发布2019「年度影响力专栏」百强榜
陀螺财经作为国内第一区块链价值内容服务平台,一直秉承"以专栏作家为中心,以内容为本"的平台运营逻辑,致力于网罗和扶持优质内容,深度连接行业用户和价值信息提供者. 截止目前,陀螺财经 ...
最新文章
- Seaborn在图像内自定义图例(legend)位置实战
- mysql存储netcdf数据_关于NetCDF与HDF5存储科学数据的观点?
- FOSCommentBundle功能包:改变样式
- Pearson收购PowerSchool iPod播教育内容
- linux 离线安装mysql_Linux系统安装MySQL(离线安装)
- Vue中使用input简易的上传图片
- jenkins的JAVA简单顺序配置git仓库
- mysql6.10,MySQL经典50题-第6-10题
- 续昨天的文章,在火山图标记基因名字
- 使用Laravel Eloquent ORM 时如何查询表中指定的字段 1
- PHP 使网站进行跨域访问
- matlab 查找字符串中第一个不为空格的_替换空格(剑指offer第三题)
- 注重IT的全程管控 第三方监理可有效保证IT质量
- 数据库学习笔记6-隔离级别 Serializable
- 随机森林和多元线性回归R语言实现代码
- B to B 与B to C网络支付结算方式区别
- 1-开发环境--android文件系统的结构
- 密码学的安全性浅析3
- もし私はあなたの恋人(1)作者xuanyang
- 八、【中级篇】数码管驱动(74HC138,74HC595)