トピック出典:https://www.luogu.org/problem/P1003
タイトル説明
特別表彰式を調製するために、会場の矩形領域内の主催者は、長方形のカーペットの一部で覆われた(直交座標系の第一象限と見ることができます)。総 N- から数えN-カーペット、 1 1 、N- N-。今、これらの数に応じてカーペット昇順に順次以前に敷設されたカーペットの上にオーバーレイカーペットを敷設した後、軸に平行に敷設します。
カーペットの敷設が完了した後、主催者はポイント数の最上階を覆うカーペットを知りたいです。注:矩形の境界上の点、及びカーペットの4つの頂点がカーペットで覆われて考えることができます。
入力形式
入力コモンN-2 + N- + 2行
最初の行、整数N- n-は、の合計を表しN- n型カーペットを
次のN- 第1のn行目、 I 1 + iは+ 1は、行番号を表し、I 4つの正の整数を含む、情報IカーペットをA、B、G、K 、A 、B 、G 、K、二つの整数のそれぞれを間の空間によって分離され、それぞれ、カーペットの左下隅の座標(A、B) (、 B )ならびにカーペットXのX軸およびY 縦y軸方向
N-2 + N- + 2ラインは、2つの正の整数含まX X及びY Yを、地面を表す座標点を求めている(X、Y)を(X 、Y )
出力フォーマット
総出力1つの一行、必要カーペットの数を表す整数であり、カーペット、ここで覆われていない場合には、出力-1 - 1。
サンプル入力と出力
3 1 0 2 3 0 1 2 3 3 2 1 3 3 2 2
3
3 1 0 2 3 0 1 2 3 3 2 1 3 3 4 5
-1
説明/ヒント
[1]試料説明
以下、図1を参照すると、カーペットの実線で表される2 2、破線カーペットで示され、3 3、2本の実線で示され、ポイントカバー(2,2) (2 、2 )最上位のカーペットである 3 3いいえカーペットありません。
[データ範囲]
データの30%を、存在する N-≤2 N- ≤ 2、
データの50%について0≤A、B、G、k≤100 0 ≤ A 、B 、G 、K ≤ 1。0 0、
100%のデータそこ 0≤n万≤ 0 ≤ N- ≤ 1 0 、0 0 0、0≦A、B、G、K≤100,000 0 ≤ A 、B 、G 、K ≤ 。1 0 0 、0 0 0。
noip2011グループ1つの質問の1日目を改善
#include <iostreamの> する#include <cstdioを> 使用して 名前空間STD; int型ブック[ 10001 ] [する。5 ]; int型のmain() { int型N-、X、Y、 CIN >> N-; のための(INT I = 1 ; I <= N-; I ++ ) のための(INT J = 1。 ; J <= 4。 ; J ++)// 第3四X、Yの長さの記録、記録最初の二つの座標 CIN >>ブック[I]、[J]を; // 本[I] [1]として本配列の機能 : i番目のシートカーペット始点のx軸、[I] [2] : I-カーペットy軸を開始、[I] [3] :最初x軸端カーペットの端I、[I] [4] : y軸カーペットのi番目の端 // COUT <<ブック<< "P" << ENDL [1] [4]; CIN >> X Y; のための(INT ; I> = I = N- 1 ; i--)// におけるデカルト座標システムは、からアップスイープ { IF((書籍[I] [ 1 ] <= X)&&(書籍[I] [ 3 ] +ブック[I] [ 1 ]> = X)&& // 、決意のX yは、i番目のカーペットの範囲内である (予約[I] [ 2 ] <= Y)&&(書籍[I] [ 2 ] +ブック[I] [ 4 ]> yは=))//はi番目のシートを判定する(x、y)を上書きするかどうかカーペット。カバー、および出力端の場合。 { COUT << I。 } もし(I == 1 ) COUT << - 1 。 } 戻り 0 。 } / * 3 1 0 2 3 0 1 2 3 3 2 1 3 3 2 2 * /
その暴力は、その時点から出てくることができREコードの下に取り付けられているが、私は間違っていた、トリプルループHH
#include <iostreamの> する#include <CStringの> の#define N 100 名前空間stdを使用。 INTメイン() { // INT C [N]、[N]。 int型のブック[N] [N]; memsetの(書籍、0、はsizeof(書籍)); int型のn; 、B、G、K、INT、X、Y。 cinを>> N; 以下のために(INT i = 0; iがn <; iは++) { CIN >> A >> B >> G >> K。 用(INT J =; J <= G +; J ++) { ための(int型、L = B; L <= K + B; L ++) { ブック[J] [L] ++; } } } CIN >> X >> Y。 (ブック[X] [Y] == 0)であれば COUT << "-1" << ENDL。 他の coutの<<ブック[X] [Y] <<てendl; 0を返します。 }
私はしばらくの間、問題の解決策が満たされていない最初のカーペットに直接カーペットが条件の範囲内で開始し、最後の前方から判断し、満足して長方形の出力をであることを理解するようになった理解し、その後、直接リターン
N行4列の行列を定義し、最初の2列は、二つを表す矩形の座標、長さと幅を表します。
声明は、後に理解することは困難ではない場合。