小塔正在玩一个战争棋盘。 棋盘可以视为一个n行m列的矩阵。小塔初始往棋盘上投放了k支军队,每个军队属于不同势力。每回合,小塔可以任选一个军队按"上、下、左、右"四种方向中的一种移动一个方格,会出现以下4种情况:
1.当这个军队移动到一个未被任何势力占领的格子,则军队移动成功,并将其占领。
2.当这个军队移动到自己势力的格子,此时军队移动成功。
3.若这个军队将移出地图的边界,将移动失败。该军队原地不动。
4.若这个军队将移动到另外一个势力的格子,那么两个势力将发生冲突,拥有较多领土的势力将获胜,并占领对方所有领土,消灭对方的军队。特殊的,若两个冲突的势力领土数量相等,那么势力名字的字典序较大者获胜。如果进攻方获胜,则进攻方移动成功。如果防守方获胜,那么防守方的军队保持原来的位置。
请你在每次移动操作后输出当前操作的结果。
ps: 若投放军队的时候有两个或多个军队在同一格子,则直接发生冲突,名字字典序最大的那个势力存活,其他势力消亡。
对于字符串a和b,我们认为满足以下两个条件中的一种时,a的字典序大于b: 1.b是a的一个前缀,且a和b不相等。
2.对于a和b中出现的第一个不同的字母,a的那个字母的ascii值比b的那个字母更大。
第一行输入三个正整数n,m,k,分别代表棋盘的行数、列数,以及势力的数量。
接下来的k行,每行输入一个字符串 str,以及两个正整数x和y,代表每个势力的名字,以及初始的坐标为(x,y)。保证初始投放的军队是没有重名的。 接下来的一行输入一个正整数q,代表回合数。
接下来的q行,每行输入一个字符串str和一个字符c,代表即将行动的军队的势力名称,以及行动方向。c为'W'代表该军队向上走,'S'代表向下走,'A'代表向左走,'D'代表向右走。
数据范围: 1≤n,m≤500 1≤k≤min(n×m,2.104) 1≤x≤n,1≤y≤m 1≤q≤2⋅104 保证str是长度不超过10的、仅包含小写字母的字符串。保证c为'W'、'A'、'S'、'D'四种字符中的一种。
对于每次操作,输出一行答案 若本次移动占领了新的边界。输出一行字符串"vanquish!"
若本次移动到了自己的领土,则输出一行字符串"peaceful"
若本次由于将移出边界导致移动失败,则输出一行字符串"outofbounds!"
若本次移动发生了冲突,胜利者是xxx,则输出一行字符串"xxxwins!”(xxx为势力名字)
若输入了不存在的势力,或者输入的字符串代表的势力已经败北,则输出一行字符串"unexistedempire."
输入
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已经被消灭,所以无法再移动。
输入
222
abcd 11
abcad 1 2
1
abcd D
输出
abcd wins!
说明
abcd的势力向右移动到(1,2),和abcad势力火拼,两者势力范围相同,但由于"abcd"字符串的字典序更大,因此获得胜利。
扫码备注加群即可,期待您的到来~
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.