站外题求解
  • 板块灌水区
  • 楼主tt12341234
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/25 19:13
  • 上次更新2024/10/25 19:21:53
查看原帖
站外题求解
1291771
tt12341234楼主2024/10/25 19:13

方阵检测

题目描述

昨天,小睿的数学作业很多,因此他没有时间去温习英语课的单词表。不幸的是,英语老师决定在今天的课上进行一场单词小测。测试中,发下的试卷是正方形的,由许多小格子组成,共有 nnnn 列(nn 是奇数),每个单位的小格子都包含一个英文字母。

小睿需要知道试卷上的小字母是否会组成一个大写字母 X的形状。小睿的老师认为试卷上的字母会构成 X,当且仅当: 1、所有对角线上的格子所包含的字母必须一致。

2、其他所有格子(不在对角线上的),也必须由相同的字母所组成,且这个字母不能与对角线上的字母相同。

请你按照题面描述,编程帮小睿解决这个问题。

输入格式

第一行包含一个整数 nn3n3003 \le n \le 300nn 是奇数)

接下来的 nn 行,每行包含 nn 个英文字母,如题面描述。

输出格式

如果试卷上的字母能构成 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;
}

2024/10/25 19:13
加载中...