• P4874 回形遍历 —模拟


    思路:

       写完后信心满满,结果超时。

      我很不解,下了个数据结果——,z竟然是大于1e10的,跟题目给的不一样啊

      原来如此,正解是一行一行的走的。。。
      注意当到两边一样近时,应优先向下和右!!!!!!

     这是个50分代码

    #include<iostream>
    #include<queue>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    #define N 100009 
    int n,m,x,y,z;
    int deep,dir;
    int dx[4]={1,0,-1,0},dy[5]={0,1,0,-1};
    int main()
    {
        scanf("%d%d%d%d%d",&n,&m,&x,&y,&z);
        deep=min(x,y);deep=min(deep,min(n-x,m-y));
        if(deep==x)    dir=4;
        if(deep==y) dir=1;
        if(deep==(n-x))    dir=2;
        if(deep==(m-y))    dir=3;
        dir--;n--,m--; 
        for(int i=1;i<=z;i++)
        {
            if(x+dx[dir]>=deep&&y+dy[dir]>=deep&&x+dx[dir]<=n-deep&&y+dy[dir]<=m-deep)
                x+=dx[dir],y+=dy[dir];
            else
            {
                dir=(dir+1)%4;
                x+=dx[dir],y+=dy[dir];
            }        
        }
        printf("%d %d",x,y);
        return 0;
    } 

     这是个AC代码

    #include<iostream>
    #include<queue>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    long long  n,m,x,y,z;
    long long  deep,dir,len;
    int main()
    {
        
        scanf("%lld%lld%lld%lld%lld",&n,&m,&x,&y,&z);n--,m--;
        deep=min(x,y);deep=min(deep,min(n-x,m-y));    
        if(deep==(m-y))    dir=3;
        if(deep==x)    dir=4;
        if(deep==y) dir=1;    
        if(deep==(n-x))    dir=2;
        if(x==(n-x)&&x==deep)
            dir=2;
        if(y==(m-y)&&y==deep)
            dir=1;
        
        dir--;
        while(z+1>=0)
        {
            if(dir==0)
            {
                len= n-x-deep;
                if(z>len)
                {
                    z-=len;    x+=len;
                    dir=1;
                }else
                {
                    printf("%lld %lld",x+z,y);
                    return 0;
                }
            }else
            if(dir==1)
            {
                len=m-y-deep;
                if(z>len)
                {
                    z-=len;    y+=len;
                    dir=2;
                }else
                {
                    printf("%lld %lld",x,y+z);
                    return 0;
                }
            }else
            if(dir==2)
            {
                len=x-deep;
                if(z>len)
                {
                    z-=len;x=deep;
                    dir=3;
                }else
                {
                    printf("%lld %lld",x-z,y);
                    return 0;
                }
            }else
            if(dir==3)
            {
                deep++;
                len=y-deep;
                if(z>len)
                {
                    z-=len;y=deep;
                    dir=0;
                }else
                {
                    printf("%lld %lld",x,y-z);
                    return 0;
                }
                
            }
        
        }    
        return 0;
    } 
  • 相关阅读:
    2017年前端开发者应该重拾基本技能学习
    手机号码月消费档次API
    实用且免费API接口2
    在线文档转换API word,excel,ppt等在线文件转pdf、png
    火车票抢票API 根据乘客的车次与座席要求快速订票出票
    利用问答机器人API开发制作聊天类App
    用聚合数据API(苏州实时公交API)快速写出小程序
    OllyDbg使用笔记
    解决git commit 大文件推送失败
    每日一语
  • 原文地址:https://www.cnblogs.com/CLGYPYJ/p/7619932.html
Copyright © 2020-2023  润新知