题目

广西和贵州的省选?好像很神仙的样子啊

之后发现这是一道水题

我们显然应该拆位考虑

显然我们应该对于每一位都拆一下看看这一位是\(0/1\)

显然我们如果找到一个全是\(1\)的矩阵,那么这一位的\(and\)和不为\(0\),否则就是\(0\)

对于\(or\)和,我们只需要求出全是\(0\)的矩阵,之后拿总矩阵数量一减就是至少有一个\(1\)的矩阵的数量,这样的矩阵\(or\)和这一位显然是\(1\)

于是问题转化成了求有多少个全\(0\)全\(1\)矩阵

我们预处理出每一个位置往右最多延伸的长度,对于一列来说我们需要求出所有子区间最小值的和

很好,我们发现这就是一个烜式合并单调栈的板子题了

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define re register
#define LL long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
const int maxn=1e3+5;
const int mod=1e9+7;
inline int read() {
char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
}
int cnt,a[maxn][maxn],n,b[maxn][maxn],M;
int st[maxn],sz[maxn],l[maxn][maxn];
int top,sum;
inline int work(int w,int o) {
for(re int i=1;i<=n;i++)
for(re int j=1;j<=n;j++) {
if((a[i][j]&(1<<w))) b[i][j]=o;
else b[i][j]=o^1;
}
for(re int i=1;i<=n;i++) {
l[i][n]=b[i][n];
for(re int j=n-1;j;--j)
if(!b[i][j]) l[i][j]=0;
else l[i][j]=l[i][j+1]+1;
}
int tmp=0;
for(re int j=1;j<=n;j++) {
top=0,sum=0;
for(re int i=1;i<=n;i++) {
int now=0;
while(top&&st[top]>=l[i][j])
sum-=st[top]*sz[top],now+=sz[top],top--;
st[++top]=l[i][j];sz[top]=now+1;
sum+=st[top]*sz[top];
tmp=(tmp+sum)%mod;
}
}
return tmp;
}
int main() {
n=read();
for(re int i=1;i<=n;i++)
for(re int j=1;j<=n;j++)
a[i][j]=read(),M=max(M,a[i][j]);
for(re int i=1;i<=n;i++)
for(re int j=1;j<=n;j++)
cnt=(cnt+1ll*(n-i+1)*(n-j+1)%mod)%mod;
int ans=0,tot=0;
for(re int w=0;w<=32;w++) {
if((1ll<<w)>M) break;
int t=(1ll<<w)%mod;
ans=(ans+1ll*t*work(w,1)%mod)%mod;
tot=(tot+1ll*t*(cnt-work(w,0)+mod)%mod)%mod;
}
printf("%d %d\n",ans,tot);
return 0;
}

「GXOI / GZOI2019」与或和的更多相关文章

  1. 「GXOI / GZOI2019」简要题解

    「GXOI / GZOI2019」简要题解 LOJ#3083. 「GXOI / GZOI2019」与或和 https://loj.ac/problem/3083 题意:求一个矩阵的所有子矩阵的与和 和 ...

  2. LOJ#3083.「GXOI / GZOI2019」与或和_单调栈_拆位

    #3083. 「GXOI / GZOI2019」与或和 题目大意 给定一个\(N\times N\)的矩阵,求所有子矩阵的\(AND(\&)\)之和.\(OR(|)\)之和. 数据范围 \(1 ...

  3. Loj #3085. 「GXOI / GZOI2019」特技飞行

    Loj #3085. 「GXOI / GZOI2019」特技飞行 题目描述 公元 \(9012\) 年,Z 市的航空基地计划举行一场特技飞行表演.表演的场地可以看作一个二维平面直角坐标系,其中横坐标代 ...

  4. 【LOJ】#3088. 「GXOI / GZOI2019」旧词

    LOJ#3088. 「GXOI / GZOI2019」旧词 不懂啊5e4感觉有点小 就是离线询问,在每个x上挂上y的询问 然后树剖,每个节点维护轻儿子中已经被加入的点的个数个数乘上\(dep[u]^{ ...

  5. 【LOJ】#3087. 「GXOI / GZOI2019」旅行者

    LOJ#3087. 「GXOI / GZOI2019」旅行者 正着求一遍dij,反着求一遍,然后枚举每条边,从u到v,如果到u最近的点和v能到的最近的点不同,那么可以更新答案 没了 #include ...

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

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

  7. 【LOJ】#3085. 「GXOI / GZOI2019」特技飞行

    LOJ#3085. 「GXOI / GZOI2019」特技飞行 这显然是两道题,求\(C\)是一个曼哈顿转切比雪夫后的线段树扫描线 求\(AB\),对向交换最大化和擦身而过最大化一定分别为最大值和最小 ...

  8. 【LOJ】#3083. 「GXOI / GZOI2019」与或和

    LOJ#3083. 「GXOI / GZOI2019」与或和 显然是先拆位,AND的答案是所有数字为1的子矩阵的个数 OR是所有的子矩阵个数减去所有数字为0的子矩阵的个数 子矩阵怎么求可以记录每个位置 ...

  9. 「GXOI / GZOI2019」宝牌一大堆 (DP)

    题意 LOJ传送门 题解 可以发现「七对子」 和 「国士无双」直接暴力就行了. 唯一的就是剩下的"3*4+2". 考试的时候写了个爆搜剪枝,开了O2有50pts.写的时候发现可以D ...

  10. 「洛谷5300」「GXOI/GZOI2019」与或和【单调栈+二进制转化】

    题目链接 [洛谷传送门] 题解 按位处理. 把每一位对应的图都处理出来 然后单调栈处理一下就好了. \(and\)操作处理全\(1\). \(or\)操作处理全\(0\). 代码 #include & ...

随机推荐

  1. JVM进程状态监控

    前言 ========== 为什么需要做服务器jvm自动发现的监控呢?这个事情主要有两点原因: 1.zabbix默认监控jvm状态是使用jmx中转进行监控的,监控效率比较低下 2.zabbix使用jm ...

  2. Windows应用程序对键盘与鼠标的响应

      编写程序: 设计一个窗口, 当单击鼠标左键时, 窗口中显示"LEFT BUTTON"; 当单击鼠标右键时, 窗口中显示"RIGHT BUTTON"; 当单击 ...

  3. JVM学习网址(收集总结)

    1.文章分类 - JVM调优总结   JVM综合调优汇总 星火燎原智勇 2018-08-16 11:11 阅读:8 评论:0 JVM调优04-概括总结 星火燎原智勇 2017-01-08 23:28 ...

  4. 网络编程: 基于TCP协议的socket, 实现一对一, 一对多通信

    TCP协议  面向连接 可靠的 面向字节流形式的 tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端 TCP协议编码流程: 服务器端:                 客户端 实例化对 ...

  5. time模块,计算时间差

    计算当前时间与所输入的时间的时间差 #1 计算当前时间的时间戳时间 t_now = time.time() # 计算以前的时间的时间戳时间 t_before = input('请输入时间(例如:200 ...

  6. Leet Palindrome Partitioning II

    class Solution { public: int minCut(string s) { int len = s.length(); ]; char* s_dp = new char[len * ...

  7. Vue 2.0 pagination分页组件

    最近写了一个分页组件,效果如下图: f-pagination.js文件 Vue.component('f-pagination',{ template:'<div class="fPa ...

  8. webapi 后台跳转 后台输出html和script

    1.跳转 [HttpGet]public HttpResponseMessage LinkTo(){ HttpResponseMessage resp = new HttpResponseMessag ...

  9. 前端AMD、CMD和commonJs-前端知识

    前端AMD和CMD是在模块化的基础上产生并且得到大幅度的引用的. AMD 即Asynchronous Module Definition(点击链接可以查看AMD面试题),中文名是异步模块定义的意思.它 ...

  10. git push 提示 Everything up-to-date

    第一次在 Google Code 上弄项目,注册完毕后,尝试增加一个新文件用以测试 Git 是否好好工作.结果在 Push 时却显示 Every up-to-date,检查文件时却发现实际上一个都没更 ...