PAT_A1128
PAT甲级1128.
目录
A1128
题目
样例
输入:
4
8 4 6 8 2 7 1 3 5
9 4 6 7 2 8 1 9 5 3
6 1 5 2 6 4 3
5 1 3 5 2 4
输出:
YES
NO
NO
YES
思路和坑点
思路:
根据题目的描述,判定是否同一行、同一列或者对角线(行列坐标差值相等),由于题目按照每列的顺序给出,所以已经满足不同列的要求,只需判断另外两个条件即可。
AC代码
#include<bits/stdc++.h>
using namespace std;
typedef struct node{ //表示每个棋子的坐标
int x,y;
}Node;
void Judge();
int main(){
#ifdef ONLINE_JUDGE
#else
freopen("1.txt", "r", stdin);
#endif
int n;
scanf("%d",&n);
for(int i=0;i<n;i++) //依次判断n个序列
Judge();
return 0;
}
void Judge()
{
int n;
scanf("%d",&n);
vector<Node> v;
for(int i=1;i<=n;i++){
Node temp;
temp.y=i; //表示列
scanf("%d",&temp.x); //表示行
v.push_back(temp); //读入节点
}
bool flag=true;
for(int i=0;i<n;i++){ //两两进行判定
for(int j=i+1;j<n;j++){
if(v[i].x==v[j].x||v[i].x-v[j].x==v[i].y-v[j].y){
flag=false; break; //因为已知不再同一列,所以只需要判断是否再同一列或者是否对角线(横竖坐标差值相同)
} //如果同行或者同对角线,则判定为否
}
if(flag==false) //判断标记,可以提前退出双重循环
break;
}
puts(flag?"YES":"NO");
}