import java.util.Arrays;
import java.util.Scanner;
public class Main{
static int s;
static int a[][] = new int[15][10];
static int m[][] = new int[4][4];
static int f1[] = new int[4];
static int f2[] = new int[10];
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
for(int i = 0 ; i < 15; i ++) {
for(int j = 0; j < 10; j++) {
a[i][j] = scanner.nextInt();
if(a[i][j]==1&&f2[j]==0) f2[j] = i;//求出大图形的底边,只更新遇到的第一个
}
}
for(int i = 0 ; i < 10;i++) {
if(f2[i]==0) f2[i] = 15;//未更新的设为15
}
Arrays.fill(f1, -1);
for(int i = 0 ; i < 4 ; i ++) {
for(int j = 0 ; j < 4 ;j ++) {
m[i][j] = scanner.nextInt();
if(m[i][j]==1) f1[j] = i;//求出小图形的底边,一直更新直到最后
}
}
s = scanner.nextInt();
down();
for(int i = 0 ; i < 15; i ++) {
for(int j = 0; j < 10; j++) {
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
private static void down() {
int min = 0x3f3f3f3f;
for(int i = 0 ; i < 4; i++) {
if(f1[i]==-1) continue;//小图i列没有1,不参与计算最小值
min = Math.min(min, f2[s+i-1]-f1[i]-1);
}//找出两个图形底边距离的最小值
for(int i = min,t = 0; t<4&&i<15; i++,t++) {
for(int j = s-1,p = 0; p < 4;p++,j++) {
a[i][j] += m[t][p];
}
}//最后把小图形覆盖上去
}
}
网友评论