#include<bits/stdc++.h>
using namespace std;
int main(){
int n,k;
set<int>num;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&k);
vector<int> vv(k+1);
num.clear();//set忘记条件重置crt 计数变量
for(int j=1;j<=k;j++){
scanf("%d",&vv[j]);
num.insert(vv[j]);
}
if(num.size()!=k) {
printf("NO\n");
continue;
}
int flag=1;
for(int q=1;q<=k;q++){
for(int rr=q+1;rr<=k;rr++){
if(q+vv[q]==rr+vv[rr]){//添加查看可以直接把它画出来直接点添加查看
printf("NO\n");
flag=0;
break;
}
}
if(flag==0){
break;
}
}
if(flag==1){
printf("YES\n");
}
}
return 0;
}
总结
1.n皇后问题简化版,本题只需要判断不同行,与不同斜边即可(这里我只判断了反斜边的情况居然也能通过) 正确的斜边判断条件应该是abs(v[i]-v[j])=abs(i-j)//行差等于列差
英语
问题 看一下具体的n皇后实现