アルゴリズムチャレンジ-13
リカバリ16967アレイ
質問する
サイズH× W配列Aと2つの整数XとYを持つ場合、大きさは(H+X)× (W+Y)の配列Bは、配列Aと配列AとをX格子下に移動し、Y格子右に移動する配列を重ね合わせることができる.オーバーラップ数を加算します.
すなわち,配列Bの(i,j)の値は次の3つの値の1つである.
配列Bと整数X,Yが与えられた場合,配列Aを求める.
入力
第1行は4つの整数H,W,X,Yを与える.2行目からH+X行にBを配列する要素があります.
配列Aが常に存在する場合のみ入力とする.
しゅつりょく
共H行出力配列Aの要素.
制限
入力例
2 4 1 1
1 2 3 4 0
5 7 9 11 4
0 5 6 7 8
サンプル出力
1 2 3 4
5 6 7 8
コード#コード#
import java.util.*;
public class Main{
public static int[][] BList;
public static int[][] AList;
public static String[][] AStringList;
public static int i;
public static int j;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int H = scanner.nextInt();
int W = scanner.nextInt();
int X = scanner.nextInt();
int Y = scanner.nextInt();
BList = new int[H+X][W+Y];
AList = new int[H][W];
AStringList = new String[H][W];
for(i=0;i<H+X;i++){
for(j=0;j<W+Y;j++){
BList[i][j]=scanner.nextInt();
}
}
findAList(H,W,X,Y);
for(i=0;i<H;i++){
for(j=0;j<W;j++){
AStringList[i][j]=Integer.toString(AList[i][j]);
}
}
for(i=0;i<H;i++) {
System.out.println(String.join(" ",AStringList[i]));
}
}
public static void findAList(int H, int W, int X, int Y){
for(i=0;i<X;i++){
for(j=0;j<W;j++){
AList[i][j]=BList[i][j];
}
}
for(i=X;i<H;i++){
for(j=0;j<Y;j++){
AList[i][j]=BList[i][j];
}
for(j=W;j<W+Y;j++){
AList[i-X][j-Y]=BList[i][j];
}
}
for(i=H;i<H+X;i++){
for(j=Y;j<W+Y;j++){
AList[i-X][j-Y]=BList[i][j];
}
}
for(i=H-1;i>=X;i--){
for(j=W-1;j>=Y;j--){
AList[i-X][j-Y]=BList[i][j]-AList[i][j];
}
}
}
}
Reference
この問題について(アルゴリズムチャレンジ-13), 我々は、より多くの情報をここで見つけました https://velog.io/@kimchiwarrior/알고리즘-도전기-13テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol