【LIbreOJ】#6256. 「CodePlus 2017 12 月赛」可做题1
【题意】定义一个n阶正方形矩阵为“巧妙的”当且仅当:任意选择其中n个不同行列的数字之和相同。
给定n*m的矩阵,T次询问以(x,y)为左上角的k阶矩阵是否巧妙。n,m<=500,T<=10^5。
【算法】数学
【题解】
可以证明每个矩阵是巧妙的当且仅当其每个2阶子矩阵均是巧妙的:
必要性:若该矩阵有一个不巧妙的2阶子矩阵,则其他部分选择相同的情况下(不涉及此两行列),这两行列的和不同,所以该矩阵不是巧妙的。
观察一个巧妙的2阶子矩阵
a1 a2
b1 b2
由a1+b2=a2+b1,可得
a2-a1=b2-b1(列间差分相等)
b1-a1=b2-a2(行间差分相等)
充分性:若该矩阵每个2阶子矩阵都是巧妙的,则其行差分的列差分均为0(行差分相等和列差分相等)。
重定义每个数字为Mij=ai+bj,表示A(i,j)和A(i-1,j-1)的列差分和行差分分别为ai和bj,这样的矩阵不论如何选择排列,和均为Σai+Σbj,1<=i,j<=k,所以该矩阵是巧妙的。
维护二维前缀和即可。
#include<cstdio>
#define rep(i,j,k) for(int i=j;i<=k;i++)
int a[][],f[][],n,m,T,x,y,k;
int main(){
scanf("%d%d%d",&n,&m,&T);
rep(i,,n)rep(j,,m)scanf("%d",&a[i][j]);
rep(i,,n-)rep(j,,m-)f[i][j]=f[i][j-]+(a[i][j]+a[i+][j+]!=a[i+][j]+a[i][j+]);
rep(i,,n-)rep(j,,m-)f[i][j]+=f[i-][j];
while(T--){
scanf("%d%d%d",&x,&y,&k);
if(f[x+k-][y+k-]-f[x-][y+k-]-f[x+k-][y-]+f[x-][y-]>)puts("N");else puts("Y");
}
}
【LIbreOJ】#6256. 「CodePlus 2017 12 月赛」可做题1的更多相关文章
- 【LibreOJ】#6257. 「CodePlus 2017 12 月赛」可做题2
[题意]数列满足an=an-1+an-2,n>=3.现在a1=i,a2=[l,r],要求满足ak%p=m的整数a2有多少个.10^18. [算法]数论(扩欧)+矩阵快速幂 [题解]定义fib(i ...
- 「CodePlus 2017 12 月赛」可做题2(矩阵快速幂+exgcd+二分)
昨天这题死活调不出来结果是一个地方没取模,凉凉. 首先有个一眼就能看出来的规律... 斐波那契数列满足$a_1, a_2, a_1+a_2, a_1+2a_2, 2a_1+3a_2, 3a_1+5a_ ...
- 「CodePlus 2017 11 月赛」可做题
这种题先二进制拆位,显然改的位置只有每一段确定的数的开头和结尾,只需要对于每一个可决策位置都尝试一下填1和0,然后取min即可. #include<iostream> #include&l ...
- [LOJ#6259]「CodePlus 2017 12 月赛」白金元首与独舞
[LOJ#6259]「CodePlus 2017 12 月赛」白金元首与独舞 试题描述 到河北省 见斯大林 / 在月光下 你的背影 / 让我们一起跳舞吧 うそだよ~ 河北省怎么可能有 Stalin. ...
- 【LibreOJ】#6259. 「CodePlus 2017 12 月赛」白金元首与独舞
[题目]给定n行m列的矩阵,每个位置有一个指示方向(上下左右)或没有指示方向(任意选择),要求给未定格(没有指示方向的位置)确定方向,使得从任意一个开始走都可以都出矩阵,求方案数.n,m<=20 ...
- 「CodePlus 2017 12 月赛」火锅盛宴(模拟+树状数组)
1A,拿来练手的好题 用一个优先队列按煮熟时间从小到大排序,被煮熟了就弹出来. 用n个vector维护每种食物的煮熟时间,显然是有序的. 用树状数组维护每种煮熟食物的数量. 每次操作前把优先队列里煮熟 ...
- 「CodePlus 2017 12 月赛」白金元首与独舞
description 题面 data range \[ 1 \leq T \leq 10, 1 \leq n, m \leq 200 , 0 \leq k \leq \min(nm, 300)\] ...
- 走进矩阵树定理--「CodePlus 2017 12 月赛」白金元首与独舞
n,m<=200,n*m的方阵,有ULRD表示在这个格子时下一步要走到哪里,有一些待决策的格子用.表示,可以填ULRD任意一个,问有多少种填法使得从每个格子出发都能走出这个方阵,答案取模.保证未 ...
- 「CodePlus 2017 12 月赛」火锅盛宴
n<=100000种食物,给每个食物煮熟时间,有q<=500000个操作:在某时刻插入某个食物:查询熟食中编号最小的并删除之:查询是否有编号为id的食物,如果有查询是否有编号为id的熟食, ...
随机推荐
- CCF——相邻数对201409-1
问题描述 给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1. 输入格式 输入的第一行包含一个整数n,表示给定整数的个数. 第二行包含所给定的n个整数. 输出格式 输出一个整数,表示值正好 ...
- 【BioCode】根据seq与位点信息截取窗口
代码说明 sequence24371.txt 以上为所有氨基酸的编号,序列,与位点标记.根据标记为“1”的位点,截取窗口:如下(实验结果): 图示为一个窗口为12的蛋白质片段 2N+1=25: 实现代 ...
- [ Selenium2 从零开始 by Bruce from http://seleniumcn.cn ] 1-8 视频集锦
内容转自: http://blog.csdn.net/sxl0727tu/article/details/51887093\ ************************************* ...
- SSH框架配置
--------------------------------applicationContext.xml-------------------------------- <?xml vers ...
- [Google] 看雪论坛: 安卓碎片化的情况
2018年10月28日早间消息,谷歌方面发布了Android各版本的最新份额数据,截止到10月26日.即便是已经推出3个月了,Android 9 Pie系统的用户数仍旧没有超过0.1%,导致未出现在榜 ...
- java内存加载机制
什么是java类加载? 类加载是指将.class类中的二进制数据存放到内存中,会在内存中的推中建立一个java.lang.String的引用对象来存放方法区的数据结构,而类中的数据会放到方法区中 类加 ...
- es6中对象转数组,转map
//对象转数组let array = Object.keys(userPermission).map(key=> userPermission[key]) console.log(array) ...
- iOS 监听键盘高度,输入框上升
//设置输入框 ---<因为输入框用了get方法,所以第一次调用输入框要用self 调用>: self.textlab.frame=CGRectMake(, , , ); _textlab ...
- 【bzoj3456】城市规划 容斥原理+NTT+多项式求逆
题目描述 求出n个点的简单(无重边无自环)无向连通图数目mod 1004535809(479 * 2 ^ 21 + 1). 输入 仅一行一个整数n(<=130000) 输出 仅一行一个整数, 为 ...
- 两个list比较相等元素
1.实现方式 public class list { public static void main(String[] args) { List<String> list1 = new A ...