题目描述
今天是
Tabris
和
mengxiang000
来到幼儿园的第
9
天。
为了庆祝这美好的一天,老师组织同学们做游戏,拿来了好多骰子。
游戏规则:
1)两个人每人轮流掷骰子,操控同一个小人在一个有向的地图上走,骰子的点数是几,这个小人就向前走几格。
2) 地图只有一条路,路上有起点、终点和传送阵。传送阵会只能传送到最近接终点的另一个传送阵的位置上,否则传送阵势不会发动。
3)只要路过传送阵就会被传送走、并继续走完应走的步数,一个传送阵作为入口或出口只能使用一次。
4)小人到达终点时最后一个掷骰子的人获胜,且游戏结束。
Tabris与mengxiang000这两个傻孩子,并没有弄懂规则,就在一边轮流掷骰子玩了。
现在给你这张地图,和Tabris与mengxiang000总共掷骰子的次数与每次骰子的点数,你知道他俩应该谁赢么?(Tabris先掷骰子)
为了简化问题,‘S’代表起点、‘E’代表终点、‘@’代表传送阵、‘.’代表普通作为路的格子。
输入描述:
本题有T组数据 每组数据第一行有一行字符串代表地图。 第二行包含一个整数N,代表Tabris与mengxiang000总共掷骰子的次数。 第三行帮扩N个整数a_i ,代表每次的点数。 1≤地图长度≤10000 1≤T≤200 1≤N≤200 1≤a_i≤6
输出描述:
如果小人到达终点,输出赢家的名字,否则输出None。
示例1
输入
2 S...@.....@....E 3 6 6 6 S..@..E 3 6 6 6
输出
mengxiang000 Tabris
说明
从传送门的入口进入到出口出去相当于走了一格。对于第一组样例:箭头所示位置为小人所在的位置
题目简单,但是注意进入传送门,再出去算两步;
#include<bits/stdc++.h>
using namespace std;
char a[10005];
int s[10005];
int main()
{
int N, n, x, y, z;
cin >> N;
while(N--)
{
int flag = 0, step = 0;
scanf("%s", a);
cin >> n;
for(int i = 0; i < n; i++)
cin >> s[i];
int len = strlen(a);
for(int i = 0; i < len; i++)
{
if(a[i] == 'S')
x = i;
if(a[i] == 'E')
y = i;
}
for(int i = x; i < len; i++)
{
if(a[i] != '@')
step++;
else
{
flag = 1;
z = i;
break;
}
}
for(int i = y; i >= 0; i--)
{
if(a[i] != '@')
step++;
else
{
flag = 1;
if(i != z)
flag = 2;
break;
}
}
if(flag == 2)
step += 1;
if(step == 0)
step /= 2 - 1;
for(int i = 0; i < n; i++)
{
step -= s[i];
if(step <= 0)
{
printf("%s\n", i % 2 == 0 ? "Tabris" : "mengxiang000");
break;
}
}
if(step > 0)
cout << "None" <<endl;
}
return 0;
}