求调bug
  • 板块学术版
  • 楼主是蜘猪吖
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/10/24 16:13
  • 上次更新2024/10/24 18:30:58
查看原帖
求调bug
500440
是蜘猪吖楼主2024/10/24 16:13

这份代码样例都过了,但是只有40分,大佬们看看有啥bug

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int n, m, q, r, k;
int a, b, c, d, t, x, y;
int mp[3005][3005];//0陆地,1湖泊,2湖泊周围(必定无限存活)
int f[3005][3005];//是否无限存活
int dix[]= {1, -1, 0, 0};
int diy[]= {0, 0, 1, -1};
int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	cin>>n>>m>>q>>r>>k;
	while(q--)
	{
		cin>>a>>b>>c>>d;
		for(int i=a; i<=c; i++)
			for(int j=b; j<=d; j++)
				mp[i][j]=1;
	}
	for(int i=1; i<=n; i++)
	{
		for(int j=1; j<=m; j++)
		{
			if(mp[i][j]==0)
			{
				int cnt=0;
				for(int k=0; k<4; k++)
				{
					int tx=i+dix[k];
					int ty=j+diy[k];
					if(tx<1||tx>n||ty<1||ty>m)continue;
					if(mp[tx][ty]==1)cnt++;
				}
				if(cnt)mp[i][j]=2;//是湖泊周围点
			}
		}
	}
	while(r--)
	{
		cin>>t>>x>>y;
		if(f[x][y]==0x3f3f3f3f)continue;//已经无限存活,可跳过
		queue<pair<int, int>>q;
		f[x][y]=t;
		q.push({x, y});
		while(!q.empty())//生长周围点,仅湖泊周围的点可生长
		{
			pair<int, int> now=q.front();
			q.pop();
			for(int i=0; i<4; i++)
			{
				int tx=now.first+dix[i];
				int ty=now.second+diy[i];
				if(tx<1||tx>n||ty<1||ty>m)continue;
				if(mp[tx][ty]!=2)continue;
				if(f[tx][ty]==0x3f3f3f3f)continue;
				f[tx][ty]=0x3f3f3f3f;
				q.push({tx, ty});
			}
		}
		bool flag=false;
		for(int i=0; i<4; i++)//周围是否存在可无限存在点
		{
			int tx=x+dix[i];
			int ty=y+diy[i];
			if(tx<1||tx>n||ty<1||ty>m)continue;
			if(f[tx][ty]>0 && f[tx][ty]+k>=f[x][y])//种过时间间隔k以内的相邻点,这两个会无限生存
			{
				f[tx][ty]=0x3f3f3f3f;
				flag=true;//可以存活
			}
		}
		if(flag)f[x][y]=0x3f3f3f3f;
	}
	int ans=0;
	for(int i=1; i<=n; i++)
	{
		for(int j=1; j<=m; j++)
		{
			ans+=f[i][j]==0x3f3f3f3f;
//			cout<<(f[i][j]==0x3f3f3f3f)<<" \n"[j==m];
		}
	}
	cout<<ans;
	return 0;
}
2024/10/24 16:13
加载中...