白準-10163号(カラー紙)
質問元:https://www.acmicpc.net/problem/10163
質問する平面上には、N枚の色の異なる長方形の色紙が順に並んでいる.このとき色紙が斜めに置かれていない場合.すなわち、すべてのカラー紙のエッジは互いに平行であるか、互いに垂直であるか、または両方である.図-1は、1番、2番、3番の3枚の色紙の並び順を示しています.
図1ここでは図-2に示すように、4番のカラー紙をもう1枚置くと、3番のカラー紙が完全に隠れて見えなくなります.そして、1番と2番は部分的に隠し、4番は完全に隠します.
図-2 N枚のカラー紙が順番に指定された位置に置かれている場合は、各カラー紙が見える部分の面積を求めるプログラムを作成します. の最大サイズ1001*1001のアレイを発表しました. から入力されたカラー紙に従って、1を増やし、カラー紙の領域を数字で埋めます. の最後に、配列全体を探索し、各色紙表示領域の数字を算出し、正解を導いた.
質問する
図1
図-2
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(reader.readLine());
StringBuilder sb = new StringBuilder();
int[][] paper = new int[1001][1001];
int[] count = new int[N + 1];
for (int i = 0; i < N; i++) {
StringTokenizer tokenizer = new StringTokenizer(reader.readLine());
int col = Integer.parseInt(tokenizer.nextToken());
int row = Integer.parseInt(tokenizer.nextToken());
int width = Integer.parseInt(tokenizer.nextToken());
int height = Integer.parseInt(tokenizer.nextToken());
for (int j = row; j < row + height; j++) {
for (int k = col; k < col + width; k++) {
paper[j][k] = i + 1;
}
}
}
for (int i = 0; i < 1001; i++) {
for (int j = 0; j < 1001; j++) {
count[paper[i][j]]++;
}
}
for (int i = 1; i <= N; i++) {
sb.append(count[i]).append("\n");
}
System.out.println(sb);
}
}
Reference
この問題について(白準-10163号(カラー紙)), 我々は、より多くの情報をここで見つけました https://velog.io/@ghc1124/백준-10163번색종이テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol