'commit'
This commit is contained in:
100
TangDou/XiTi/1349.cpp
Normal file
100
TangDou/XiTi/1349.cpp
Normal file
@@ -0,0 +1,100 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main() {
|
||||
//输入+输出重定向
|
||||
freopen("../1349.in", "r", stdin);
|
||||
freopen("../1349.out", "w", stdout);
|
||||
|
||||
//行15,列10
|
||||
const int N = 15, M = 10, SIZE = 4;
|
||||
//原有的模块图案
|
||||
int source[N][M] = {0};
|
||||
//为了回退加的数组
|
||||
int tmp[N][M] = {0};
|
||||
//结果
|
||||
int target[N][M] = {0};
|
||||
|
||||
int blank[N][M] = {0};
|
||||
|
||||
|
||||
|
||||
//读取初始化数据
|
||||
for (int i = 0; i < N; i++) {
|
||||
for (int j = 0; j < M; j++) {
|
||||
cin >> source[i][j];
|
||||
}
|
||||
}
|
||||
//小方块
|
||||
int small[SIZE][SIZE] = {0};
|
||||
for (int i = 0; i < SIZE; i++) {
|
||||
for (int j = 0; j < SIZE; j++) {
|
||||
cin >> small[i][j];
|
||||
}
|
||||
}
|
||||
//将小方块扩展到大模块图案一样大,即填充0解决
|
||||
int p;
|
||||
cin >> p;
|
||||
for (int i = 0; i < SIZE; ++i) {
|
||||
for (int j = 0; j < SIZE; ++j) {
|
||||
blank[i][j + p - 1] = small[i][j];
|
||||
}
|
||||
}
|
||||
//开始错行叠加
|
||||
for (int i = 0; i < N; i++) {
|
||||
//叠加
|
||||
for (int i = 0; i < N; ++i) {
|
||||
for (int j = 0; j < M; ++j) {
|
||||
tmp[i][j] = blank[i][j] + source[i][j];
|
||||
}
|
||||
}
|
||||
//检查
|
||||
bool success = true;
|
||||
for (int i = 0; i < N; ++i) {
|
||||
for (int j = 0; j < M; ++j) {
|
||||
if (tmp[i][j] > 1) {
|
||||
success = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (success) {
|
||||
//数组复制出来,可能是最终的解
|
||||
memcpy(target,tmp,sizeof(target));
|
||||
//每次错一行
|
||||
//如果方块的本行和大于0,就不能再继续了~
|
||||
int sum = 0;
|
||||
for (int j = 0; j < M; ++j) {
|
||||
sum += blank[i][j];
|
||||
}
|
||||
if (sum > 0) {
|
||||
break;
|
||||
} else {
|
||||
//删除尾行,并且在首行增加一行0
|
||||
int newBlank[N][M] = {0};
|
||||
for (int i = 0; i < N - 1; i++) {
|
||||
for (int j = 0; j < M; ++j) {
|
||||
newBlank[i + 1][j] = blank[i][j];
|
||||
}
|
||||
}
|
||||
//拷贝回去,完成预定目标
|
||||
memcpy(blank,newBlank,sizeof(blank));
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//输出结果
|
||||
for (int i = 0; i < N; ++i) {
|
||||
for (int j = 0; j < M; ++j) {
|
||||
cout << target[i][j] << " ";
|
||||
}
|
||||
cout << endl;
|
||||
}
|
||||
//关闭文件
|
||||
fclose(stdin);
|
||||
fclose(stdout);
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user