题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1107
注意:1.路线是要反向的,走不通就反向;
2.输入输出全部是整形
3.攻击力不断变化
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; struct Node{ int x,y,fg; int nei,wu,she,gj,dir; char ch; int f(char tt) { if(tt=='S') return floor((0.5*nei+0.5*wu)*(she+10.0)/100.0); else if(tt=='W') return floor((0.8*nei+0.2*wu)*(she+10.0)/100.0); else if(tt=='E') return floor((0.2*nei+0.8*wu)*(she+10.0)/100.0); } }; int check(int x,int y) { if(x<1||y>12) return 0; if(y<1||x>12) return 0; else return 1; } Node a[1200]; int vis[20][20],vc[1200]; int main(void) { int i,t,n,len,k,j; scanf("%d",&t); while(t--) { scanf("%d",&n); getchar(); i=0; while(scanf("%c",&a[i].ch)&&(a[i].ch!='0')) { scanf(" %d %d %d %d %d",&a[i].x,&a[i].y,&a[i].nei,&a[i].wu,&a[i].she); a[i].dir=1; getchar(); i++; } // cout<<"---"<<i<<endl; len=i; for(i=0;i<len;i++) { if(a[i].ch=='S') a[i].fg=1; else if(a[i].ch=='W') a[i].fg=2; else if(a[i].ch=='E') a[i].fg=3; a[i].gj=a[i].f(a[i].ch); //cout<<a[i].gj<<endl; } //cout<<n<<" --1i4dfjsdofsd "; for(i=0;i<n;i++) { memset(vis,0,sizeof(vis)); memset(vc,0,sizeof(vc)); for(j=0;j<len;j++) { vis[a[j].x][a[j].y]++; } for(j=0;j<len;j++) { for(k=0;k<len;k++) { if((a[j].fg!=a[k].fg)&&j!=k&&a[j].fg!=-1&&vis[a[j].x][a[j].y]==2&&vc[j]==0&&vc[k]==0&&(a[j].x==a[k].x&&a[j].y==a[k].y)) { a[j].she=a[j].she-a[k].gj; a[k].she=a[k].she-a[j].gj; //cout<<a[k].gj<<" ----- "<<a[j].gj<<endl; a[k].gj=a[k].f(a[k].ch); a[j].gj=a[j].f(a[j].ch); vc[j]=1;vc[k]=1; if(a[j].she<=0) a[j].fg=-1; if(a[k].she<=0) a[k].fg=-1; } } } for(j=0;j<len;j++) //移动 { if(a[j].ch=='S') { a[j].x+=a[j].dir; if(check(a[j].x,a[j].y)==0) { a[j].dir*=(-1); a[j].x+=2*a[j].dir; } } else if(a[j].ch=='W') { a[j].y+=a[j].dir; if(check(a[j].x,a[j].y)==0) { a[j].dir*=(-1); a[j].y+=2*a[j].dir; } } else if(a[j].ch=='E') { if(a[j].x==1&&a[j].y==12||a[j].x==12&&a[j].y==1) continue; a[j].x+=a[j].dir,a[j].y+=a[j].dir; if(check(a[j].x,a[j].y)==0) { a[j].dir*=(-1); a[j].x+=2*a[j].dir; a[j].y+=2*a[j].dir; } } } } int ans1=0,ans2=0,ans3=0; int num1=0,num2=0,num3=0; for(i=0;i<len;i++) { if(a[i].fg==1) num1++,ans1+=a[i].she; else if(a[i].fg==2) num2++,ans2+=a[i].she; else if(a[i].fg==3) num3++,ans3+=a[i].she; } printf("%d %d ",num1,ans1); printf("%d %d ",num2,ans2); printf("%d %d ",num3,ans3); printf("*** "); } return 0; }