山外青山站外题~~(悬关,急!!!
  • 板块灌水区
  • 楼主Tomwsc
  • 当前回复30
  • 已保存回复30
  • 发布时间2024/9/30 22:21
  • 上次更新2024/10/1 09:49:17
查看原帖
山外青山站外题~~(悬关,急!!!
1418967
Tomwsc楼主2024/9/30 22:21

Description:

当阿尔萨斯到达斯坦索姆的同时,光明使者乌瑟尔也及时赶来。但这时众人骇然发现一切都已经太晚了——被瘟疫感染的谷物已经发放到市民手中!

这些无辜的市民必将会感染瘟疫而成为天灾军团的部队。于是阿尔萨斯命令乌瑟尔和白银之手骑士团屠杀市民。当乌瑟尔拒绝执行这个命令时,阿尔萨斯竟然宣判德高望重的光明使者叛国。心灰意冷的乌瑟尔和他麾下的圣骑士愤然离城。而吉安娜也极其失望地离开。在最绝望无助的时候,没有人愿意支持年轻王子的抉择,留给他的只剩下无尽的痛苦。尽管众叛亲离,阿尔萨斯还是将他的计划付诸实施。他命令士兵将感染瘟疫的无辜市民屠戮殆尽,并把城内所有的建筑烧得一干二净!但是同时,恐惧魔王梅尔甘尼斯也正在将市民们转化为不死族。

给出斯坦索姆的地图和阿尔萨斯与梅尔甘尼斯的位置,每分钟阿尔萨斯和梅尔甘尼斯会在部队所在的地方屠杀市民,当房子烧毁后,阿尔萨斯会派他的军队向4个房屋未烧毁的方向(上下左右)移动。

阿尔萨斯想知道是他还是梅尔甘尼斯杀的比较快,于是要求你这位御用编程师将k分钟后的情况给他。

注意:如果阿尔萨斯和梅尔甘尼斯相遇,则阿尔萨斯会击退梅尔甘尼斯再烧毁房屋。

Input:

输入文件名为massacre.in。

输入的第一行包含两个数n、m和k,表示城市的长、宽和阿尔萨斯想知道情况的时间。

接下来n行,每行m个字符(中间无空格),‘A’表示阿尔萨斯,‘M’表示梅尔甘尼斯,‘#’表示墙,‘.’表示房子。

Output:

输出文件名为massacre.out。

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

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n , m , k , nx , ny , mx , my;
int dx[4] = {0 , 1 , -1 , 0};
int dy[4] = {1 , 0 , 0 , -1};
char mapp[505][505];
struct fxy{
    int x;
    int y;
    int t;
};
queue<fxy>qm;
queue<fxy>qn;
 
void bfs()
{
    fxy a , b;
    a.x = nx;
    a.y = ny;
    a.t = 0;
    b.x = mx;
    b.y = my;
    b.t = 0;
    qn.push(a);
    qm.push(b);
    //cout << k + 1 << endl;
    while(!qn.empty() || !qm.empty()){
        if(!qn.empty()){
        	int x1 = qn.front().x;
        	int y1 = qn.front().y;
        	int t1 = qn.front().t;
        	for(int i = 0;i < 4;i ++){
	            int xx1 = x1 + dx[i];
	            int yy1 = y1 + dy[i];
	            if(xx1 >= 1 && xx1 <= n && yy1 >= 1 && yy1 <= m && mapp[xx1][yy1] != '#' && t1 + 1 <= k && mapp[xx1][yy1] != 'A' && mapp[xx1][yy1] != 'a' && mapp[xx1][yy1] != 'M'){
	                fxy step;
	                step.x = xx1;
	                step.y = yy1;
	                step.t = t1 + 1;
	                //cout << step.t << endl;
	                //cout << step.t << endl;
	                qn.push(step);
	                mapp[xx1][yy1] = 'a';
	            }
	        }
	        qn.pop();
		}
		if(!qm.empty()){
			int x2 = qm.front().x;
	        int y2 = qm.front().y;
	        int t2 = qm.front().t;
			for(int i = 0;i < 4;i ++){
	            int xx2 = x2 + dx[i];
	            int yy2 = y2 + dy[i];
	            if(xx2 >= 1 && xx2 <= n && yy2 >= 1 && yy2 <= m && mapp[xx2][yy2] == '.' && t2 + 1 <= k){
	                fxy step;
	                step.x = xx2;
	                step.y = yy2;
	                step.t = t2 + 1;
	                //cout << step.t << endl;
	                //cout << step.t << endl;
	                qm.push(step);
	                mapp[xx2][yy2] = 'm';
	            }
	        }
	        qm.pop();
		}
        //cout << t1 << endl;
    }
    return;
}
 
signed main()
{
    //freopen("massacre.in" , "r" , stdin);
    //freopen("massacre.out" , "w" , stdout);
    cin >> n >> m >> k;
    for(int i = 1;i <= n;i ++)
        for(int j = 1;j <= m;j ++){
            cin >> mapp[i][j];
            if(mapp[i][j] == 'A'){
                nx = i;
                ny = j;
            }
            if(mapp[i][j] == 'M'){
                mx = i;
                my = j;
            }
        }
    bfs();
    for(int i = 1;i <= n;i ++){
        for(int j = 1;j <= m;j ++){
            if(i == nx && j == ny)
                cout << 'A';
            else
                cout << mapp[i][j];
        }
        cout << endl;
    }
    return 0;
}
 

只有80分(QAQ)

求dalao帮忙调 orz

2024/9/30 22:21
加载中...