1. 程式人生 > >【構造】UVALive - 7269 I - Snake Carpet

【構造】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;
}