PAT 1128

题目 : N Queens Puzzle

分值 : 20
难度 : 水题
思路 : 其实还简单的,理解出了错
坑点 : 计算 Y = x + k 时 ,考虑一下 k的正负

具体代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
using namespace std;
int flag[2001] ;
int k[2001] ;
bool FLAG =true ;
int main() {
int K ;
cin >> K ;
for(int i = 0 ; i< K ; i++)
{
int N ;
cin >> N ;
FLAG =true ;
for(int i = 0 ; i<=2*N ; i++)
{
flag[i] = 0 ;
k[i] = 0 ;
}
for(int i = 0 ; i < N ; i++)
{
int value ;
cin >> value ;
if(flag[value]) // 这一行已经有人
FLAG = false ;
int temp_k = value - i+N ;
if(k[temp_k])
FLAG =false ;
k[temp_k] = 1 ;
flag[value] =1 ;

}
if(FLAG)
cout <<"YES"<<endl ;
else cout <<"NO"<<endl ;
}

}