首先看到与或,很显然想到按照位拆分运算。然后就变成了0/1矩阵,要使矩阵在当前位与为1,则矩阵全为1,如果是或为1,则是矩阵不全为0,然后求全为0/1的矩阵个数即可。记录c[i][j]表示以a[i][j]在该位向上0/1的长度。然后对于每一行,单调栈求解即可。

#include<bits/stdc++.h>
using namespace std;
const int N=,mod=1e9+;
int n,ans1,ans2,top,a[N][N],b[N][N],c[N][N],st[N],sum[N];
int calc()
{
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
c[i][j]=b[i][j]?c[i-][j]+:;
int ret=;
for(int i=;i<=n;i++)
{
st[]=top=;
for(int j=;j<=n;j++)
if(!c[i][j])st[]=j,top=;
else{
while(top&&c[i][j]<=c[i][st[top]])top--;
st[++top]=j,sum[top]=(sum[top-]+1ll*(j-st[top-])*c[i][j])%mod;
ret=(ret+sum[top])%mod;
}
}
return ret;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
scanf("%d",&a[i][j]);
for(int t=;t<=;t++)
{
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
b[i][j]=(a[i][j]>>t)&;
ans1=(ans1+(1ll<<t)*calc())%mod;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
b[i][j]^=;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
ans2=(ans2+1ll*(n-i+)*(n-j+)%mod*(1ll<<t))%mod;
ans2=(ans2-(1ll<<t)*calc()%mod+mod)%mod;
}
printf("%d %d",ans1,ans2);
}

最新文章

  1. netty5 HTTP协议栈浅析与实践
  2. 19、ASP.NET MVC入门到精通——Unity
  3. .Net 闭包理解
  4. About_类与对象
  5. HTML基础知识总结
  6. 【HDU 2874】Connections between cities(LCA)
  7. Spark 实时计算整合案例
  8. GCD编程 之 略微提高篇
  9. day05
  10. java中的接口和抽象类是什么?
  11. cnetos6.4 x64 阿里云环境初探--安装pip,及pymysql
  12. CKEditor + CKFinder 实现编辑上传图片配置 (二)
  13. CSS3媒体查询(Media&#160;Queries)
  14. Windows下visual studio code搭建golang开发环境
  15. SQL点滴19—T-SQL中的透视和逆透视
  16. 字体图标 轻量级 Font Awesome
  17. jquery左右轮播
  18. jsp中EL表达式不起作用的问题1
  19. MACD技术的高级应用--MACD与波浪
  20. SourceInsight工具增强——AStyle(代码格式化)、PC-Lint(静态检查)

热门文章

  1. 使用openssl做CA服务器,并且生成证书。
  2. 吴裕雄--天生自然C++语言学习笔记:C++ 修饰符类型
  3. 吴裕雄--天生自然Django框架开发笔记:Django 模板
  4. MySQL授权用户登录访问指定数据库
  5. Mybatis实现增删改查(二)
  6. 7. react 基础 - React Developer Tools 的安装 及 使用
  7. python一个正则表达式的不解
  8. 文献阅读报告 - Social LSTM:Human Trajectory Prediction in Crowded Spaces
  9. Numa解释
  10. 问:为什么java是单继承,但却是多实现的呢?