【构造】UVALive - 7269 I - Snake Carpet

I - Snake Carpet  UVALive - 7269

题意:构造出一个矩阵,使得矩阵含有n条蛇,每条蛇的长度是1到n,并且奇数长度的蛇有奇数个拐弯,偶数长度的蛇有偶数个拐弯.

5 5 5 3 3
5 4 4 3 2 
5 4 4 1 2

5 5 5 3 3 6 6
5 4 4 3 2 6 6 
5 4 4 1 2 6 6

5 5 5 3 3 6 6
5 4 4 3 2 6 6
5 4 4 1 2 7 6
7 7 7 7 7 7 6

特判1-5的

其他就是偶数放右,奇数放左

#include <bits/stdc++.h>
using namespace std;
int n;
void shuchu()
{
    if(n==1)
    {
        printf("1 1\n");
        printf("1 1\n");
    }
    else if(n==2)
    {
        printf("1 3\n");
        printf("1 1\n");
        printf("1 2 1 3\n");
    }
    else if(n==3)
    {
        printf("2 3\n");
        printf("1 2\n");
        printf("1 3 2 3\n");
        printf("1 1 2 1 2 2\n");
    }
    else if(n==4)
    {
        printf("2 5\n");
        printf("1 4\n");
        printf("1 5 2 5\n");
        printf("1 1 2 1 2 2\n");
        printf("1 2 1 3 2 3 2 4\n");
    }
    else if(n==5)
    {
        printf("3 5\n");
        printf("3 4\n");
        printf("1 4 1 5\n");
        printf("2 4 2 5 3 5\n");
        printf("2 2 2 3 3 3 3 2\n");
        printf("3 1 2 1 1 1 1 2 1 3\n");
    }
}

int main()
{
    while(~scanf("%d",&n))
    {
        if(n<=5)
        {
            shuchu();
            continue;
        }
        if(n%2) printf("%d %d\n",(n+1)/2,n);
        else printf("%d %d\n",n/2,n+1);
        printf("3 4\n");
        printf("1 4 1 5\n");
        printf("2 4 2 5 3 5\n");
        printf("2 2 2 3 3 3 3 2\n");
        printf("3 1 2 1 1 1 1 2 1 3\n");
        for(int i=6;i<=n;i++)
        {
            if(!(i%2))
            {
                int t=i/2;
                if(i==n)
                {
                    for(int j=t;j>=1;j--)
                    {
                        //cout<<j<<" "<<i<<" ";
                        printf("%d %d ",j,i);
                    }
                    for(int j=1;j<=t;j++)
                    {
                        if(j!=t) printf("%d %d ",j,i+1);
                        else printf("%d %d\n",j,i+1);
                    }
                }

                else
                {
                    for(int j=t-1;j>=1;j--) printf("%d %d ",j,i);
                    for(int j=1;j<=t+1;j++)
                    {
                        if(j!=t+1) printf("%d %d ",j,i+1);
                        else printf("%d %d\n",j,i+1);
                    }
                }
            }
            else
            {
                for(int j=1;j<=i-1;j++) printf("%d %d ",(i+1)/2,j);
                printf("%d %d\n",(i-1)/2,i-1);
            }
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41037114/article/details/82990478