Southern and Volga Russia Qualifier 2019-2020(K. Moonbound(枚举+思维))

Southern and Volga Russia Qualifier 2019-2020(K. Moonbound(枚举+思维))_第1张图片Southern and Volga Russia Qualifier 2019-2020(K. Moonbound(枚举+思维))_第2张图片
题意:给你一个n,n是偶数,并且能构成一个nn的大方框,他在玩一个填方框的游戏,然后如果(i+j)%2==0,那么这个方框就应该放一个stone,反之就应该放一个sand,然后填方框有两种方法,但是两种方法的限制条件是一样的:
方法一:任意选一个方框,条件是这个方框必须是边界或者你填的方框和已经填的方框必须要至少有一个公共边;
方法二:任意选一个2
2的大方框,条件是这个22的方框里面必须有空的方框,同理如果你填别的22方框时候,那么就必须和已经填的方框至少有一一条公共边,所以很明显嘛,就是挨着填:
但是你会发现这个问题:
如果我按照这样的顺序填:
Southern and Volga Russia Qualifier 2019-2020(K. Moonbound(枚举+思维))_第3张图片
那么填第二个2的时候就不合法了;
所以我就到起来填:
Southern and Volga Russia Qualifier 2019-2020(K. Moonbound(枚举+思维))_第4张图片
这样填就合法了’;
所以直接两个for输出坐标就可以了(因为在填2*2方格的时候,那么肯定是左上角为出发点,题目上也说了滴);
AC代码:

#include 
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;
}

你可能感兴趣的:(枚举)