洛谷 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 << '
';
}
return 0;
}