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