牛客练习赛31 龙魂合一萨坎与晶石
链接:https://ac.nowcoder.com/acm/contest/218/E
来源:牛客网
题解:其实就是按照一种规律下去划线就完事了,自己找几张图画一下,不难理解,举例说明n=4;
需要注意的是第一步不要斜对角得画,很明显歪着画,能多画一点。
一个循环划上面的线,贴着第一列画(起点是第一列),步骤如下:
一个循环划下面的线,贴着第一行画(起点是第一行)。
最后画亘古不变的两条线:一个是最上面一行的矩形的对角线,另一个是最后一列的矩形的对角线。
题目描述
「文词只是浪费时间。 毁灭这语言人人都懂。」 ——萨坎沃
萨坎重回乌金之眼,他发现乌金之眼正因之前的交战被开启。他思索着主人的目的,突然发现巨龙形态下的自己可以读懂晶石上的铭文。他变成巨龙,驱散了另一条堕落的龙魂,阅读了晶石上的神秘铭文。他具体读到了什么我们不得而知,我们只知道,阅读铭文后的萨坎只想切碎所有的晶石。
浮在空中的晶石排列成了一个 n x n 的方格阵。每个单位边长的方格内有一颗晶石。萨坎能做的是选择两个不同的落在方格阵边界的交点,然后用剑沿着这两点连线割下去。如果一个方格被割断(只割到顶点或边界不算割断),那么这个方格内的晶石将失去能量。
如上图所示,这是一个 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;
}