CCF - 201709から2公開鍵箱

トピック:

問題の説明
  共有学校の教師がある Nの 公開鍵ボックスに配置する必要がすべてのキーの規定に従って教室は、先生が家の鍵を取ることができません。クラスの各先生の前に、彼らはクラスの後、ドアを開き、キーボックスに戻ってキーを置くために、キーボックスキーから自分の公立学校の教室を見つける必要があります。
  キーボックス合計 N個の ハングアップしたように、行の左から右へのフック、 N キー教室。教師は、キーを混同しないように位置をぶら下げ鍵の束は、固定されていないが、キーで標識されています。
  するたびにキーをピックアップ、および他のキーが動かない間、教師は、彼らは除去する必要があるキーを見つけます。教師はまた、キーフックは左端の空に見つける際に、各キーにも、フックにぶら下がっキー。多くの教師もキーがある場合、また昇順にその番号へのキーを押してください。同時に両方の教師が鍵を取るために別の教師の鍵である場合は、最初のキー教師はまた戻って全体を削除します。
  今日は、キーボックス内の小から大に番号順にキーの始まりです。そこ Kの 授業に出席するため、教師、各教師が必要なキーが与えられ、キーボックス内のキーは最終的に何が何であるかをオーダー、授業時間も重要な時間であると仮定すると、クラスのクラスの時間と期間を開始?
入力形式
  入力の最初の行は二つの整数含ま N 、  Kを
  次の Kの 三つの整数のライン W 、  S 、  Cは 、あなたが教師を使用するキー番号、学校はクラスの時間と期間を開始表します。そこに同じ鍵を使用して多くの教師かもしれませんが、キーの時間を使って、教師は重複しません。
  入力データが入力フォーマットを満たしていることを確認し、あなたは、データの正当性を確認する必要はありません。
出力フォーマット
  出力線を含む N個の 整数を、それぞれ吊りフックキー番号のそれぞれについて、隣接する整数の間のスペースで区切られました。
サンプル入力
5 2
4 3 3
2 2 7
サンプル出力
1 4 3 2 5
サンプル説明
  時刻から最初の教師は、瞬間6におけるように、キー、時間の3つのユニットを使用して、鍵3番4教室の使用を開始します。鍵の使用を開始する時刻2から第教師は、また、重要な瞬間9にそれほど時間の7単位を、使用します。
  キー状態各臨界時間以下の後に(Xは空を表す):
  時間2の後1X345に、
  3時間1X3X5後、
  時間6 143X5後、
  時間は9 14325です。
サンプル入力
5 7
1 1 14
3 3 12
1 15 12
2 20 7
3 18 12
4 21 19
5 30 9
サンプル出力
1 2 3 5 4
評価尺度の例とで合意
  評価のユースケース30%,. 1≤ための  N 、  K  ≤10 ,. 1≤  W  ≤  N 、1≤。  S 、  C  ≤30、
  評価用症例の60%,. 1≤  N 、  K  ≤50、1≤  W  ≤  N 、 。≤1  S  ≤300、1≤  C  ≤50、
  レビューのためにすべてのユースケース,. 1≤  N 、  K  ≤1000,1≤  W  ≤  N 、1≤。  S  ≤10000,1≤  C  ≤100。

問題解決:

#include <iostreamの> 
する#include <アルゴリズム> 
 使用して 名前空間STD;
 ストラクトノード{
     INT W; // キー番号
    INT T; // 時間
    のintタイプ; // 0を借りを表し、1は、さらに、バック表す
    BOOLの 演算子(< CONSTノードA&)のconst {
         返す(T == AT)(W <AW):( T <?AT); 
    } 
} A [ 2001 ];
 int型のmain()
{ 
    int型N-、K; 
    CIN >> N- K、
     INT = M 0;
    int型、C、S、W;
    一方、(K-- 
    { 
        CIN W >> C >> S。
        [M] .W = W。
        [M] .T = C。
        [M] .TYPE = 0 
        M ++ ; 
        [M] .W = W。
        [M] .T = S + C。
        [M] .TYPE = 1 
        M ++ ; 
    } 
    ソート(A + M)。
    int型の鍵[ 1001 ]; // 钥匙挂钩
    以下のためにint型 I = 0 ;私は= < 1001 ; I ++は
    { 
        キー[I] = Iであり; 
    } 
    int型 I = 0、J = 0 ;
     のための(I = 0 ;私は<M、I = J)
    { 
        ため(JをI =; J <&& mは[J]が.T [I] .T ==; Jを++); // 時間を見つけるときに、同じ時間
         // も同時に状況の処理
        のためにint型 K = I、K <J ; K ++ 
        { 
            IF([K] .TYPE == 1 
            { 
                int型のP;
                 のために(P =。1 ; P <= N - &&キー[P]、P ++ ); 
                キー[P] = [K] .W; 
            } 
            
         } 
      //プロセス場合によって同じ時間
のためにint型 K = I、K <J、K ++ { IF(A [K] .TYPE == 0 { int型のP; のために(P = 1 ; P <= N-、P ++ { IF([K] .W == キー[P]) { キー[P] = 0 ; BREAK ; } } } } } のために(i = 1 ; iが<= N; iは++ { のprintf(" %dの" 、キー[I])。 } 戻り 0 }

参考:リンクは、作者に感謝します

 

おすすめ

転載: www.cnblogs.com/ellen-mylife/p/11246697.html