ブルーブリッジカップ歴代試験問題---ペンキ面積---Java


問題はX星の考古ロボットが廃墟の上で考古学をしていることを示している.この領域の地面は石のように硬く、鏡のように平らである.管理者は便利のために、標準的な直角座標系を確立した.
各ロボットにはそれぞれ特技があり、絶技を身につけています.興味のある内容も違います各種の測定により、各ロボットは1つ以上の矩形領域を優先考古学の領域として報告する.
矩形の表示形式は(x 1,y 1,x 2,y 2)であり、矩形の2つの対角点座標を表す.
目立つように、本部はすべてのロボットが選択した矩形の領域に黄色のペンキを塗るように要求した.明ちゃんはペンキ屋になる必要はありませんが、全部でどれだけのペンキがかかるか計算する必要があります.
実はこれも難しくなく、すべての矩形で覆われている領域が全部でどれだけの面積を持っているかを算出すればいいのです.なお、各矩形間が重なる場合があります.
本題の入力はいくつかの矩形であり,その被覆の総面積を出力することが要求される.フォーマットの最初の行、1つの整数nを入力して、どれだけの矩形(1<=n<10000)の次のn行があるかを表して、各行は4つの整数x 1 y 1 x 2 y 2があって、スペースは分けて、矩形の2つの対角頂点座標を表します.(0<=x 1,y 1,x 2,y 2<=10000)出力フォーマットは、矩形で覆われた総面積を表す整数行である.サンプル入力3 1 5 10 3 1 20 2 7 17サンプル出力340サンプル入力3 5 2 10 6 2 7 12 8 1 15サンプル出力128データ規模と所定ピークメモリ消費(仮想マシン含む)<256 M CPU消費<2000 ms
以前、似たような2次元空間の面積問題に遭遇したことがありますが、慣性思考だけでは各図形の交差関係を計算するのは難しいので、突発的に2次元配列を使いたいと思っていました.1つのセルが面積を表しているので、確かに解決できることがわかりました.しかし、intで2次元配列を作成すると、最大範囲10000はメモリオーバーフロー(約400+MB)になります.そこでこのお兄さんを参考にhttps://blog.csdn.net/qq_39630587/article/details/79758381の考え方はそっくりで、intをbooleanに変更すればいい(booleanは1バイト、intは4バイト).運行後にこのお兄さんを発見しましたhttps://blog.csdn.net/listener_yjt/article/details/80353506のアルゴリズムは速度と空間的にもっと優れているので、勉強します!
import java.util.*;
public class Main {
    public static void main(String[] args) {
    	Scanner sn = new Scanner(System.in);
    	
    	boolean [][]coordinate = new boolean[10000][10000];
    	
    	int n = sn.nextInt();
    	for(int i = 0;i < n;i++)
    	{
    		int x1 = sn.nextInt();
    		int y1 = sn.nextInt();
    		int x2 = sn.nextInt();
    		int y2 = sn.nextInt();
    		for(int j = x1;j < x2;j++)
    			for(int k = y1;k < y2;k++)
    			{
    				if(coordinate[j][k] == false)
    					coordinate[j][k] = true;
    			}
    	}
    	
    	int count = 0;
    	for(int i = 0;i < 10000;i++)
    		for(int j = 0;j < 10000; j++)
    		{
    			if(coordinate[i][j] == true)
    				count++;
    		}
    	
    	System.out.print(count);
    	sn.close();
    }
}

才疎学浅、各位の批判と指導を望みます!
評価の時に6つのデータ、第1の最小のデータの間違い、2人の長兄はすでに述べて、答えの間違いであるべきです(評価は答えを出して3796、私達は4909を出します)各位の指導を望みます!