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;
    }
  • 相关阅读:
    JavaScript Array filter() 方法
    Object.assign方法的使用入门
    使用ES6新特性async await进行异步处理
    win10系统怎么设置软件开机启动
    【ES6学习笔记之】Object.assign()高级编程
    如何使用闭包形成计数器
    多次调用settimeout 如何使用单例模式
    在线表单设计器现在已经开源
    VisualStudio2017集成GitHub
    PHP使用curl替代file_get_contents
  • 原文地址:https://www.cnblogs.com/Twsc/p/7384500.html
Copyright © 2011-2022 走看看