http://bailian.openjudge.cn/practice/2785/
#include<iostream>
using namespace std;
class data{
public:
char c;
int i,j,x,y,z;
bool b;//走的方向
int d(){
int t;
if(c=='S') t=(0.5*x+0.5*y)*(z+10)/100;
if(c=='W') t=(0.8*x+0.2*y)*(z+10)/100;
if(c=='E') t=(0.2*x+0.8*y)*(z+10)/100;
return t;
}
}a[1001];
int len=0,map[13][13]={0};
int step[2][3][2]={{{1,0},{0,1},{1,1}},{{-1,0},{0,-1},{-1,-1}}};
void fight(){
for(int i=0;i<len;i++){
if(map[a[i].i][a[i].j]==2&&a[i].z>0){
for(int j=i+1;j<len;j++){
if(a[j].i==a[i].i&&a[j].j==a[i].j&&a[i].z>0&&a[j].c!=a[i].c){
int di=a[i].d();
int dj=a[j].d();
a[i].z-=dj;
a[j].z-=di;
break;
}
}
}
map[a[i].i][a[i].j]=0;//人数清零
}
}
void move(){
for(int i=0;i<len;i++){
if(a[i].z>0){
int j=0;
char v[]={"SWE"};
for(;j<3&&a[i].c!=v[j];j++);//寻找步数
if(a[i].i>=12&&j==0||a[i].j>=12&&j==1||((a[i].i>=12||a[i].j>=12)&&j==2))
a[i].b=1;
else if(a[i].i<=1&&j==0||a[i].j<=1&&j==1||((a[i].i<=1||a[i].j<=1)&&j==2))
a[i].b=0;
if(!(j==2&&(a[i].i==12&&a[i].j==1||a[i].i==1&&a[i].j==12))){
if(a[i].b==0){
a[i].i+=step[0][j][0];
a[i].j+=step[0][j][1];
}else{
a[i].i+=step[1][j][0];
a[i].j+=step[1][j][1];
}
}
map[a[i].i][a[i].j]++;
}
}
}
int main(){
int n;
cin>>n;
while(n--){
len=0;
int i;
for(i=0;i<13;i++)
for(int j=0;j<13;j++)
map[i][j]=0;
char c;
int N;
cin>>N;
while(cin>>c&&c!='0'){
a[len].c=c;
cin>>a[len].i>>a[len].j>>a[len].x>>a[len].y>>a[len].z;
a[len].b=0;
++map[a[len].i][a[len].j];
len++;
}
while(N--){
fight();
move();
}
int z[3]={0},num[3]={0};
for(i=0;i<len;i++){//记录生命总数及各门派弟子数,0,1,2分别代表S、W、E
if(a[i].z>0){
int j=0;
char v[]={"SWE"};
for(;j<3&&a[i].c!=v[j];j++);//寻找步数
z[j]+=a[i].z;
num[j]++;
}
}
for(i=0;i<3;i++){
cout<<num[i]<<" "<<z[i]<<endl;
}
cout<<"***"<<endl;
}
return 0;
}