站外一本通1191:流感传染 蒟蒻求助
查看原帖
站外一本通1191:流感传染 蒟蒻求助
273056
splendid_followers楼主2021/12/10 13:39

题目

虽然代码有些过于冗杂,不过应该跑得出来 样例过了,输出中间变量后也没问题

代码确实比较费力,但是为什么不过呢(应该是正确的)?

#include<bits/stdc++.h>
using namespace std;
struct b//病人结构体,存储xy 
{
	int x,y;
}
ill[1000][1000];//病人[i][j]表示第i天的第j个病人 
char s[105][105];//宿舍地图 
int is=1;int n;//is表示病人数 
void day(int _day)
{
	int dis=1;//今天感染了几个病人 
	for(int i=1;i<=is;i++)//枚举今天的病人(新增的) 
	{
		if(s[ill[_day][i].x+1][ill[_day][i].y]=='.')//上下左右四个方向是否能被感染 
		{
			s[ill[_day][i].x+1][ill[_day][i].y]='@';//ill[_day][i]表示今天(昨天新增的)的第i个病人,.x表示横轴,+1表示上方,下同理 
			ill[_day+1][dis].x=ill[_day][i].x+1;//存储新病人位置 
			ill[_day+1][dis++].y=ill[_day][i].y;//ill[_day+1][dis]表示今天新增(明天传染别人的)第dis个病人,.x .y表示位置,下同理 
		}
		if(s[ill[_day][i].x-1][ill[_day][i].y]=='.')
		{
			s[ill[_day][i].x-1][ill[_day][i].y]='@';
			ill[_day+1][dis].x=ill[_day][i].x-1;
			ill[_day+1][dis++].y=ill[_day][i].y;
		}
		if(s[ill[_day][i].x][ill[_day][i].y+1]=='.')
		{
			s[ill[_day][i].x][ill[_day][i].y+1]='@';
			ill[_day+1][dis].x=ill[_day][i].x;
			ill[_day+1][dis++].y=ill[_day][i].y+1;
		}
		if(s[ill[_day][i].x][ill[_day][i].y-1]=='.')
		{
			s[ill[_day][i].x][ill[_day][i].y-1]='@';
			ill[_day+1][dis].x=ill[_day][i].x;
			ill[_day+1][dis++].y=ill[_day][i].y-1;
		}//以上同理 
	}
/*	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cout<<s[i][j]<<" ";
		}
		cout<<endl;
	}
	cout<<"--------------"<<endl;*///输出检查 
	is=dis;//传递病人数 
}
int main()
{
	cin>>n;
	int m;
	for(int i=1;i<=n;i++)//读入 
	{
		for(int j=1;j<=n;j++)
		{
			cin>>s[i][j];
			if(s[i][j]=='@')
			{
				ill[2][is].x=i;ill[2][is++].y=j;//存储病人xy 
			}
		}
	}
	cin>>m;
	for(int i=2;i<=m;i++)
	{
		day(i);
	}//模拟2-m天 
	int sum;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(s[i][j]=='@')
			{
				sum++;
			}
		}
	}//求有多少病人(@) 
	cout<<sum;
}
2021/12/10 13:39
加载中...