zoukankan      html  css  js  c++  java
  • 模拟题 Right turn SCU

    用一个二维数组记录从四个方向到达该障碍物的次数,如果同一个方向到达该障碍物两次,那么就一定可以转无数次弯。

    做题的时候心态要好啊。。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    #include<set>
    #include<vector>
    #define maxn 1005
    #define inf 0x3f3f3f3f
    using namespace std;
    typedef struct
    {
        int x,y;
    }P;
    P a[maxn];
    int v[4][maxn];
    int ans,n,flag;
    void solve()
    {
    
        P c;
        c.x=0,c.y=0;
        int flag1,f;
        flag1=1;
        while(1)
        {
           // cout<<"flag "<<flag1<<" "<<c.x<<" "<<c.y<<endl;
            int mi,ma,j;
            mi=inf,ma=-inf,f=1;
            if(flag1==1)
            {
                for(int i=1;i<=n;i++)
                {
                    if(c.y==a[i].y&&c.x<a[i].x&&a[i].x<mi)
                    {
                        mi=a[i].x;
                        f=0;
                        j=i;
                    }
                }
                if(f) return;
                else
                {
                    if(v[0][j]) {flag=1;return ;}
                    c.x=mi-1;
                    ans++;
                    flag1=2;
                    v[0][j]=1;
                }
            }
            else if(flag1==2)
            {
    
                for(int i=1;i<=n;i++)
                {
                    if(c.x==a[i].x&&c.y>a[i].y&&ma<a[i].y)
                    {
                        ma=a[i].y;
                        f=0;
                        j=i;
                    }
                }
                if(f) return ;
                else
                { 
                    if(v[1][j]) {flag=1;return ;}
                    c.y=ma+1;
                    ans++;
                    flag1=3;
                    v[1][j]=1;
                }
            }
           else if(flag1==3)
            {
                for(int i=1;i<=n;i++)
                {
                    if(c.y==a[i].y&&c.x>a[i].x&&a[i].x>ma)
                    {
                        ma=a[i].x;
                        f=0;
                        j=i;
                    }
                }
                if(f) return;
                else
                {
                    if(v[2][j]){flag=1;return;}
                    c.x=ma+1;
                    ans++;
                    flag1=4;
                    v[2][j]=1;
                }
            }
            else if(flag1==4)
            {
                for(int i=1;i<=n;i++)
                {
                    if(c.x==a[i].x&&c.y<a[i].y&&mi>a[i].y)
                    {
                        mi=a[i].y;
                        f=0;
                        j=i;
                    }
                }
                if(f) return ;
                else
                {
                    if(v[3][j]) {flag=1;return;}
                    c.y=mi-1;
                    ans++;
                    flag1=1;
                    v[3][j]=1;
                }
            }
        }
    }
    int main()
    {
        while(scanf("%d",&n)!=EOF)
        {
            for(int i=1;i<=n;i++)
                scanf("%d%d",&a[i].x,&a[i].y);
            ans=0;
            flag=0;
            memset(v,0,sizeof(v));
            solve();
            if(flag) printf("-1
    ");
            else
            printf("%d
    ",ans);
    
        }
        return 0;
    }
  • 相关阅读:
    守护线程Daemon的理解
    Activity并行网关和排他网关
    Activity快速入门理解
    java虚拟机内存区域理解
    Maven的使用
    Mybatis拦截器(插件实现原理)
    網絡上好的博客收集
    jdbc 设置连接支持多条sql
    python 多环境安装
    Linux 系统命令
  • 原文地址:https://www.cnblogs.com/Twsc/p/7384500.html
Copyright © 2011-2022 走看看