codeforces 1186E- Vus the Cossack and a Field
传送门:QAQQAQ
题意:给一个01矩阵A,他的相反矩阵为B,每一次变换都会将原矩阵面积乘4成为:
AB
BA
矩阵的左上角固定,变换无限次,现有q个询问,即求一个矩阵内的1的个数。
思路:因为反转,所以A,B矩阵拼起来刚好是一个全都为1的矩阵,所以答案就是匹配的A,B矩阵总点数/2和右下角1的个数之和
注意点:
1.因为数据较大,要用前缀和思想
2.要开longlong
3.注意询问时各个变量的重置
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
int A[][],B[][],a[][],b[][];
int sa[][],sb[][];
ll n,m,q,t[];
void init()
{
t[]=;
for(int i=;i<=;i++) t[i]=t[i-]*;
memset(sa,,sizeof(sa));
memset(sb,,sizeof(sb));
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
sa[i][j]=sa[i-][j]+sa[i][j-]-sa[i-][j-]+A[i][j];
sb[i][j]=sb[i-][j]+sb[i][j-]-sb[i-][j-]+B[i][j];
}
}
}
int s=;
void judge(ll x)//even->A odd->B
{
for(int i=;i>=;i--)
{
if(t[i]<x) x-=t[i],s++;
}
}
ll solve(ll x,ll y)
{
s=;
ll ret=;
if(x==||y==) return ;
ret+=(x*y-(x%(*n))*(y%(*m)))/;//n,m写错
ll xx=x-x%(*n)+;
ll yy=y-y%(*m)+;
ll tx=(xx-)/n+;
ll ty=(yy-)/m+;
judge(tx); judge(ty);
ll dx=x-xx+,dy=y-yy+;
if(s%==)
{
if(dx<=n&&dy<=m) ret+=sb[dx][dy];
if(dx<=n&&dy>m) ret+=sa[dx][dy-m]+sb[dx][m];
if(dx>n&&dy<=m) ret+=sb[n][dy]+sa[dx-n][dy];
if(dx>n&&dy>m) ret+=sb[n][m]+sa[n][dy-m]+sa[dx-n][m]+sb[dx-n][dy-m];
}
else
{
if(dx<=n&&dy<=m) ret+=sa[dx][dy];
if(dx<=n&&dy>m) ret+=sb[dx][dy-m]+sa[dx][m];
if(dx>n&&dy<=m) ret+=sa[n][dy]+sb[dx-n][dy];
if(dx>n&&dy>m) ret+=sa[n][m]+sb[n][dy-m]+sb[dx-n][m]+sa[dx-n][dy-m];
}
return ret;
}
int main()
{
scanf("%lld%lld%lld",&n,&m,&q);
for(int i=;i<=n;i++)
{
char str[];
scanf("%s",str+);
for(int j=;j<=m;j++)
{
A[i][j]=str[j]-'';
B[i][j]=(str[j]-'')^;
}
}
init();
while(q--)
{
ll x1,y1,x2,y2;//开ll
scanf("%lld%lld%lld%lld",&x1,&y1,&x2,&y2);//s不在这里重置
ll ans=solve(x2,y2)-solve(x1-,y2)-solve(x2,y1-)+solve(x1-,y1-);
printf("%lld\n",ans);
}
}
codeforces 1186E- Vus the Cossack and a Field的更多相关文章
- E. Vus the Cossack and a Field (求一有规律矩形区域值) (有一结论待证)
E. Vus the Cossack and a Field (求一有规律矩形区域值) 题意:给出一个原01矩阵,它按照以下规则拓展:向右和下拓展一个相同大小的 0 1 分别和原矩阵对应位置相反的矩阵 ...
- Codeforces F. Vus the Cossack and Numbers(贪心)
题目描述: D. Vus the Cossack and Numbers Vus the Cossack has nn real numbers aiai. It is known that the ...
- 『Codeforces 1186E 』Vus the Cossack and a Field (性质+大力讨论)
Description 给出一个$n\times m$的$01$矩阵$A$. 记矩阵$X$每一个元素取反以后的矩阵为$X'$,(每一个cell 都01倒置) 定义对$n \times m$的矩阵$A$ ...
- codeforces 1186C Vus the Cossack and Strings
题目链接:https://codeforc.es/contest/1186/problem/C 题目大意:xxxxx(自认为讲不清.for instance) 例如:a="01100010& ...
- Codeforces 1186F - Vus the Cossack and a Graph 模拟乱搞/欧拉回路
题意:给你一张无向图,要求对这张图进行删边操作,要求删边之后的图的总边数 >= ceil((n + m) / 2), 每个点的度数 >= ceil(deg[i] / 2).(deg[i]是 ...
- @codeforces - 1186F@ Vus the Cossack and a Graph
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个 n 点 m 边的图(n, m<=10^6),记第 ...
- CodeForces - 1186 C. Vus the Cossack and Strings (异或)
Vus the Cossack has two binary strings, that is, strings that consist only of "0" and &quo ...
- Vus the Cossack and Strings(Codeforces Round #571 (Div. 2))(大佬的位运算实在是太强了!)
C. Vus the Cossack and Strings Vus the Cossack has two binary strings, that is, strings that consist ...
- Codeforces Round #571 (Div. 2)-D. Vus the Cossack and Numbers
Vus the Cossack has nn real numbers aiai. It is known that the sum of all numbers is equal to 00. He ...
随机推荐
- USACO2005 City Skyline /// oj23401
题目大意: Input * Line 1: Two space separated integers: N and W * Lines 2..N+1: Two space separated inte ...
- Nginx配置web服务
Nginx配置虚拟主机 虚拟主机概述 所谓虚拟主机,在web服务里就是一个独立的网站站点,这个站点对应独立的域名(也可以是IP或者端口),具有独立的程序及资源目录,可以独立的对外提供服务,继而给用户访 ...
- js只能输入数字和小数点
1.文本框只能输入数字代码(小数点也不能输入)<input onkeyup="this.value=this.value.replace(/\D/g,'')" onafter ...
- abstract类中method
一.abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 都不可以,因为abstract申明的方法是要求子类去实现的,abstrac ...
- MD5/SHA1/Hmac_SHA1
1.MD5 #import <CommonCrypto/CommonDigest.h> + (NSString *) md5:(NSString *) input { const char ...
- apache的目录浏览功能 列出的文件名不完整,能否修改设置
在httpd.conf 和 httpd-vhosts.conf中的 <Directory ????> </Directory>如下设置,重启apache即可: <Dir ...
- mac下xampp+vscode进行php程序调试
最近折腾公司的官网,是 php 做的,搭建调试环境做个记录,我用的是 mac 机. 1.下载最新的xampp,我的版本是XAMPP for OS X 5.6.31: 2.找到 php.ini,/App ...
- Android开发 navigation入门详解
前言 Google 在2018年推出了 Android Jetpack,在Jetpack里有一种管理fragment的新架构模式,那就是navigation. 字面意思是导航,但是除了做APP引导页面 ...
- ubuntu下安装git提示无root权限
apt-get install git 获取git指令 sudo passwd root 重置unix密码 su root 键入密码 参考链接 https://www.cnblogs.com/2she ...
- LUOGU P2290 [HNOI2004]树的计数(组合数,prufer序)
传送门 解题思路 \(prufer\)序,就是所有的不同的无根树,都可以转化为唯一的序列.做法就是每次从度数为\(1\)的点中选出一个字典序最小的,把这个点删掉,并把这个点相连的节点加入序列,直到只剩 ...