hdu-1107(模拟题)

题目链接: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\n";
        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\n",num1,ans1);
        printf("%d %d\n",num2,ans2);
        printf("%d %d\n",num3,ans3);
        printf("***\n");
    }
    return 0;
}

 

posted @ 2018-11-02 20:48  麟阁  阅读(278)  评论(0编辑  收藏  举报