【题解】Luogu P5300 [GXOI/GZOI2019]与或和
原题传送门
我们珂以拆位,拆成一个个0/1矩阵
贡献珂以用全0,全1的子矩阵的个数来计算
全0,全1的子矩阵的个数珂以用悬线法/单调栈解决
#include <bits/stdc++.h>
#define N 1005
#define mod 1000000007
#define getchar nc
using namespace std;
inline char nc(){
    static char buf[100000],*p1=buf,*p2=buf;
    return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline int read()
{
    register int x=0,f=1;register char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
    return x*f;
}
inline void write(register int x)
{
    if(!x)putchar('0');if(x<0)x=-x,putchar('-');
    static int sta[20];register int tot=0;
    while(x)sta[tot++]=x%10,x/=10;
    while(tot)putchar(sta[--tot]+48);
}
int n,a[N][N],len[N],all,ans1,ans2;
pair<int,int>s[N];
inline int work(register int t,register int opt)
{
	int res=0;
	for(register int i=1;i<=n;++i)
		len[i]=0;
	for(register int i=1;i<=n;++i)
	{
		int top=0,sum=0;
		for(register int j=1;j<=n;++j)
		{
			len[j]=(a[i][j]>>t&1)==opt?len[j]+1:0;
			int tmp=1;
			while(top&&s[top].first>=len[j])
				sum-=s[top].first*s[top].second,tmp+=s[top--].second;
			sum+=len[j]*tmp;
			res=(res+sum)%mod;
			s[++top]=make_pair(len[j],tmp);
		}
	}
	return res;
}
int main()
{
	n=read();
	for(register int i=1;i<=n;++i)
		for(register int j=1;j<=n;++j)
			a[i][j]=read(),all=(all+i*j)%mod;
	for(register int i=0,j=1;i<31;++i,j<<=1)
	{
		ans1=(ans1+1ll*work(i,1)*j)%mod;
		ans2=(ans2+1ll*(all-work(i,0)+mod)*j)%mod;
	}
	write(ans1),putchar(' '),write(ans2);
	return 0;
}
【题解】Luogu P5300 [GXOI/GZOI2019]与或和的更多相关文章
- luogu P5300 [GXOI/GZOI2019]与或和
		传送门 题目涉及按位与以及按位或运算,所以可以拆位考虑,枚举某个二进制位,然后某个位置如果那个数的第\(i\)位是\(0\)就放\(0\),否则放\(1\),这一位的贡献就是位运算后值为\(1\)的子 ... 
- P5300 [GXOI/GZOI2019]与或和
		题目地址:P5300 [GXOI/GZOI2019]与或和 考虑按位计算贡献 对于 AND 运算,只有全 \(1\) 子矩阵才会有贡献 对于 OR 运算,所以非全 \(0\) 子矩阵均有贡献 如果求一 ... 
- 【题解】Luogu P5301 [GXOI/GZOI2019]宝牌一大堆
		原题传送门 首先先要学会麻将,然后会发现就是一个暴力dp,分三种情况考虑: 1.非七对子国士无双,设\(dp_{i,j,k,a,b}\)表示看到了第\(i\)种牌,一共有\(j\)个\(i-1\)开头 ... 
- 【题解】Luogu P5304 [GXOI/GZOI2019]旅行者
		原题传送门 题意:给你k个点,让你求两两最短路之间的最小值 我们考虑二进制拆分,使得每两个点都有机会分在不同的组\((A:0,B:1)\)中,从源点\(S\)向\(A/B\)中的点连边权为0的边,从\ ... 
- luogu P5305 [GXOI/GZOI2019]旧词
		传送门 先考虑\(k=1\),一个点的深度就是到根节点的路径上的点的个数,所以\(lca(x,y)\)的深度就是\(x\)和\(y\)到根路径的交集路径上的点的个数,那么对于一个询问,我们可以对每个点 ... 
- luogu P5304 [GXOI/GZOI2019]旅行者
		传送门 所以这个\(5s\)是SMG 暴力是枚举每一个点跑最短路,然后有一个很拿衣服幼稚的想法,就是把所有给出的关键点当出发点,都丢到队列里,求最短路的时候如果当前点\(x\)某个相邻的点\(y\)是 ... 
- luogu P5303 [GXOI/GZOI2019]逼死强迫症
		传送门 只有两行,考虑递推,设\(f_i\)为没有那两个\(1*1\)的,前\(i\)列的方案,可以发现一次可以放一个竖的或两个横的,也就是\(f_i=f_{i-1}+f_{i-2}\) 再设\(g_ ... 
- luogu P5302 [GXOI/GZOI2019]特技飞行
		传送门 强行二合一可还行 首先\(c\)的贡献是不会变的,先考虑求出多少交点被矩形覆盖,交点的话可以按左端点纵坐标从下到上顺序枚举一条线段,然后维护右端点纵坐标的set,把之前处理过线段的右端点放进s ... 
- 题解 P5301 【[GXOI/GZOI2019]宝牌一大堆】
		这道题除了非常恶心以外也没有什么非常让人恶心的地方 当然一定要说有的话还是有的,就是这题和咱 ZJOI 的 mahjong 真的是好像的说~ 于是就想说这道题出题人应该被 锕 掉 noteskey 整 ... 
随机推荐
- KVM系统镜像制作
			使用virt-install创建虚拟机并安装GuestOS virt-install是一个命令行工具,它能够为KVM.Xen或其它支持libvirt API的hypervisor创建虚拟机并完成Gue ... 
- pyqt(day3)
			一.在pycharm中配置qtdesigner C:\Python\Python37\Lib\site-packages\pyqt5_tools\designer.exe 二.ui文件转换成pytho ... 
- dubbo源码分析之过滤器Filter-12
			https://blog.csdn.net/luoyang_java/article/details/86682668 Dubbo 是阿里巴巴开源的一个高性能优秀的服务框架,使得应用可通过高性能的 R ... 
- 微信小程序调用微信支付接口
			本文链接:https://blog.csdn.net/u012667477/article/details/80940578前言:应项目要求,需要使用微信小程序做支付,写完后告知手续费太高方案不予通过 ... 
- Ubuntu命令行下缩小磁盘镜像img文件尺寸
			要解决的问题 一个固件包里的system.img, 尺寸是1GB, 里面的内容只有470MB, 在设备上写入的时候报超出大小了, 所以想把这个img调整为512MB 网上查了很多, 没有一个好用的, ... 
- grpc使用记录(二)简单同步服务实例
			目录 1.编写proto文件,定义服务 2.编译proto文件,生成代码 3.编写服务端代码 server.cpp 代码 编译 4.编写客户端代码 client.cpp代码 5.简单测试一下 已经折腾 ... 
- LocalDate/LocalDateTime/LocalTime与Date的互转
			// 01. java.util.Date --> java.time.LocalDateTime public void UDateToLocalDateTime() { java.util. ... 
- golang几种常用配置文件使用方法总结(yaml、toml、json、xml、ini)
			原文连接: https://blog.csdn.net/wade3015/article/details/83351776 yaml配置文件的使用方法总结 首先介绍使用yaml配置文件,这里使用的是g ... 
- 统计git提交代码量
			# a新增行数,d删除行数 git log --author="`git config --get user.name`" --pretty="%H" --a ... 
- 关于Oracle  to_date函数的高级用法
			由于种种原因,在我们的系统中,账套期间(PERIOD_NAME)由于格式设置的原因,数据库层存储的格式如下 Mar-19,而不是常规的2019-03. 我们无法更改数据库,涉及到的点太多. 但是期间数 ... 
