首页 > 其他分享 >信息学奥赛1191

信息学奥赛1191

时间:2024-09-10 15:35:15浏览次数:6  
标签:信息学 1191 cin 越界 int 奥赛

#include <iostream>
using namespace std;

int main()
{
	int n,m,count=0;
	
	cin >> n;
	// n*n矩阵,向四周传染,为避免越界,创建数组时四周各向外扩一行
	char x[n+2][n+2];
	
	// 数据只填充在内部的n行、列中,最外围只为了避免越界
	for(int i=1;i<n+1;i++)
	{
		for(int j=1;j<n+1;j++) cin >> x[i][j];
	}
	
	cin >> m;
	
	// m天后,实际应该传染了m-1天
	for(int i=0;i<m-1;i++)
	{
		// 将得流感人员(@)周边的入住人员标记为被感染(!)
		// 先标记,不直接设定为传染人员@,不然会导致后面的遍历出错
		for(int i=1;i<n+1;i++)
		{
			for(int j=1;j<n+1;j++)
			{
				if(x[i][j]=='@')
				{
					if(x[i-1][j]=='.') x[i-1][j]='!';
					if(x[i][j-1]=='.') x[i][j-1]='!';
					if(x[i][j+1]=='.') x[i][j+1]='!';
					if(x[i+1][j]=='.') x[i+1][j]='!';
				}
			}
		}
		// 更新情况,将被感染人员标记为得流感人员@
		for(int i=1;i<n+1;i++)
		{
			for(int j=1;j<n+1;j++)
			{
				if(x[i][j]=='!') x[i][j]='@';
			}
		}
	}
	
	// 统计结果
	for(int i=1;i<n+1;i++)
		for(int j=1;j<n+1;j++)
			if(x[i][j]=='@') count++;
	
	cout << count;
}

  

标签:信息学,1191,cin,越界,int,奥赛
From: https://www.cnblogs.com/exception999/p/18406498

相关文章