[ソリューション]厄介な問題のスライドショー

タイトル説明

  李教授は、非常に重要なスピーチを作るために、この日の午後に開催されます。残念ながら、彼は何気なく一緒に積ま自分の講義のスライドを使用して、非常にきちんと人ではなかったです。そのため、講義の前に彼はこれらのスライドを整理しなければなりませんでした。学者、効率として、彼はできるだけ単純にそれを完了したいと考えています。

  教授が、この完全音声Nスライド(n≤26)を使用し、順に使用されるn型スライドプレゼンテーションは、1-Nのディジタルの番号を付けてきました。スライドが透明であるため、その突然の我々がスライドに対応するそれぞれの数字を見ることはできません。

  今、私たちは再びスライドは番号が付けられている......大文字A、B、Cを使用しています。状況が発生したり、いくつかの倍数の番号と対応を文字入り対応する場合は起動していない、私たちが、あなたの仕事は明らかに、この対応は一意である必要があり、番号との対応を文字入りをスライドするプログラムを書くことです彼は、対応が達成できないと述べました。

 

入力形式

  最初の行は、1つの整数nは、n個のスライドを表明しました。

  4つの整数XMIN、XMAX、YMIN、(整数との間のスペースで区切られた)YMAXを含む各次のn行は、前面から背面に番号が付けられて、それらがファイルに表示されるn個順序をスライドスライドの座標、Bは、Cは、......、及びN個の順次番号座標X、Yの次のn行が、スライドの外側には、明らかに番号付けされないように。

 

出力フォーマット

  対応を実現することができる場合、出力ファイルが含むN行べき、それぞれが文字の昇順で文字とスペースで区切られた数、および各列の作用、ノート文字が大文字と出力は、固定された一方、対応する場合これは、トップグリッド出力なしにファイルの1行目に、達成することはできません。余分なスペースなし列の一端。

 

サンプル入力

4

6 22 10 20

4 18 6 16

8 20 2 18

10 24 4 8

9 15

19 17

11 7

21 11

 

サンプル出力

4

B 1

C 2

D 3

 

問題の解決策

  質問の意味よると、我々は考える傾向がある:私たちは、最初に決定され、その後スライド、スライドと一致して、唯一の番号が一致する$ Iの$の$ jの$を見つけ、その後、数字はスライド$ jは$ $ kは$と一致しないようにでき番号、 $スライド私は繰り返しを探して、$ I $と一致するように、$ jの$は数字のみを$満たすために探してください。最後の判断は、すべてのスライドがあまりにも見つけることはなかったです。

  言って、トポロジカルがそれをソートすることはありません。

#include <iostreamの> 
する#include <キュー> の#define MAX_N(26 + 5)を使用して名前空間STDを、int型のn;
INT XL [MAX_N]、XR [MAX_N]イル[MAX_N]、年[MAX_N]。
ブールE [MAX_N] [MAX_N]。
INT [MAX_N] C。
キュー < 整数 > Q;
int型のTOT; INT メイン()
{ 
    CIN >> N。
    (登録をint i = 1 ++; iが<= N I)
    { 
        CIN >> XL [i]は>> XR [I] >>イル[I] >> [i]の年; 
    }



 




    INT X、Y。
    (登録をint i = 1 ; I <= N ++ I)
    { 
        CIN >> X >> Y。
        (登録INT J = 1 ; J <= N ++ J)
        { 
            場合(X <XL [J] || X> XR [J] || Y <イル[J] || Y>年[J] )継続; 
            E [J] [i]は = ;
            ++ 、C [J]。
        } 
    } 
    ため(登録をint i = 1 ++; iが<= N I)
    { 
        もし(C [I] == 1 )q.push(I)。
    } 
    int型になりました。
    しばらく(!q.empty())
    {  = q.front(); 
        q.pop(); 
        ++ TOT;
        (登録をint i = 1 ; iが<= N ++ I)
        { 
            場合(E [今] [I])
            { 
                ため(登録INT J = 1 ++; J <= N J)
                { 
                    場合(J !=今&& E [J] [i])と
                    { 
                        E [J] [i]は= ;
                        - C [J]。
                        もし(C [J] == 1 )q.push(J)。
                    } 
                } 
                ブレーク
            } 
        } 
    } 
    もし(TOT <n)の戻り COUT << " なし"0 ため(登録をint i = 1 ; iは= N <; ++ I)
    { 
        ため(登録INT J = 1 ; J <= N; ++ j)は
        { 
            場合(E [I] [J])
            { 
                COUT <<(CHAR)(' ' + I - 1)<< " " << J << " の\ n " 破ります; 
            } 
        } 
    } 戻り0 
} 
     
リファレンスプログラム

 

おすすめ

転載: www.cnblogs.com/kcn999/p/11027861.html