方阵检测
题目描述
昨天,小睿的数学作业很多,因此他没有时间去温习英语课的单词表。不幸的是,英语老师决定在今天的课上进行一场单词小测。测试中,发下的试卷是正方形的,由许多小格子组成,共有 n 行 n 列(n 是奇数),每个单位的小格子都包含一个英文字母。
小睿需要知道试卷上的小字母是否会组成一个大写字母 X的形状。小睿的老师认为试卷上的字母会构成 X,当且仅当:
1、所有对角线上的格子所包含的字母必须一致。
2、其他所有格子(不在对角线上的),也必须由相同的字母所组成,且这个字母不能与对角线上的字母相同。
请你按照题面描述,编程帮小睿解决这个问题。
输入格式
第一行包含一个整数 n (3≤n≤300,n 是奇数)
接下来的 n 行,每行包含 n 个英文字母,如题面描述。
输出格式
如果试卷上的字母能构成 X,输出字符串 YES;如果不能,则输出字符串 NO。
样例 #1
样例输入 #1
5
xooox
oxoxo
soxoo
oxoxo
xooox
样例输出 #1
NO
样例 #2
样例输入 #2
3
wsw
sws
wsw
样例输出 #2
YES
样例 #3
样例输入 #3
3
xpx
pxp
xpe
样例输出 #3
NO
提示
【输入输出样例说明】
第一个样例中,不在对角线上的字母不是由相同字母组成,不构成 X。
第二个样例构成 X。
第三个样例中,对角线上的字母不是由相同字母组成,不构成 X。
#include<bits/stdc++.h>
using namespace std;
char arr[310][310];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>arr[i][j];
}
}
int n1=1,n2=n;
char a=arr[1][1];
char b=arr[1][2];
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(n1==j || n2==j){
if(a==arr[i][j]){
if(n1==j){
if(i<=n/2+1){
n1++;
}else{
n1--;
}
}else{
if(i<=n/2+1){
n2--;
}else{
n2++;
}
}
}else{
cout<<"NO";
return 0;
}
}else{
if(arr[i][j]==b){
}else{
cout<<"NO";
return 0;
}
}
}
}
cout<<"YES";
return 0;
}