求助! 90分 第二个点WA了
  • 板块P1141 01迷宫
  • 楼主up_p
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/10/8 21:20
  • 上次更新2024/10/8 23:46:12
查看原帖
求助! 90分 第二个点WA了
1029919
up_p楼主2024/10/8 21:20
#include<bits/stdc++.h>
//#define int long long
#define inf LONG_LONG_MAX
#define endl '\n'
#define ls(t) (t<<1)
#define rs(t) (t<<1|1)
using namespace std;
inline int read(){
	int x=1,sum=0;
	char ch;
	ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-'){
			x=-1;
		}
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		sum=(sum<<3)+(sum<<1)+(ch^48);
		ch=getchar();
	}
	return x*sum;
}
int n,m,x,y,sum,t,su[100105],dp[1015][1015];
char c;
bool vis[1015][1015];
int a[1015][1015];
int dx[6]={0,1,-1,0,0};
int dy[6]={0,0,0,1,-1};
bool check(int x,int y){
	return (x>=1&&x<=n&&y>=1&&y<=n&&(vis[x][y]==0));
}
void summ(int x,int y,int k){
	sum++;
	vis[x][y]=1;
	dp[x][y]=k;
	for(int i=1;i<=4;i++){
		int xx=x+dx[i],yy=y+dy[i];
		if((check(xx,yy)==1)&&((a[xx][yy]^a[x][y])==1)){
			summ(xx,yy,k);
		}
	}
}
signed main(){
	memset(dp,0,sizeof(dp));
	memset(vis,0,sizeof(vis));
	n=read();m=read();
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>c;
			a[i][j]=c-'0';
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(dp[i][j]==0){
				t++;
				summ(i,j,t);
				su[t]=sum;
				sum=0;
			}
		}
	}
	for(int i=1;i<=m;i++){
		x=read();y=read();
		cout<<su[dp[x][y]]<<endl;
	}
	return 0;
}
2024/10/8 21:20
加载中...