站外题,玄关
  • 板块灌水区
  • 楼主__QWQ_qwq__
  • 当前回复13
  • 已保存回复13
  • 发布时间2023/8/14 20:01
  • 上次更新2023/11/3 03:47:32
查看原帖
站外题,玄关
845367
__QWQ_qwq__楼主2023/8/14 20:01

Description

阿尔萨斯到达斯坦索姆的同时,光明使者乌瑟尔也及时赶来。但这时众人骇然发现一切都已经太晚了——被瘟疫感染的谷物已经发放到市民手中! 这些无辜的市民必将会感染瘟疫而成为天灾军团的部队。于是阿尔萨斯命令乌瑟尔和白银之手骑士团屠杀市民。当乌瑟尔拒绝执行这个命令时,阿尔萨斯竟然宣判德高望重的光明使者叛国。心灰意冷的乌瑟尔和他麾下的圣骑士愤然离城。而吉安娜也极其失望地离开。在最绝望无助的时候,没有人愿意支持年轻王子的抉择,留给他的只剩下无尽的痛苦。尽管众叛亲离,阿尔萨斯还是将他的计划付诸实施。他命令士兵将感染瘟疫的无辜市民屠戮殆尽,并把城内所有的建筑烧得一干二净!但是同时,恐惧魔王梅尔甘尼斯也正在将市民们转化为不死族。 给出斯坦索姆的地图和阿尔萨斯与梅尔甘尼斯的位置,每分钟阿尔萨斯和梅尔甘尼斯会在部队所在的地方屠杀市民,当房子烧毁后,阿尔萨斯会派他的军队向4个房屋未烧毁的方向(上下左右)移动。阿尔萨斯想知道是他还是梅尔甘尼斯杀的比较快,于是要求你这位御用编程师将k分钟后的情况给他。注意:如果阿尔萨斯和梅尔甘尼斯相遇,则阿尔萨斯会击退梅尔甘尼斯再烧毁房屋。

Input

输入文件名为massacre.in。 输入的第一行包含两个数n、m和k,表示城市的长、宽和阿尔萨斯想知道情况的时间。 接下来n行,每行m个字符(中间无空格),‘A’表示阿尔萨斯,‘M’表示梅尔甘尼斯,‘#’表示墙,‘.’表示房子。

5 5 4
A....
.....
.....
.....
....M

Output

输出文件名为massacre.out。 输出k分钟后的情况,被阿尔萨斯消灭的房子用‘a’表示,梅尔甘尼斯的用‘m’表示。

Aaaaa
aaaam
aaamm
aammm
ammmM

【数据说明】

对于100%的数据,1<=n,m<=500,k的范围保证有解(反正开int就够了)。

代码:

#include <iostream>
using namespace std;
char c[510][510];
int main()
{
	int n,m,t;
	cin>>n>>m>>t;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			cin>>c[i][j];
		}
	}
	while(t--)
	{
		for(int i=0;i<n;i++) 
		{
			for(int j=0;j<m;j++)
			{
				if((c[i][j]=='A')||(c[i][j]=='a'))
				{
					if((i>0)&&(c[i-1][j]=='.'))
					{
						c[i-1][j] = '&'; 
					}
					if((i<n-1)&&(c[i+1][j]=='.'))
					{
						c[i+1][j]='&';
					}
					if((j>0)&&(c[i][j-1]=='.'))
					{
						c[i][j-1]='&';
					}
					if((j<m-1)&&(c[i][j+1]=='.'))
					{
						c[i][j+1]='&';
					}
				}
			}
		}	
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				if((c[i][j]=='M')||(c[i][j]=='m'))
				{
					if((i>0)&&(c[i-1][j]=='.'))
					{
						c[i-1][j]='*';
					}
					if((i<n-1)&&(c[i+1][j]=='.'))
					{
						c[i+1][j]='*';
					}
					if((j>0)&&(c[i][j-1]=='.'))
					{
						c[i][j-1]='*';
					}
					if((j<m-1)&&(c[i][j+1]=='.'))
					{
						c[i][j+1]='*';
					}
				}
			}
		}		
		for(int i=0;i<n;i++) 
		{
			for(int j=0;j<m;j++)
			{
				if(c[i][j]=='&')
				{
					c[i][j]='a';
				}
				else if(c[i][j]=='*')
				{
					c[i][j]='m';
				}
			}
		}
	}	
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			cout<<c[i][j];
		}
		cout<<endl;
	}
}

40pts

2023/8/14 20:01
加载中...