Forever Young

洛谷 P5461 赦免战俘

传送门

思路

洛谷7月月赛第一题

着实是一道大水题,然后我月赛的时候没做出来......

就是一道大模拟题呀,直接dfs就好了,我是反着处理的,所以最后要输出\(1-a[i][j]\)

#include <bits/stdc++.h>
#define N 1 << 10
using namespace std;

int a[N][N], n;

void solve(int x, int y, int l) { //x、y表示起点的横纵左边,l表示长度
	if(a[x][y]) return;//sd的剪枝?
	for(int i = x; i <= x + l - 1; i++) {
		for(int j = y; j <= y + l - 1; j++) {
			a[i][j] = 1;
		}
	}
	if(l == 1) return;//边界条件
	//递归其他三个区间
	solve(x + l, y, l >> 1);
	solve(x, y + l, l >> 1);
	solve(x + l, y + l, l >> 1);
}

int main() {
	scanf("%d", &n);
	int p = 1 << n;
	solve(1, 1, p / 2);
	for(int i = 1; i <= p; i++) {
		for(int j = 1; j <= p; j++) {
			cout << 1 - a[i][j] << ' ';
		}
		cout << '\n';
	}
	return 0;
}

posted @ 2019-07-15 07:37  Loceaner  阅读(460)  评论(0编辑  收藏  举报