题目来源:点击这里
#include <cstdio>
#include <cstring>
#include <vector>
#include<queue>
#include<iostream>
#include <algorithm>
#include<deque>
using namespace std;
struct node{
int x;
int y;
//node *p;//本来想用链表模拟,但是stl双端队列更香
};
int a[100000+5],b[100000+5];
int main(){
int t;
scanf("%d",&t);
while(t--){
int n,m,r;
scanf("%d%d%d",&n,&m,&r);
int k;
char st;
scanf("%d %c",&k,&st);
for(int i=0;i<k;++i) scanf("%d",&a[i]);
for(int i=0;i<k;++i) scanf("%d",&b[i]);
deque<node>q;
for(int i=0;i<k;++i){
node ni;
ni.x=a[i];
ni.y=b[i];
q.push_back(ni);
}
string s;
cin>>s;
int win=1;
for(int i=0;i<r;++i){
if(s[i]!='*'){
st=s[i];
}
if(st=='W'){
node ni=q.front();
ni.x--;
if(ni.x<0){
win=0;
break;
}
q.push_front(ni);
q.pop_back();
}
else if(st=='S'){
node ni=q.front();
ni.x++;
if(ni.x>=n){
win=0;
break;
}
q.push_front(ni);
q.pop_back();
}
else if(st=='A'){
node ni=q.front();
ni.y--;
if(ni.y<0){
win=0;
break;
}
q.push_front(ni);
q.pop_back();
}
else if(st=='D'){
node ni=q.front();
ni.y++;
if(ni.y>=m){
win=0;
break;
}
q.push_front(ni);
q.pop_back();
}
}
if(!win){
printf("GAME OVER!\n");
}
else{
int cnt=0;
while(!q.empty()){
node kkk=q.front();
q.pop_front();
a[cnt]=kkk.x;
b[cnt++]=kkk.y;
}
for(int i=0;i<k;++i){
printf("%d",a[i]);
if(i<k-1) printf(" ");
else printf("\n");
}
for(int i=0;i<k;++i){
printf("%d",b[i]);
if(i<k-1) printf(" ");
else printf("\n");
}
}
}
return 0;
}