• hdu 4740 The Donkey of Gui Zhou


    1.扯犊子超多if else 判断的代码,华丽丽的TLE。

    #include<stdio.h>
    #include<string.h>
    #define N 1010
    int map[N][N];
    int f[4][2]= {0,1,1,0,0,-1,-1,0};
    struct Node
    {
        int x,y;
        int f;
    };
    int main()
    {
        int n;
        Node tig,don;
        while(scanf("%d",&n)!=EOF&&n)
        {
            memset(map,0,sizeof(map));
            scanf("%d %d %d",&don.x,&don.y,&don.f);
            map[don.x][don.y]=-1;
            scanf("%d %d %d",&tig.x,&tig.y,&tig.f);
            map[tig.x][tig.y]=-2;
            int flag1=1,flag2=1;
            while(flag1||flag2)
            {
                //printf("#%d %d
    ",don.x,don.y);
                //printf("$%d %d
    ",tig.x,tig.y);
                if(don.x==tig.x&&don.y==tig.y)
                {
                    printf("%d %d
    ",don.x,don.y);
                    break;
                }
                if(flag1)
                {
                    int x=don.x+f[don.f][0];
                    int y=don.y+f[don.f][1];
                    //printf("$%d %d
    ",x,y);
                    if(x>=0&&x<n&&y>=0&&y<n&&map[x][y]!=-1&&map[x][y]!=-3)
                    {
                        //printf("sdafj
    ");
                        don.x=x;
                        don.y=y;
                    }
                    else if(y>=n)
                    {
                        x+=1;
                        if(x>=0&&x<n&&map[x][don.y]!=-1&&map[x][don.y]!=-3)don.x=x;
                        else flag1=0;
                        don.f=1;
                    }
                    else if(x<0)
                    {
                        y+=1;
                        if(y>=0&&y<n&&map[don.x][y]!=-1&&map[don.x][y]!=-3)don.y=y;
                        else flag1=0;
                        don.f=0;
                    }
                    else if(y<0)
                    {
                        x-=1;
                        if(x>=0&&x<n&&map[x][don.y]!=-1&&map[x][don.y]!=-3)don.x=x;
                        else flag1=0;
                        don.f=3;
                    }
                    else if(x>=n)
                    {
                        y-=1;
                        if(y>=0&&y<n&&map[don.x][y]!=-1&&map[don.x][y]!=-3)don.y=y;
                        else flag1=0;
                        don.f=2;
                    }
                    //else flag1=0;
                    if(!map[don.x][don.y])map[don.x][don.y]=-1;
                    else if(map[don.x][don.x]==-2)map[don.x][don.y]=-3;
                }
                if(flag2)
                {
                    int x=tig.x+f[tig.f][0];
                    int y=tig.y+f[tig.f][1];
                    //printf();
                    if(x>=0&&x<n&&y>=0&&y<n&&map[x][y]!=-2&&map[x][y]!=-3)
                    {
                        tig.x=x;
                        tig.y=y;
                    }
                    else if(y>=n)
                    {
                        x-=1;
                        if(x>=0&&x<n&&map[x][tig.y]!=-2&&map[x][tig.y]!=-3)tig.x=x;
                        else flag2=0;
                        tig.f=3;
                    }
                    else if(x<0)
                    {
                        y-=1;
                        if(y>=0&&y<n&&map[tig.x][y]!=-2&&map[tig.x][y]!=-3)tig.y=y;
                        else flag2=0;
                        tig.f=2;
                    }
                    else if(y<0)
                    {
                        x+=1;
                        if(x>=0&&x<n&&map[x][tig.y]!=-2&&map[x][tig.y]!=-3)tig.x=x;
                        else flag2=0;
                        tig.f=1;
                    }
                    else if(x>=n)
                    {
                        y+=1;
                        if(y>=0&&y<n&&map[tig.x][y]!=-2&&map[tig.x][y]!=-3)tig.y=y;
                        else flag2=0;
                        tig.f=0;
                    }
                    //else flag2=0;
                    if(!map[tig.x][tig.y])map[tig.x][tig.y]=-2;
                    else if(map[tig.x][tig.y]==-1)map[tig.x][tig.y]=-3;
                }
            }
    
            if(!flag1&&!flag2)printf("-1
    ");
        }
        return 0;
    }
    View Code

     2.思路:

    1.如果donkey和tiger能按指定路线行走,判断是否同时到达同意地点

    2.如果不能继续行走(遇到自己以前走过的或墙壁),则转弯。

       donkey向右转,tiger向左转,转后仍不能前进,则停下。

    3.一个停下,另一个可以继续,直到都停下或同时到达同意地点。

    不知道哪里错了(WA)

    #include<stdio.h>
    #include<string.h>
    #define N 1100
    int map[N][N];
    int f[4][2]= {0,1,1,0,0,-1,-1,0};
    struct Node
    {
        int x,y;
        int f;
    };
    int main()
    {
        int n;
    
        while(scanf("%d",&n)!=EOF&&n)
        {
            Node tig,don;
            memset(map,0,sizeof(map));
            scanf("%d %d %d",&don.x,&don.y,&don.f);
            map[don.x][don.y]=-1;
            scanf("%d %d %d",&tig.x,&tig.y,&tig.f);
            map[tig.x][tig.y]=-2;
            int flag1=1,flag2=1;
            while(flag1||flag2)
            {
                //printf("#%d %d
    ",don.x,don.y);
                //printf("$%d %d
    ",tig.x,tig.y);
                if(don.x==tig.x&&don.y==tig.y)
                {
                    printf("%d %d
    ",don.x,don.y);
                    break;
                }
                if(flag1)
                {
                    int x=don.x+f[don.f][0];
                    int y=don.y+f[don.f][1];
                    //printf("$%d %d
    ",x,y);
                    if(x>=0&&x<n&&y>=0&&y<n&&map[x][y]!=-1&&map[x][y]!=-3)
                    {
                        //printf("sdafj
    ");
                        don.x=x;
                        don.y=y;
                    }
                    else//换方向
                    {
                        if(don.f==3)
                            don.f=0;
                        else
                            don.f++;
                        x=don.x+f[don.f][0];
                        y=don.y+f[don.f][1];
                        if(x>=0&&x<n&&y>=0&&y<n&&map[x][y]!=-1&&map[x][y]!=-3)
                        {
                            don.x=x;
                            don.y=y;
                        }
                        else flag1=0;
                    }
                    if(flag1)
                        if(!map[don.x][don.y])map[don.x][don.y]=-1;
                        else if(map[don.x][don.x]==-2)map[don.x][don.y]=-3;
                }
                if(flag2)
                {
                    int x=tig.x+f[tig.f][0];
                    int y=tig.y+f[tig.f][1];
                    //printf();
                    if(x>=0&&x<n&&y>=0&&y<n&&map[x][y]!=-2&&map[x][y]!=-3)
                    {
                        tig.x=x;
                        tig.y=y;
                    }
                    else
                    {
                        if(!tig.f)
                            tig.f=3;
                        else tig.f--;
                        x=tig.x+f[tig.f][0];
                        y=tig.y+f[tig.f][1];
                        if(x>=0&&x<n&&y>=0&&y<n&&map[x][y]!=-2&&map[x][y]!=-3)
                        {
                            tig.x=x;
                            tig.y=y;
                        }
                        else flag2=0;
                    }
                    if(flag2)
                        if(!map[tig.x][tig.y])map[tig.x][tig.y]=-2;
                        else if(map[tig.x][tig.y]==-1)map[tig.x][tig.y]=-3;
                }
            }
            if(!flag1&&!flag2)printf("-1
    ");
        }
        return 0;
    }
  • 相关阅读:
    $GLOBALS超级全局变量
    归来
    Mscorlib.dll 里的 System.Internal 类是干嘛的?
    Query Composition using Functional Programming Techniques in C# 3.0
    反射之人千万不能错过的 EmitHelper
    给自己的Blog程序添加对Windows Live Writer的支持
    WebService的应用之winform身份验证
    c# static 的全部用法收集整理
    ASP.NET设置网站图标
    C# 2.0 之 static class (转)
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3333310.html
Copyright © 2020-2023  润新知