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;
    }
  • 相关阅读:
    前端知识点(1)
    js防抖和节流
    react生命周期方法有哪些?
    vue音乐播放器
    vue天气查询
    vue+axios安装
    vue 实现todolist,包含添加,删除,统计,清空,隐藏功能
    vue简单计数器
    手动搭建的react环境中,关于图片引入的问题
    promise封装ajax
  • 原文地址:https://www.cnblogs.com/Twsc/p/7384500.html
Copyright © 2011-2022 走看看