常にちょっと、複雑な主題をしたいです
/ * 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 " ); } }