[地図データ構造を使用します

1>正解

試験、nはm個の個別のご質問、

あなたの人々の完全な数とフル間違った数を与えます

配列を決定し、辞書順最小の答えは、ノー出力-1

 

私の考え:カテゴリートーク

論文の各カウントは、彼を見ると、彼の反対のロールは、pとqが可能であり、等しいです

P || Q場合は、どちらかがない溶液中で試験紙で正しい答えを持っているのいずれか

P == Q == 0、その後、細かい一連があった答えを見つけます

正解は、文字のみのツリー、ラインである60 - > 90行

#include <cstdioを> 
する#include <cstdlib> 
の#include <iostreamの> 
する#include <アルゴリズム> 
の#include <地図> 
使用して 名前空間STD。
INTのN、M、P、Q。
CONSTの INT N = 30003、M = 503 ストリングS [N]。
マップ < 文字列int型 > 融点;
文字列 FZ(A)
{ 
    ためint型 i = 0 ; iがmを<; I ++の場合([I] == ' Y ')[I] = ' N ' 他の [i]を= ' Y ' ;
    返します
} 
ボイドプリント(文字列ANS)
{ 
    COUT << ANS。
    出口(0 ); 
} 
文字列CK。
ボイド DFS(int型POS)
{ 
    場合(POS == M)
    { 
        場合MP [CK] == 0 && MP [(FZ(CK))] == 0)プリント(CK)。
        返します
    } 
    
    CK [POS]= ' N ' 
    DFS(POS + 1 )。
    CK [POS] = ' Y ' 
    DFS(POS + 1 )。
} 
int型の合計。
INT メイン()
{ 
    CIN >> N >> M >> P >> Q。
    以下のためにint型 i = 1 ; iが<= N; iは++ 
        CIN >> S [i]は、MP [S [I]] ++ ; 
    ソート(S + 1、S + N + 1 )。
    N =ユニーク(S + 1、S + N + 1)-S- 1 
    
    もし(P || Q)
    { 
        ためint型 i = 1 ; iがn = <; iは++ 
        { 
            int型の CNT = MP [S [I]] もし(CNT == P && MP [FZ(S [I])] == Q)S [和++] =のS [i]は、
            そう であれば(CNT == Q && MP [FZ(S [I])] == P)S [和++] = FZ(S [I])。
        } 
        もし(合計)
            ソート(S、S +和)、印刷(S [ 0 ])。
        他の裁判所未満<< " -1 " << てendl;
    }
    
    { 
        CKの =のS [ 1 ]。
        DFS(0 )。
        裁判所未満 << " -1 " << てendl; 
    } 
    
    戻り 0 
}

 

おすすめ

転載: www.cnblogs.com/xwww666666/p/11427921.html