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 。 }