可做题1(Code+第二次网络赛)
来源:互联网 发布:网络犯罪举报中心 编辑:程序博客网 时间:2024/05/21 08:37
题目背景
“codeplus比赛的时候在做什么?有没有空?能来解决停机问题吗?”qmqmqm这样问sublinekelzrip。
当然,sublinekelzrip并不会停机问题,所以qmqmqm改为提出了另一个题目,现在请你帮助sublinekelzrip解决这个题目。
题目描述
这个问题是这样的:
对于任何一个
现在有一个
输入格式
从标准输入读入数据。
输入第一行包含三个正整数
之后
之后
输出格式
输出到标准输出。
输出包含Y
或者N
。Y
表示被询问的方阵是巧妙的,N
表示不是。
样例1输入
3 3 41 1 11 1 11 1 21 1 21 1 32 2 22 1 2
样例1输出
YNNY
子任务
对于所有的数据,
分析:
这道题和之前hu测的T2有点像
通过手玩,我们可以发现:
一个合法的大矩阵中任意一个子矩阵都满足条件
实际上我们也可以把一个大矩阵拆成若干个2*2的小矩阵
判断每个小矩阵是否符合条件
暴力判断即可
//这里写代码片#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int N=505;int a[N][N],n,m,Q,x,y,nn;int solve(int x,int y,int n){ for (int i=x;i<x+n-1;i++) for (int j=y;j<y+n-1;j++) if (a[i][j]+a[i+1][j+1]!=a[i][j+1]+a[i+1][j]) return 0; return 1;}int main(){ memset(sum,0,sizeof(sum)); scanf("%d%d%d",&n,&m,&Q); for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) { int x; scanf("%d",&a[i][j]); sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+x; } for (int i=1;i<=Q;i++) { scanf("%d%d%d",&x,&y,&nn); if (solve(x,y,nn)) printf("Y\n"); else printf("N\n"); } return 0;}
阅读全文