分析:
找出其中一行或列或任意对角线被全部标记,即可输出回合数,否则输出-1
如果x%n=0,行是x/n,列是n
如果x%n!=0,行是x/n+1,列是x%n
如果行=列或行+列=n+1即为对角线。
标记行列对角线,当其中一行或列或任意对角线被全部标记,即输出。
#include<bits/stdc++.h>
using namespace std;
const int N=2e3+10;
int hang[N]={0},lie[N]={0};
//xx为撇 xxx为捺
int main() {
int n,t,c,xx=0,xxx=0,x;cin>>n>>t;int f=-1;
for(int i=1;i<=t;i++){
cin>>x;
if(x%n==0){
hang[x/n]++;
lie[n]++;
if(x/n==n)xxx++;
if(x/n==1)xx++;
if((hang[x/n]==n||lie[n]==n||xx==n||xxx==n)&&f==-1)f=i;
}
else{
hang[x/n+1]++;
lie[x%n]++;
if(x/n+1==x%n)xxx++;
if(x/n+1+x%n==n+1)xx++;
if((hang[x/n+1]==n||lie[x%n]==n||xx==n||xxx==n)&&f==-1)f=i;
}
}
cout<<f<<endl;
return 0;
}