貪欲+文字列を考えてcf1277D--

常にちょっと、複雑な主題をしたいです

/ * 
1x1のは、一緒に入れ、一緒にすべての0x0のを入れて
、検討する0x1のまたは1x0を
0x0にし、1x1の、0x1のが、何か1x0がない場合、それは実現不可能である
0x1のように限り、0x1を持つ両端に接続されているすべての0x0,1x1のためにそして1x0に
再生の対応する文字列がある場合、それは、可能であるのに対し、その文字列は、反転することができない
    0x1-> 1x0、または1x0-> 0x1のより即ち

* / 
の#include <ビット/ STDC H ++>
 使用した 名前空間STD;
 の#define N 200005 INT N-;
 SET < ストリング > SE [ 2 ]; 
地図 < 文字列整数 > MP;
 ボイドのinit(){ 
    SE [ 0 ] .clear(); SE 1 ] .clear() ; 
    mp.clear(); 
} int型



メイン(){
     int型 T; CIN >> T。一方、(t-- ){ 
        INIT()。
        
        cinを >> N;
        int型 cnt00 = 0、CNT11 = 0 ;
        以下のためにINT iが= 1 ; I <= N; I ++ ){
             ストリングS。
            cinを >> 秒;
            もし(S [ 0 ] == ' 0 ' && S [s.size() - 1 ] == ' 0 ' 
                cnt00 ++ そう であれば(S [ 0 ] == ' 1 ' && S [s.size() - 1 ] == ' 1 ' 
                CNT11 ++ そう であれば(S [ 0 ] == ' 0 ' && S [s.size() - 1 ] == ' 1 ' 
                SE [ 0 ] .insert(S);
             SE [ 1 ] .insert(S); 
            MP [S] = I。
        } 
        
        場合(cnt00 && CNT11 &&!SE [ 0!] .size()&& SE [ 1 ] .size()){ 
            プット(" -1 ")。続け; 
        } 
        
        
        INT SIZE0 = SE [ 0 ] .size()、SIZE1 = SE [ 1 ] .size()。
        INT TOT = SE [ 0 ] .size()+ SE [ 1 ] .size()。
        ベクトル < int型 > ANS;
        もし(SE [ 0 ] .size()> SE [ 1 ] .size()){
             ための(自動SS:SE [ 0 ]){
                 場合(SIZE1> = TOT / 2休憩;
                文字列 TMP = SS。
                逆(tmp.begin()、tmp.end())。
                もし(SE [ 1 ] .find(TMP)= SE [!1 ] .END())続けます他の{ 
                    SIZE0 - ; SIZE1 ++ ; 
                    ans.push_back(MP [SS])。
                } 
            } 
        } 
        {
             ための(自動SS:SE [ 1 ]){
                 場合(SIZE0> = TOT / 2ブレーク文字列 TMP = SS。
                逆(tmp.begin()、tmp.end())。
                もし(SE [ 0!] .find(TMP)= SE [ 0 ] .END())続けます他の{ 
                    SIZE1 - ; SIZE0 ++ ; 
                    ans.push_back(MP [SS])。
                } 
            } 
        } 
        
        もし(ABS(SIZE0-SIZE1)<= 1 ){ 
            COUT << ans.size()<< ' \ n ' 以下のための(自動X:ANS)はcout << X << "  " ; 
            プット("" ); 
        }
        他のプット(" -1 " ); 
    } 
    
}
 

おすすめ

転載: www.cnblogs.com/zsben991126/p/12110193.html