牛客练习赛31 龙魂合一萨坎与晶石

链接:https://ac.nowcoder.com/acm/contest/218/E
来源:牛客网

 


题解:其实就是按照一种规律下去划线就完事了,自己找几张图画一下,不难理解,举例说明n=4;

需要注意的是第一步不要斜对角得画,很明显歪着画,能多画一点。

一个循环划上面的线,贴着第一列画(起点是第一列),步骤如下:

一个循环划下面的线,贴着第一行画(起点是第一行)。

最后画亘古不变的两条线:一个是最上面一行的矩形的对角线,另一个是最后一列的矩形的对角线。

​​​​​​​

题目描述

「文词只是浪费时间。 毁灭这语言人人都懂。」           ——萨坎沃

 

       萨坎重回乌金之眼,他发现乌金之眼正因之前的交战被开启。他思索着主人的目的,突然发现巨龙形态下的自己可以读懂晶石上的铭文。他变成巨龙,驱散了另一条堕落的龙魂,阅读了晶石上的神秘铭文。他具体读到了什么我们不得而知,我们只知道,阅读铭文后的萨坎只想切碎所有的晶石。

       浮在空中的晶石排列成了一个 n x n 的方格阵。每个单位边长的方格内有一颗晶石。萨坎能做的是选择两个不同的落在方格阵边界的交点,然后用剑沿着这两点连线割下去。如果一个方格被割断(只割到顶点或边界不算割断),那么这个方格内的晶石将失去能量。

 

i2UxsA.png

 

       如上图所示,这是一个 3 x 3 的方格阵。其中橙色部分表示被割断的方格;深红色线表示割下的路径。每个交点的坐标标记在其附近。

       经过交战,萨坎剩余的能量只够切割 n+1 次。由于种种原因,萨坎必须切恰好 n+1 刀,并且萨坎所切的 n+1 刀中,不能有任何两刀平行。有着丰富经验的萨坎在砍完 n+1 刀之后所有的晶石都失去了能量。

       现在请聪明的你也学着像萨坎那样,在这个 n x n 的方格中,切恰好 n+1 刀,使所有方格都能被割断。

输入描述:

第一行一个正整数 T ,表示有 T 组测试数据。
接下去每组测试数据输入一行,包含一个正整数 n 。

输出描述:


 

每个测试数据输出 n+1 行,每行四个整数 px, py, qx, qy ,表示一条由点 (px, py) 和点 (qx, qy) 连成的直线。点 (px, py) 和点 (qx, qy) 必须落在方格阵的边界上,且两点不能相同。

每行的四个整数之间请用一个空格隔开,行末请不要添加多余空格。文末请不要输出多余信息。

示例1

输入

复制

1
2

输出

复制

0 0 1 2
1 2 2 0
0 0 2 0

说明


 

分割方案如下图所示。

备注:

1 ≤ N ≤ 2000
1 ≤ T ≤ 20

代码

#include <iostream>
#include <cstdio>
#include <bits/stdc++.h>
using namespace std;

int main(){
    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        if(n==1){
            cout<<"0 0 1 1"<<endl;
            cout<<"0 0 1 0"<<endl;
            continue;
        }
        //printf("%d %d %d %d\n",0,0,n,n-1);
        for(int i=0;i<n-1;i+=2){
            printf("%d %d %d %d\n",i,0,n,n-1-i);
        }
        for(int i=1;i<n-1;i+=2){
            printf("%d %d %d %d\n",0,i,n-1-i,n);
        }
        printf("%d %d %d %d\n",0,n,n,n-1);
        printf("%d %d %d %d\n",n,0,n-1,n);
    }
    return 0;
}

 

 

posted @ 2018-11-17 13:48  UUUUh  阅读(174)  评论(0编辑  收藏  举报