传送门


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」与或和相关推荐

  1. 「GXOI / GZOI 2019」逼死强迫症

    传送门 problem ITX351 要铺一条 2×n2×n2×n 的路,为此他购买了 nnn 块 2×12×12×1 的方砖.可是其中一块砖在运送的过程中从中间裂开了,变成了两块 1×11×11×1 ...

  2. 「云市场2019」IaaSPaaS 三强:AWS,Azure,GCP

    2019年的云计算竞赛将具有明确的多云旋转. 下面介绍云领导者如何加入,混合云市场,SaaS运营商以及最新的战略举措. 2019年的顶级云提供商保持了自己的地位,但市场的主题,策略和方法都在不断变化. ...

  3. 【LOJ6713】「EC Final 2019」狄利克雷 k 次根 加强版(狄利克雷生成函数)

    传送门 题解: 我记得 SCOI2019 考完之后我就口胡过这个东西,当时D1T3 超矩形... 考虑 Dirichlet 生成函数:F(x)=∑i≥1fiixF(x)=\sum_{i\geq 1}\ ...

  4. [TJOI2013]拯救小矮人(反悔贪心证明),「ICPC World Finals 2019」Hobson 的火车(基环树,差分)

    2021-09-07 test [TJOI2013]拯救小矮人 「ICPC World Finals 2019」Hobson 的火车 [TJOI2013]拯救小矮人 luogu4823 考试题目的数据 ...

  5. 2019「友盟杯」数据分析大赛结果公布

    " 如果将一次参赛看作是一回登峰之旅,你觉得自己能走到哪里? 是不到终点不罢休,还是半路即返航? " 故事要从这里开始说起: 4 月 1 日,由友盟+和人人都是产品经理联合举办的& ...

  6. 【LOJ】#3086. 「GXOI / GZOI2019」逼死强迫症

    LOJ#3086. 「GXOI / GZOI2019」逼死强迫症 这个就是设状态为\(S,j\)表示轮廓线为\(S\),然后用的1×1个数为j 列出矩阵转移 这样会算重两个边相邻的,只要算出斐波那契数 ...

  7. LOJ#3054. 「HNOI 2019」鱼

    LOJ#3054. 「HNOI 2019」鱼 https://loj.ac/problem/3054 题意 平面上有n个点,问能组成几个六个点的鱼.(n<=1000) 分析 鱼题,劲啊. 容易想 ...

  8. 「CSP-S模拟赛」2019第四场

    「CSP-S模拟赛」2019第四场 T1 「JOI 2014 Final」JOI 徽章 题目 考场思考(正解) T2 「JOI 2015 Final」分蛋糕 2 题目 考场思考(正解) T3 「CQO ...

  9. 重磅!陀螺财经发布2019「年度影响力专栏」百强榜

    陀螺财经作为国内第一区块链价值内容服务平台,一直秉承"以专栏作家为中心,以内容为本"的平台运营逻辑,致力于网罗和扶持优质内容,深度连接行业用户和价值信息提供者. 截止目前,陀螺财经 ...

最新文章

  1. Seaborn在图像内自定义图例(legend)位置实战
  2. mysql存储netcdf数据_关于NetCDF与HDF5存储科学数据的观点?
  3. FOSCommentBundle功能包:改变样式
  4. Pearson收购PowerSchool iPod播教育内容
  5. linux 离线安装mysql_Linux系统安装MySQL(离线安装)
  6. Vue中使用input简易的上传图片
  7. jenkins的JAVA简单顺序配置git仓库
  8. mysql6.10,MySQL经典50题-第6-10题
  9. 续昨天的文章,在火山图标记基因名字
  10. 使用Laravel Eloquent ORM 时如何查询表中指定的字段 1
  11. PHP 使网站进行跨域访问
  12. matlab 查找字符串中第一个不为空格的_替换空格(剑指offer第三题)
  13. 注重IT的全程管控 第三方监理可有效保证IT质量
  14. 数据库学习笔记6-隔离级别 Serializable
  15. 随机森林和多元线性回归R语言实现代码
  16. B to B 与B to C网络支付结算方式区别
  17. 1-开发环境--android文件系统的结构
  18. 密码学的安全性浅析3
  19. もし私はあなたの恋人(1)作者xuanyang
  20. 八、【中级篇】数码管驱动(74HC138,74HC595)

热门文章

  1. dtree.js下拉树控件
  2. Vim配置Golang开发环境
  3. zipline的包结构
  4. OpenCV挥拳动作识别
  5. LeetCode 131. 分割回文串【字符串,回溯算法】
  6. Windows延缓写入失败-硬盘坏道
  7. 李炎恢ThinkPHP讲义ThinkPHP--自动验证[上][12]
  8. python fig.colorbar_python3 matplotlib自定义colorbar颜色条
  9. 【转】CAN总线的终端电阻选择
  10. Wireshark工具抓包的数据包分析