zoukankan      html  css  js  c++  java
  • 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;
    } 
  • 相关阅读:
    css知多少(10)——display
    css知多少(9)——float下篇
    centos-lynx
    linux-redis
    springMVC robots.txt 处理
    .net core
    docker快速入门+搭建javaweb环境
    maven+spring+springMVC+mybatis+dubbox
    微信群之社群经济的魔力
    maven项目部署打包
  • 原文地址:https://www.cnblogs.com/CLGYPYJ/p/7619932.html
Copyright © 2011-2022 走看看