【hdu 4452】Running Rabbits 题解&代码(C++)

题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=4452
题解:
模拟兔子走路过程即可。
代码:

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<math.h>
using namespace std;
int n,k,v1,v2,t1,t2;
char s1[3],s2[3];
int d[2][4]={{-1,0,1, 0},
         { 0,1,0,-1}};
int z(char a)
{
    if (a=='N') return 0;
    if (a=='E') return 1;
    if (a=='S') return 2;
    return 3;
}
int main()
{
    while(1)
    {
        scanf("%d",&n);
        if (n==0) return 0;
        scanf("%s%d%d",s1,&v1,&t1);
        scanf("%s%d%d",s2,&v2,&t2);
        scanf("%d",&k);
        int f1=z(s1[0]);
        int f2=z(s2[0]);
        int stx1=1,sty1=1;
        int stx2=n,sty2=n;
        //cout<<0<<endl;
        //cout<<f1<<' '<<f2<<endl;
        for (int i=1;i<=k;i++)
        {
            int nex1=stx1+d[0][f1]*v1;
            int ney1=sty1+d[1][f1]*v1;
            int nex2=stx2+d[0][f2]*v2;
            int ney2=sty2+d[1][f2]*v2; 
            if (nex1<1)
            {
                int cha=abs(nex1-1);
                nex1=1+cha;
                f1=(f1+2)%4;
            }
            if (nex1>n)
            {
                int cha=abs(nex1-n);
                nex1=n-cha;
                f1=(f1+2)%4;
            }
                if (ney1<1)
                        {
                                int cha=abs(ney1-1);
                                ney1=1+cha;
                                f1=(f1+2)%4;
                        }
                        if (ney1>n)
                        {
                                int cha=abs(ney1-n);
                                ney1=n-cha;
                                f1=(f1+2)%4;
                }
                        if (nex2<1)
                        {
                                int cha=abs(nex2-1);
                                nex2=1+cha;
                                f2=(f2+2)%4;
                        }
                        if (nex2>n)
                        {
                                int cha=abs(nex2-n);
                                nex2=n-cha;
                                f2=(f2+2)%4;
                        }
                        if (ney2<1)
                        {
                                int cha=abs(ney2-1);
                                ney2=1+cha;
                                f2=(f2+2)%4;
                        }
                        if (ney2>n)
                        {
                                int cha=abs(ney2-n);
                                ney2=n-cha;
                                f2=(f2+2)%4;
            }
            stx1=nex1;sty1=ney1;
            stx2=nex2;sty2=ney2;
            if (stx1==stx2&&sty1==sty2)
            {
                swap(f1,f2);
                continue;
            }
            if (i%t1==0)
            f1=(f1+3)%4;
            if (i%t2==0)
            f2=(f2+3)%4;
        //  cout<<i<<endl;
        //  cout<<f1<<' '<<stx1<<' '<<sty1<<endl;
        //  cout<<f2<<' '<<stx2<<' '<<sty2<<endl;
        }   
        printf("%d %d\n",stx1,sty1);
        printf("%d %d\n",stx2,sty2);
    }
} 

你可能感兴趣的:(模拟,HDU)