AT_abc355_c [ABC355C] Bingo 2 题解

题目链接

给出数字,我们可以得出数字所在的行和列。接下来开两个一维数组表示某一行、某一列出现了多少个数字,开两个变量表示两条斜线出现了多少个数字。每次输入数字时把它所在的行和列都 \(+1\)。再判断如果在斜线上,所在斜线 \(+1\)。加完之后判断是否满足某行某列或某斜线出现数字 \(=n\),如果满足就直接输出 \(i\)return 0

#include<iostream>
#include<cstdio>
using namespace std;
const int N=2e3+100;
int n,t,a,cx[N],cy[N],dg1,dg2,x,y;
int main()
{
	scanf("%d%d",&n,&t);
	for(int i=1;i<=t;i++)
	{
		scanf("%d",&a);
		x=(a-1)/n+1,y=a%n;
		if(!y) y=n;
		//printf("%d %d\n",x,y);
		cx[x]++,cy[y]++;
		if(x==y) dg1++;
		if(x+y==n+1) dg2++;
		if(cx[x]==n||cy[y]==n||dg1==n||dg2==n) 
		{
			printf("%d",i);
			return 0;
		}
	}
	printf("-1");
	return 0;
}
posted @ 2024-08-12 11:07  MinimumSpanningTree  阅读(12)  评论(0)    收藏  举报