「GXOI / GZOI2019」与或和
广西和贵州的省选?好像很神仙的样子啊
之后发现这是一道水题
我们显然应该拆位考虑
显然我们应该对于每一位都拆一下看看这一位是\(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」与或和的更多相关文章
- 「GXOI / GZOI2019」简要题解
「GXOI / GZOI2019」简要题解 LOJ#3083. 「GXOI / GZOI2019」与或和 https://loj.ac/problem/3083 题意:求一个矩阵的所有子矩阵的与和 和 ...
- LOJ#3083.「GXOI / GZOI2019」与或和_单调栈_拆位
#3083. 「GXOI / GZOI2019」与或和 题目大意 给定一个\(N\times N\)的矩阵,求所有子矩阵的\(AND(\&)\)之和.\(OR(|)\)之和. 数据范围 \(1 ...
- Loj #3085. 「GXOI / GZOI2019」特技飞行
Loj #3085. 「GXOI / GZOI2019」特技飞行 题目描述 公元 \(9012\) 年,Z 市的航空基地计划举行一场特技飞行表演.表演的场地可以看作一个二维平面直角坐标系,其中横坐标代 ...
- 【LOJ】#3088. 「GXOI / GZOI2019」旧词
LOJ#3088. 「GXOI / GZOI2019」旧词 不懂啊5e4感觉有点小 就是离线询问,在每个x上挂上y的询问 然后树剖,每个节点维护轻儿子中已经被加入的点的个数个数乘上\(dep[u]^{ ...
- 【LOJ】#3087. 「GXOI / GZOI2019」旅行者
LOJ#3087. 「GXOI / GZOI2019」旅行者 正着求一遍dij,反着求一遍,然后枚举每条边,从u到v,如果到u最近的点和v能到的最近的点不同,那么可以更新答案 没了 #include ...
- 【LOJ】#3086. 「GXOI / GZOI2019」逼死强迫症
LOJ#3086. 「GXOI / GZOI2019」逼死强迫症 这个就是设状态为\(S,j\)表示轮廓线为\(S\),然后用的1×1个数为j 列出矩阵转移 这样会算重两个边相邻的,只要算出斐波那契数 ...
- 【LOJ】#3085. 「GXOI / GZOI2019」特技飞行
LOJ#3085. 「GXOI / GZOI2019」特技飞行 这显然是两道题,求\(C\)是一个曼哈顿转切比雪夫后的线段树扫描线 求\(AB\),对向交换最大化和擦身而过最大化一定分别为最大值和最小 ...
- 【LOJ】#3083. 「GXOI / GZOI2019」与或和
LOJ#3083. 「GXOI / GZOI2019」与或和 显然是先拆位,AND的答案是所有数字为1的子矩阵的个数 OR是所有的子矩阵个数减去所有数字为0的子矩阵的个数 子矩阵怎么求可以记录每个位置 ...
- 「GXOI / GZOI2019」宝牌一大堆 (DP)
题意 LOJ传送门 题解 可以发现「七对子」 和 「国士无双」直接暴力就行了. 唯一的就是剩下的"3*4+2". 考试的时候写了个爆搜剪枝,开了O2有50pts.写的时候发现可以D ...
- 「洛谷5300」「GXOI/GZOI2019」与或和【单调栈+二进制转化】
题目链接 [洛谷传送门] 题解 按位处理. 把每一位对应的图都处理出来 然后单调栈处理一下就好了. \(and\)操作处理全\(1\). \(or\)操作处理全\(0\). 代码 #include & ...
随机推荐
- div中让文字垂直居中
在div中如何让文字垂直居中? 作者在刚接触web前端开发时就遇到了这个问题,一直没有记录下来,今天正好有空,便记录下来. 为了方便展示,我把style先直接写在了div里. 效果如下图所示: 图1. ...
- css3 transform(变形)笔记
Transform字面上就是变形,改变的意思.在CSS3中transform主要包括以下几种:旋转rotate.扭曲skew.缩放scale和移动translate以及矩阵变形matrix. 一.旋转 ...
- Ubuntu16.04 LTS上安装Go1.10
原因 Ubuntu资源库上默认使用的是Go1.6.2版本,给最新版本代码编译带来了不少问题.本文就记录下在Ubuntu下直接安装Go最新版1.10的步骤. 准备工作 1.卸载已有版本 # 卸载已经安装 ...
- Centeros7下安装Mysql 2018最新版,非常简单
下载Mysql的rpm安装包 shell> wget http://dev.mysql.com/get/ mysql-community-release-el7-5.noarch.rpm安装sh ...
- Java:使用DOM4j来实现读写XML文件中的属性和元素
DOM4可以读取和添加XML文件的属性或者元素 读取属性: public static void ReadAttributes() throws DocumentException { File fi ...
- 高并发第十一弹:J.U.C -AQS(AbstractQueuedSynchronizer) 组件:Lock,ReentrantLock,ReentrantReadWriteLock,StampedLock
既然说到J.U.C 的AQS(AbstractQueuedSynchronizer) 不说 Lock 是不可能的.不过实话来说,一般 JKD8 以后我一般都不用Lock了.毕竟sychronize ...
- UML 类图详解
转载来源:http://blog.csdn.net/shift_wwx/article/details/79205187 可以参考:http://www.uml.org.cn/oobject/2012 ...
- python之多进程multiprocessing模块
process类介绍 multiprocessing 模块官方说明文档 Process 类用来描述一个进程对象.创建子进程的时候,只需要传入一个执行函数和函数的参数即可完成 Process 示例的创建 ...
- Java Web应用开发工具
java Web应用开发工具详细地址:https://my.oschina.net/gitosc/blog/1538466
- 国内阿里云Maven镜像(速度飞起)
修改maven根目录下的conf文件夹中的setting.xml文件,内容如下: <mirrors> <mirror> <id>alimaven</id> ...