时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld
题目描述
小红正在玩一个战争棋盘。
棋盘可以视为一个

行

列的矩阵。小红初始往棋盘上投放了

支军队,每个军队属于不同势力。每回合,小红可以任选一个军队按“上、下、左、右”四种方向中的一种移动一个方格,会出现以下4种情况:
1.当这个军队移动到一个未被任何势力占领的格子,则军队移动成功,并将其占领。
2.当这个军队移动到自己势力的格子,此时军队移动成功。
3.若这个军队将移出地图的边界,将移动失败。该军队原地不动。
4.若这个军队将移动到另外一个势力的格子,那么两个势力将发生冲突,拥有较多领土的势力将获胜,并占领对方所有领土,消灭对方的军队。特殊的,若两个冲突的势力领土数量相等,那么势力名字的字典序较大者获胜。
如果进攻方获胜,则进攻方移动成功。如果防守方获胜,那么防守方的军队保持原来的位置。 请你在每次移动操作后输出当前操作的结果。
ps:若投放军队的时候有两个或多个军队在同一格子,则直接发生冲突,名字字典序最大的那个势力存活,其他势力消亡。
对于字符串

和

,我们认为满足以下两个条件中的一种时,

的 字典序大于

:
1.

是

的一个前缀,且

和

不相等。
2. 对于

和

中出现的第一个不同的字母,

的那个字母的 ascii 值比

的那个字母更大。
输入描述:
第一行输入三个正整数
,分别代表棋盘的行数、列数,以及势力的数量。
接下来的
行,每行输入一个字符串 str,以及两个正整数
和
,代表每个势力的名字,以及初始的坐标为
。保证初始投放的军队是没有重名的。
接下来的一行输入一个正整数
,代表回合数。
接下来的
行,每行输入一个字符串 str 和一个字符
,代表即将行动的军队的势力名称,以及行动方向。
为 'W'代表该军队向上走,'S'代表向下走,'A'代表向左走,'D'代表向右走。
数据范围:

)


保证str是长度不超过10的、仅包含小写字母的字符串。保证
为'W'、'A'、'S'、'D'四种字符中的一种。
输出描述:
对于每次操作,输出一行答案:
若本次移动占领了新的边界,则输出一行字符串"vanquish!"
若本次移动到了自己的领土,则输出一行字符串"peaceful."
若本次由于将移出边界导致移动失败,则输出一行字符串"out of bounds!"
若本次移动发生了冲突,胜利者是xxx,则输出一行字符串"xxx wins!"(xxx为势力名字)
若输入了不存在的势力,或者输入的字符串代表的势力已经败北,则输出一行字符串"unexisted empire."
示例1
输入
复制
3 3 2
ranko 1 1
kotori 2 2
5
ranko D
ranko W
ranko A
kotori W
kotori W
输出
复制
vanquish!
out of bounds!
peaceful.
ranko wins!
unexisted empire.
说明
初始棋盘如下图:
第一回合,ranko从(1,1)移动到(1,2),占领了一个新格子。
第二回合,ranko试图向上移动,但即将出地图边界,移动失败。
第三回合,ranko向左返回(1,1)。
第四回合,kotori向上移动到(1,2),由于(1,2)已经被ranko占领,两个势力火拼,ranko势力范围更大取得胜利,消灭koroti并获得其所有领土。
第五回合,由于kotori已经被消灭,所以无法再移动。
示例2
输入
复制
2 2 2
abcd 1 1
abcad 1 2
1
abcd D
说明
abcd的势力向右移动到(1,2),和abcad势力火拼,两者势力范围相同,但由于"abcd"字符串的字典序更大,因此获得胜利。