zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    TCP系列24—重传—14、F-RTO虚假重传探测
    TCP系列23—重传—13、RACK重传
    TCP系列22—重传—12、Forward Retransmit
    TCP系列21—重传—11、TLP
    TCP系列20—重传—10、早期重传(ER)
    TCP系列19—重传—9、thin stream下的重传
    TCP系列18—重传—8、FACK及SACK reneging下的重传
    TCP系列17—重传—7、SACK下的重传
    TCP系列16—重传—6、基础快速重传(Fast Retransmit)
    Centos 6.2 安装mysql5.5
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3333310.html
Copyright © 2011-2022 走看看