ABC355 Bingo2

分析:

找出其中一行或列或任意对角线被全部标记,即可输出回合数,否则输出-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;
}

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值