2 1 S 1 2 20 20 20 W 2 1 20 20 20 0 2 S 1 2 20 20 20 W 2 1 20 20 20 E 12 12 20 20 100 0
1 20 1 20 0 0 *** 1 14 1 14 1 100 ***
# include<stdio.h> # include<string.h> typedef struct dizi { char menpai; //弟子门派 int row; //所在行数 int column; //所在列数 int neili; //内力 int wuyi; //武艺 int shengming; //生命 int gongjili; //攻击力 int flag; //是否死亡 1活着 0死亡 int isf; //是否格斗过 1斗过 0木有 int fangxiang; //走向 正为0 反为1 }a[1010]; int map[14][14]; //整个武林 int gjl(char menpai,int neili,int wuyi,int shengming) //计算各位弟子的攻击力 { double a = 1.0; if(menpai=='S') { return (int)(a*(0.5*neili+0.5*wuyi)*(shengming+10)/100); } else if(menpai=='W') { return (int)(a*(0.8*neili+0.2*wuyi)*(shengming+10)/100); } else { return (int)(a*(0.2*neili+0.8*wuyi)*(shengming+10)/100); } } int jieguo(int shengming,int dgjl) //一次不同帮派拼杀后剩余血量 { return shengming-dgjl; } void zhandou(int map[][14],dizi a[],int k1) //开始拼杀了 { int i,j,k,b1,b2; for(i=1;i<=12;i++) { for(j=1;j<=12;j++) { if(map[i][j]==2) //当武林的同一个位置有两个人时 { for(k=0;k<k1;k++) //找到这个位置上 没死~没战斗过的第一位弟子 { if(a[k].row==i && a[k].column==j && a[k].flag!=0 && !a[k].isf) { b1 = k; k++; break; } } for(;k<k1;k++) //找到这个位置上 没死~没战斗过的第一位弟子 { if(a[k].row==i && a[k].column==j && a[k].flag!=0 && !a[k].isf) { b2 = k; break; } } if(a[b1].menpai!=a[b2].menpai && a[b1].flag!=0 && !a[b1].isf && a[b2].flag!=0 && !a[b2].isf) //仇人见面~开始拼杀 { a[b1].shengming=jieguo(a[b1].shengming,a[b2].gongjili); //第一个人战斗后的生命值 a[b2].shengming=jieguo(a[b2].shengming,a[b1].gongjili); //第二个人战斗后的生命值 a[b1].gongjili = gjl(a[b1].menpai,a[b1].neili,a[b1].wuyi,a[b1].shengming); a[b2].gongjili = gjl(a[b2].menpai,a[b2].neili,a[b2].wuyi,a[b2].shengming); if(a[b1].shengming<=0) //第一个死了~ { a[b1].shengming = 0; a[b1].flag = 0; } if(a[b2].shengming<=0) //第二个死了~ { a[b2].shengming = 0; a[b2].flag = 0; } a[b1].isf = 1; //本回合已拼斗过 a[b2].isf = 1; //本回合已拼斗过 } } } } } void yidong(int map[][14],dizi a[],int k1) { int k; zhandou(map,a,k1);//这里是map,而不是map[14][14] map是地址 map[14][14]是 int型 memset(map,0,sizeof(map)*14*14); for(k=0;k<k1;k++) { a[k].isf = 0; if(a[k].menpai=='S' && a[k].flag!=0) //少林派步法 { if(a[k].fangxiang==0) { if(a[k].row+1<=12) //下移 a[k].row++; else //到头了,上移 { a[k].row--; a[k].fangxiang = 1; } } else if(a[k].fangxiang==1) { if(a[k].row-1>=1) //上移 a[k].row--; else //到头了,下移 { a[k].row++; a[k].fangxiang = 0; } } map[a[k].row][a[k].column]++; //移动后,新位置人数加一 } else if(a[k].menpai=='W' && a[k].flag!=0) //武当派步法 { if(a[k].fangxiang==0) { if(a[k].column+1<=12) //右移 a[k].column++; else //到头了,左移 { a[k].column--; a[k].fangxiang = 1; } } else if(a[k].fangxiang==1) { if(a[k].column-1>=1) //左移 a[k].column--; else //到头了,右移 { a[k].column++; a[k].fangxiang = 0; } } map[a[k].row][a[k].column]++; //移动后,新位置人数加一 } else if(a[k].menpai=='E' && a[k].flag!=0) //峨眉派飘逸步法 { if(a[k].fangxiang==0) { if(a[k].row+1<=12 && a[k].column+1<=12 && (a[k].row!=1 || a[k].column!=12) && (a[k].row!=12||a[k].column!=1)) //右下移,位置不为1,12 12,1 { a[k].row++; a[k].column++; } else if(a[k].row+1>12 || a[k].column+1>12 && (a[k].row!=1 || a[k].column!=12) && (a[k].row!=12||a[k].column!=1)) //到头了,左上移 { a[k].row--; a[k].column--; a[k].fangxiang = 1; } map[a[k].row][a[k].column]++; //移动后,新位置人数加一 } else if(a[k].fangxiang==1) { if(a[k].row-1>=1 && a[k].column-1>=1 && (a[k].row!=1 || a[k].column!=12) &&(a[k].row!=12||a[k].column!=1)) //左上移,位置不为1,12 12,1 { a[k].row--; a[k].column--; } else if(a[k].row-1<1 || a[k].column-1<1 && (a[k].row!=1 || a[k].column!=12) &&(a[k].row!=12||a[k].column!=1)) //到头了,右下移 { a[k].row++; a[k].column++; a[k].fangxiang = 0; } map[a[k].row][a[k].column]++; //移动后,新位置人数加一 } } } } int main() { int M,N,i,j,k,l,neili,wuyi,shengming,SSUM,WSUM,ESUM,ssum,wsum,esum; char ch; dizi a[1010]; scanf("%d",&M); while(M--) { getchar(); memset(map,0,sizeof(map)); k = 0; scanf("%d",&N); getchar(); while(scanf("%c",&ch) && ch!='0') { if(ch=='\n') continue; scanf("%d",&i); scanf("%d",&j); scanf("%d",&neili); scanf("%d",&wuyi); scanf("%d",&shengming); if(ch == 'S' || ch == 'W' || ch =='E') a[k].menpai = ch; a[k].row = i; a[k].column = j; a[k].neili = neili; a[k].wuyi = wuyi; a[k].shengming = shengming; a[k].gongjili = gjl(ch,neili,wuyi,shengming); a[k].flag = 1; a[k].fangxiang = 0; a[k].isf = 0; map[i][j]++; k++; } while(N--) { yidong(map,a,k); } SSUM =WSUM = ESUM = ssum = wsum = esum = 0; for(l=0;l<k;l++) { if(a[l].menpai=='S' && a[l].flag!=0) { ssum += a[l].shengming; SSUM++; } if(a[l].menpai=='W' && a[l].flag!=0) { wsum += a[l].shengming; WSUM++; } if(a[l].menpai=='E' && a[l].flag!=0) { esum += a[l].shengming; ESUM++; } } printf("%d %d\n",SSUM,ssum); printf("%d %d\n",WSUM,wsum); printf("%d %d\n",ESUM,esum); printf("***\n"); } return 0; }