大致题意就是给出包含N个元素的序列,判断其是否是N皇后的解。
已知每个坐标(x,f(x))的横坐标x不同,只需比较
1,列坐标是否相同f(x)(f(x1) - f(x2) == 0)。
2,两个坐标是否在同一对角线上(x1-x2 == |f(x1)-f(x2)|)。
满足1或2都不是解。
1 #include<iostream> 2 #include<algorithm> 3 #include<vector> 4 using namespace std; 5 6 int main() { 7 int k,n; 8 cin>>k; 9 while(k--) { 10 cin>>n; 11 vector<int> v(n+1); 12 int flag = 1; 13 for(int i = 1; i <= n; ++i) 14 cin>>v[i]; 15 for(int i = 1; i <= n&&flag; ++i) { 16 for(int j = i+1; j <= n&&flag; ++j) 17 if(j-i == abs(v[i]-v[j]) || v[i]-v[j] == 0) flag = 0; 18 } 19 if(flag) printf("YES\n"); 20 else printf("NO\n"); 21 } 22 return 0; 23 }