【题意】定义一个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的更多相关文章

  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 ...

  2. 「CodePlus 2017 12 月赛」可做题2(矩阵快速幂+exgcd+二分)

    昨天这题死活调不出来结果是一个地方没取模,凉凉. 首先有个一眼就能看出来的规律... 斐波那契数列满足$a_1, a_2, a_1+a_2, a_1+2a_2, 2a_1+3a_2, 3a_1+5a_ ...

  3. 「CodePlus 2017 11 月赛」可做题

    这种题先二进制拆位,显然改的位置只有每一段确定的数的开头和结尾,只需要对于每一个可决策位置都尝试一下填1和0,然后取min即可. #include<iostream> #include&l ...

  4. [LOJ#6259]「CodePlus 2017 12 月赛」白金元首与独舞

    [LOJ#6259]「CodePlus 2017 12 月赛」白金元首与独舞 试题描述 到河北省 见斯大林 / 在月光下 你的背影 / 让我们一起跳舞吧 うそだよ~ 河北省怎么可能有 Stalin. ...

  5. 【LibreOJ】#6259. 「CodePlus 2017 12 月赛」白金元首与独舞

    [题目]给定n行m列的矩阵,每个位置有一个指示方向(上下左右)或没有指示方向(任意选择),要求给未定格(没有指示方向的位置)确定方向,使得从任意一个开始走都可以都出矩阵,求方案数.n,m<=20 ...

  6. 「CodePlus 2017 12 月赛」火锅盛宴(模拟+树状数组)

    1A,拿来练手的好题 用一个优先队列按煮熟时间从小到大排序,被煮熟了就弹出来. 用n个vector维护每种食物的煮熟时间,显然是有序的. 用树状数组维护每种煮熟食物的数量. 每次操作前把优先队列里煮熟 ...

  7. 「CodePlus 2017 12 月赛」白金元首与独舞

    description 题面 data range \[ 1 \leq T \leq 10, 1 \leq n, m \leq 200 , 0 \leq k \leq \min(nm, 300)\] ...

  8. 走进矩阵树定理--「CodePlus 2017 12 月赛」白金元首与独舞

    n,m<=200,n*m的方阵,有ULRD表示在这个格子时下一步要走到哪里,有一些待决策的格子用.表示,可以填ULRD任意一个,问有多少种填法使得从每个格子出发都能走出这个方阵,答案取模.保证未 ...

  9. 「CodePlus 2017 12 月赛」火锅盛宴

    n<=100000种食物,给每个食物煮熟时间,有q<=500000个操作:在某时刻插入某个食物:查询熟食中编号最小的并删除之:查询是否有编号为id的食物,如果有查询是否有编号为id的熟食, ...

随机推荐

  1. C++ Primer Plus学习:第五章

    C++入门第五章:循环和关系表达式 for循环 for循环的组成部分 设置初始值. 执行测试,看循环是否应该继续执行. 执行循环操作. 更新用于测试的值. 以上操作由括号括起,每个部分均是一个表达式, ...

  2. HashMap和HashTable源码分析

    HashMap HashMap是一个实现了Map接口的Hash表.提供所有Map的操作,并且允许null key和null value.HashMap几乎等同于HashTable,只不过HashMap ...

  3. n元一维向量向左循环移位i的几种算法

    1.最简单的算法借助于一个n元的中间向量在n步时间内完成 时间复杂度:O(n)  空间复杂度O(n) void shift_easy(int arr[], int _arr[], int n, int ...

  4. 操纵Excel文件的 ExcelUtil 类 !

    package FileDemo1; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStr ...

  5. Spring Cloud构建微服务架构

    Dalston版本 由于Brixton和Camden版本的教程已经停止更新,所以笔者计划在2017年上半年完成Dalston版本的教程编写(原计划完成Camden版本教程,但由于写了两篇Dalston ...

  6. 【转】ssh登录原理以及ssh免密码登陆

    一.什么是SSH? 简单说,SSH是一种网络协议,用于计算机之间的加密登录. 如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会 ...

  7. 洛谷 P1865 A % B Problem

    题目戳 题目背景 题目名称是吸引你点进来的 实际上该题还是很水的 题目描述 区间质数个数 输入输出格式 输入格式: 一行两个整数 询问次数n,范围m 接下来n行,每行两个整数 l,r 表示区间 输出格 ...

  8. 表单验证2-JS正则

    1. JS正则:   以/开头,以/结尾. test作用:到里面去找,只要里面有,就返回true:否则就返回false. 例如:rep=/\d+/; 检验里面是否有数字. 2.rep=/^  $/;  ...

  9. 【JavaScript】函数表达式

    一.前言        接着上一篇的内容,继续学习JavaScript. 二.内容       函数的声明 function functionName(arg0,arg1,arg2){ //函数体 } ...

  10. 【BZOJ1065】【NOI2008】奥运物流(动态规划)

    [BZOJ1065][NOI2008]奥运物流(动态规划) 题面 BZOJ 洛谷 题解 先不考虑环的情况,于是变成了一棵树. 这样子我们答案的贡献是\(\sum_{i=1}^nC_i\times k^ ...