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 ...
随机推荐
- USACO 2009 Open Cow Line /// 队列 oj26220
题目大意: 输入n,n次操作 操作A:在L(左边)或R(右边)插入一个递增的数 操作D:在L(左边)或R(右边)删除m个数 Sample Input 10A LA LA RA LD R 2A RA R ...
- 2019-3-20-win10-uwp-如何自定义-RichTextBlock-右键菜单
title author date CreateTime categories win10 uwp 如何自定义 RichTextBlock 右键菜单 lindexi 2019-3-20 9:54:9 ...
- js隐式类型转换,预编译、递归、作用域,作用域链、闭包、立即执行函数、继承圣杯模式
隐式类型转换 调用Number()当有运算符(加减乘除,求余)时,会调用Number()转为数字再运算,除了 加 当 有字符串时就变身成拼接Boolean();String(); typeof()st ...
- css---flex布局--容器
http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool 容器设置 新版的为display为flex ...
- scala中Tuple简单使用
/** * Tuple简单使用记录 * 最大22个参数 */ object TupleUse { def main(args: Array[String]): Unit = { // 简单Tuple ...
- JQUERY 效果 遍历 事件
效果 隐藏与显示 hide() 和 show() 淡入淡出 fadeIn(speed,callback).fadeOut(speed,callback). fadeToggle() 方法可以在 f ...
- 【转载】Delphi异常处理try except语句和try finally语句用法以及区别
Delphi异常处理try except语句和try finally语句用法以及区别 一直写程序都没管他们,也尽量很少用,今天终于想把他给弄个明白,在网上找来,记下!主要是前面小部分,后面的是详细说明 ...
- 尚学python课程---11、linux环境下安装python注意
尚学python课程---11.linux环境下安装python注意 一.总结 一句话总结: 准备安装依赖包:zlib.openssl:yum install zlib* openssl*:pytho ...
- VS2010-MFC(对话框:一般属性页对话框的创建及显示)
转自:http://www.jizhuomi.com/software/169.html 属性页对话框包括向导对话框和一般属性页对话框两类,上一节演示了如何创建并显示向导对话框,本节将继续介绍一般属性 ...
- Java笔记 - GUI编程
一.图形界面开发 1.AWT开发 AWT(Abstract Window Toolkit)在Windows.Linux提供的图形窗口之上,再次进行了抽象,为不同语言开发的程序提供统一定义的图形接口,可 ...