zoukankan      html  css  js  c++  java
  • [模拟] hdu 4452 Running Rabbits

    意甲冠军:

    两个人在一个人(1,1),一个人(N,N)

    要人人搬家每秒的速度v。而一个s代表移动s左转方向秒

    特别值得注意的是假设壁,反弹。改变方向

    例如,在(1,1),采取的一个步骤,以左(1,0) 其实来(1,2)

    然后假设两个人见面那么交换方向而且不再左转!

    思路:

    直接模拟。。

    代码:

    #include"cstdlib"
    #include"cstdio"
    #include"cstring"
    #include"cmath"
    #include"queue"
    #include"algorithm"
    #include"iostream"
    using namespace std;
    int move[4][2]= {{-1,0},{0,1},{1,0},{0,-1}};
    int n;
    struct node
    {
        int x,y,f;
        int v,t;
    };
    int getfx(char x)
    {
        if(x=='N') return 0;
        else if(x=='E') return 1;
        else if(x=='S') return 2;
        return 3;
    }
    int main()
    {
        while(scanf("%d",&n),n)
        {
            int m;
            char v[2];
            node a,b;
            a.x=a.y=1;
            b.x=b.y=n;
            scanf("%s%d%d",v,&a.v,&a.t);
            a.f=getfx(v[0]);
            scanf("%s%d%d",v,&b.v,&b.t);
            b.f=getfx(v[0]);
            scanf("%d",&m);
            for(int i=1; i<=m; i++)
            {
                int xx,yy;
                xx=a.x+move[a.f][0]*a.v;
                yy=a.y+move[a.f][1]*a.v;
                if(xx<1||yy<1)
                {
                    a.f=(a.f+2)%4;
                    if(xx<1) xx=1+move[a.f][0]*(1-xx);
                    else yy=1+move[a.f][1]*(1-yy);
                }
                if(xx>n||yy>n)
                {
                    a.f=(a.f+2)%4;
                    if(xx>n) xx=n+move[a.f][0]*(xx-n);
                    else yy=n+move[a.f][1]*(yy-n);
                }
                a.x=xx;
                a.y=yy;
                xx=b.x+move[b.f][0]*b.v;
                yy=b.y+move[b.f][1]*b.v;
                if(xx<1||yy<1)
                {
                    b.f=(b.f+2)%4;
                    if(xx<1) xx=1+move[b.f][0]*(1-xx);
                    else yy=1+move[b.f][1]*(1-yy);
                }
                if(xx>n||yy>n)
                {
                    b.f=(b.f+2)%4;
                    if(xx>n) xx=n+move[b.f][0]*(xx-n);
                    else yy=n+move[b.f][1]*(yy-n);
                }
                b.x=xx;
                b.y=yy;
                if(a.x==b.x && a.y==b.y) swap(a.f,b.f);  //这里特别注意 交换完不转向
                else
                {
                    if(i%a.t==0) a.f=(a.f-1+4)%4;
                    if(i%b.t==0) b.f=(b.f-1+4)%4;
                }
            }
            printf("%d %d
    %d %d
    ",a.x,a.y,b.x,b.y);
        }
        return 0;
    }
    


    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    UOJ.26.[IOI2014]Game(交互 思路)
    Good Bye 2016 F.New Year and Finding Roots(交互)
    Codeforces.835E.The penguin's game(交互 按位统计 二分)
    Codeforces.744B.Hongcow's Game(交互 按位统计)
    Codeforces.862D.Mahmoud and Ehab and the binary string(交互 二分)
    正睿OI 提高 Day1T3 ZYB玩字符串(DP)
    划分vlan
    2三层交换机实现vlan间的路由
    交换机基础-交换机远程telnet
    自动化运维环境的搭建问题处理
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4819038.html
Copyright © 2011-2022 走看看