HihoCoder 1257(2015 Asia Beijing Regional Contest)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<algorithm>
#include<queue>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<list>
#define mem(x,y)memset(x,y,sizeof(x))
#define max(a,b)(a)>(b)?(a):(b)
#define min(a,b)(a)<(b)?(a):(b)
#define INF 0x1f1f1f1f
#define M 10000007
#define eps 1e-10
using namespace std;
typedef long long int LL;
const int maxn= 5005;
int n;
struct qxw
{
    int x,y;
};
qxw a[maxn][maxn];
void fangji(int sx,int sy,int e,int nn,int p)
{
    int i,j;
    int xx=sx,yy=sy;
    for(i=1; i<=nn; i++)
    {
        if(i<e)
        {
            a[p][i].x=xx;
            a[p][i].y=yy;
            xx++;
        }
        else if(i==e)
        {
            a[p][i].x=xx;
            a[p][i].y=yy;
            yy++;
        }
        else
        {
            a[p][i].x=xx;
            a[p][i].y=yy;
            yy++;
        }
    }
}
void hengfangou(int sx,int sy,int e,int nn,int p)
{
    int i,j;
    int xx=sx,yy=sy;
    for(i=1; i<=nn; i++)
    {
        if(i<e)
        {
            a[p][i].x=xx;
            a[p][i].y=yy;
            yy--;
        }
        else if(i==e)
        {
            a[p][i].x=xx;
            a[p][i].y=yy;
            xx++;
        }
        else
        {
            a[p][i].x=xx;
            a[p][i].y=yy;
            yy++;
        }
    }
}
void shufangou(int sx,int sy,int e,int nn,int p)
{
    int i,j;
    int xx=sx,yy=sy;
    for(i=1; i<=nn; i++)
    {
        if(i<e)
        {
            a[p][i].x=xx;
            a[p][i].y=yy;
            xx--;
        }
        else if(i==e)
        {
            a[p][i].x=xx;
            a[p][i].y=yy;
            yy++;
        }
        else
        {
            a[p][i].x=xx;
            a[p][i].y=yy;
            xx++;
        }
    }
}
int main()
{
    int i,j,k,l;
    while(~scanf("%d",&n))
    {
        int h,w;
        int num=((n+1)*n)/2;
        if(n==1)
        {
            printf("1 1\n");
            printf("1 1\n");
            continue;
        }
        if(n==2)
        {
            printf("1 3\n");
            printf("1 1\n");
            printf("1 2 1 3\n");
            continue;
        }
        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");
            continue;
        }
        if(n%2==0)
        {
            h=(n-1)/2+1;
            w=num/h;
            printf("%d %d\n",h,w);
            int s1=1;
            for(i=n-1; i>=1; i-=2)
            {
                fangji(1,s1,i/2+1,i,i);
                s1++;
            }
            int s2=h;
            for(i=n; i>=4; i-=4)
            {
                shufangou(h,s2+1,i/2,i,i);
                s2+=2;
            }
            int s3=1;
            for(i=n-2; i>=4; i-=4)
            {
                hengfangou(s3,w,i/2,i,i);
                s3+=2;
            }
            if((n/2)%2==0)
            {
                a[2][1].x=h-1,a[2][1].y=w;
                a[2][2].x=h,a[2][2].y=w;
            }
            else
            {
                a[2][1].x=h,a[2][1].y=w-1;
                a[2][2].x=h,a[2][2].y=w;
            }
            for(i=1;i<=n;i++)
            {
                for(j=1;j<=i;j++)
                {
                    printf("%d %d%c",a[i][j].x,a[i][j].y,j==i?'\n':' ');
                }
            }
        }
        else
        {
            h=n/2+1;
            w=num/h;
            printf("%d %d\n",h,w);
            int s1=1;
            for(i=n; i>=1; i-=2)
            {
                fangji(1,s1,i/2+1,i,i);
                s1++;
            }
            int s3=1;
            for(i=n-1; i>=4; i-=4)
            {
                hengfangou(s3,w,i/2,i,i);
                s3+=2;
            }
            int s2=h;
            for(i=n-3; i>=4; i-=4)
            {
                shufangou(h,s2+1,i/2,i,i);
                s2+=2;
            }
            if(((n-1)/2)%2==0)
            {
                a[2][1].x=h,a[2][1].y=w-1;
                a[2][2].x=h,a[2][2].y=w;
            }
            else
            {
                a[2][1].x=h-1,a[2][1].y=w;
                a[2][2].x=h,a[2][2].y=w;
            }
            for(i=1;i<=n;i++)
            {
                for(j=1;j<=i;j++)
                {
                    printf("%d %d%c",a[i][j].x,a[i][j].y,j==i?'\n':' ');
                }
            }
        }
    }
    return 0;
}
發佈了151 篇原創文章 · 獲贊 41 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章