牛客練習賽31 龍魂合一薩坎與晶石
題解:其實就是按照一種規律下去劃線就完事了,自己找幾張圖畫一下,不難理解,舉例說明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;
}