1. 程式人生 > >牛客練習賽31 龍魂合一薩坎與晶石

牛客練習賽31 龍魂合一薩坎與晶石


題解:其實就是按照一種規律下去劃線就完事了,自己找幾張圖畫一下,不難理解,舉例說明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;
}