タイトル説明
並木道路のゲート長L外部学校、隣り合う木の間隔は1メートルです。我々は、軸の位置番号0、他端位置Lに、軸として道路の一端を道路番号を置くことができ、数直線上の各整数点、すなわち、0,1,2、...、Lは、樹種です。
地下鉄を構築するために使用する道路上のいくつかの分野がありますので。数は、その軸線とこれらの領域は、開始点と終了点を表します。整数である、部分領域間にオーバーラップすることができる領域の任意の既知の開始点と終了点の座標。さて、(端部領域において、2つのツリーを含む)我々これらの地域の木を除去しました。あなたの仕事は、これらの木の計算は、道路上にあるどのように多くの木々、削除されています。
入力形式
最初の行は、2つの整数L有する(1≤L≤10000)とM (1≤M≤100) 、道路の代表的な長さLを、MはLとMとの間の領域を表す数値は、スペースによって分離されています。
次のMラインはスペースで区切られた2つの異なる整数、領域の開始点と終了点を示す座標を含みます。
出力フォーマット
道路上のツリーを残りの数を示す整数。
サンプル入力と出力
入力#1
500 3 150 300 100 200 470 471
出力#1
298
説明/ヒント
2番目のタイトルのNOIP2005普遍集合
ために20 \%2 0 データの%、部分領域間に重複が存在しません。
領域間にオーバーラップされ、他のデータ、のために。
思考:
実際には、これはエントリーレベルの質問ですが、テストポイントの提出時には常にいくつかの問題である、その理由は慎重に十分な、配列を開くために十分な大きさではありません。私はアカウントへのデータのM個のグループを取る開始する配列のサイズを定義するために使用され、対象が範囲が与えられる。1 ≤ M ≤ 1 0 0は、アレイ100に開放されます。しかし、最初のテスト実行中に、私が出力することは不可能見つけました。その後、私はあまりにも小さな木の配列に代わって使用することを発見しました。被写体が与えられているので。1 ≤ L ≤ 1。0 0 0 0、私は万にオープン配列のサイズを変更しますので。テストの結果は、あなたが答えを与えることができますが、テストデータを渡すこともでき、実行されているが、それでも時にAC提出することができない、それを考えているだろう。注意深く再度見つかった被写体を、それを見るために、そのLの範囲のトピックがあるが、1 ≤ L ≤ 1 0 0 0 0、しかし、道路終点は植林、手段であることLを使用する木の数を表す場合、実際に、次いでLの範囲であるべきである1 ≤ L ≤ 1つの0 0 01魚類。修正後、最終的な結果は、ACだろう。
完全なコード:
する#include <stdio.hの> に#define N 10001 INT のmain() { int型の L、M、I、J、SUM = 0、A [N]、B [N]、C [N] = { 0 }; // C [N]アレイはツリーを表すために使用され、初期値はゼロであり、それはまだ削除されていない scanfの(「%Dの%のD 」、&L、&M); //は地域の道路の長さおよび数入力 のための(I = 0。 I <M、I ++ ) scanfの(" %D%D "、および[I]、&B [I]); // 入力各データの開始点 のために(私は= 0 ; I <M、I ++ ) { IF( [I]> B [I]) { 用(J = B [I]; J <= A [I]; J ++ ) C [J] = 1 ; } IF(A [I] <= B [I]) { 用 J(J = A [I] <B = [I]; J ++ ) C [J] = 1 ; } } // により正確に入力開始および終了ように、第1のサイズを決定するか否か不確実です。 // 木マーカーは、領域内にある1。 ために(私は= 0 ; I <= L; I ++ ) IF(C [I] == 0 ) SUM = SUM + 1 ; // 判断しなかった標識木がC [ I] = 0、+の総数は+1しました のprintf(" %Dを"、和); リターン 0 ; }
トピックリンク:https://www.luogu.com.cn/problem/P1047