n皇后问题里要求每行、每列、每条对角线上不能有一个以上的皇后。
用set来看有没有重复的数。这里只测试了从左上到右下的对角线
#include <bits/stdc++.h>
using namespace std;
int main(){
int n1,n2;
scanf("%d",&n1);
for(int i=0;i<n1;i++){
scanf("%d",&n2);
vector<int> arr(n2);
for(int j=0;j<n2;j++){
scanf("%d",&arr[j]);
}
set<int> test(arr.begin(),arr.end());
if(test.size()!=n2){
printf("NO\n");
continue;
}
set<int> cross;
for(int j=0;j<n2;j++){
cross.insert(j+arr[j]);
}
if(cross.size()!=n2){
printf("NO\n");
continue;
}
else printf("YES\n");
}
}