題意:給你一個n,n是偶數,並且能構成一個nn的大方框,他在玩一個填方框的遊戲,然後如果(i+j)%2==0,那麼這個方框就應該放一個stone,反之就應該放一個sand,然後填方框有兩種方法,但是兩種方法的限制條件是一樣的:
方法一:任意選一個方框,條件是這個方框必須是邊界或者你填的方框和已經填的方框必須要至少有一個公共邊;
方法二:任意選一個22的大方框,條件是這個22的方框裏面必須有空的方框,同理如果你填別的22方框時候,那麼就必須和已經填的方框至少有一一條公共邊,所以很明顯嘛,就是挨着填:
但是你會發現這個問題:
如果我按照這樣的順序填:
那麼填第二個2的時候就不合法了;
所以我就到起來填:
這樣填就合法了’;
所以直接兩個for輸出座標就可以了(因爲在填2*2方格的時候,那麼肯定是左上角爲出發點,題目上也說了滴);
AC代碼:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
while(~scanf("%d",&n)){
int k=3*n*n/4;
printf("%d\n",k);
for(int i=n-1;i>=1;i-=2){
for(int j=1;j<=n-1;j+=2){//這裏不用判斷奇數偶數,因爲奇數+奇數肯定是偶數
printf("1 %d %d 1\n",i,j);
printf("1 %d %d 1\n",i+1,j+1);
printf("2 %d %d 2\n",i,j);
}
}
}
return 0;
}