CCF-CSP 201409-2図面

この問題は
  、直交座標系を定義する用紙に記載されています。(x1、y1)から(x2、y2)までの長方形を描画して、水平座標範囲x1からx2と垂直座標範囲y1からy2の間の領域をペイントします。色。
  次の図は、2つの長方形を描く例を示しています。最初の長方形は(1,1)から(4、4)で、緑と紫で表されます。2番目の長方形は(2、3)から(6、5)で、青と紫で表されます。この図では、合計15単位の領域が描かれ、そのうち紫色の部分は2回描かれていますが、面積を計算するときは1回だけ描​​かれています。実際の描画プロセスでは、すべての長方形が均一の色で描画されます。図に示されているさまざまな色は、便宜上のものです。
この質問のイラスト
  描画されるすべての四角形が与えられた場合、描画される合計領域の単位数。
入力形式入力
  の最初の行には、描画される長方形の数を表す整数nが含まれます。
  次のn行では、各行に4つの負でない整数があります。これらはそれぞれ、描画される長方形の左下隅の水平座標と垂直座標、および右上隅の水平座標と垂直座標を表します。
出力形式は、
  描画される領域の単位数を示す整数を出力します
入力例
2
1 1 4 4
2 3 6 5
出力例
15
評価のユースケーススケールと規則
  1 <= n <= 100、0 <=横座標、縦座標<= 100。

経験の要約:
水平座標と垂直座標には範囲(0以上または100を超える)があるため、2次元配列を作成し、色分けされた座標を1(つまり、マーク)に割り当て、配列をトラバースして追加できます。それだけです。
注:配列の添え字マーク。

C ++コード:

#include<bits/stdc++.h>
#define N 101
using namespace std;
int table[N][N];
int main() {
	int n,sum = 0;
	scanf("%d",&n);
	while(n--){
		int x1,y1,x2,y2;
		scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
		for(int i=x1;i<x2;i++){
			for(int j=y1;j<y2;j++){
				table[i][j] = 1;
			}
		}
	}
	for(int i=0;i<N;i++){
		for(int j=0;j<N;j++){
			sum += table[i][j];
		}
	}
	printf("%d",sum);
	return 0;
}
公開された111元の記事 ウォンの賞賛2 ビュー3533

おすすめ

転載: blog.csdn.net/m0_38088647/article/details/100538013