Cのタイトル住所:http://codeforces.com/contest/1215/problem/C
問題の意味:同じ長さの2つの文字列が存在し、2つの文字列で構成される「A」で、「b」は任意の位置に交換することができ、最小数Qは、2つの文字列の同じやり取りとなり、あなたは、出力と同じになることはできない「-1。」
アイデア:確かに同じ交換、ABとBAの数が奇数は確かに同じになることはできませんが、二段階ABかBAは2つの段階に同じ、ABとBAになるかもしれ参照してください。
AC :(コードの限定されたレベルで、やや長めのコードはご了承ください)
1の#include <iostreamの> 2の#include <cstdioを> 3の#include <CStringの> 4 使って 名前空間STDを、 5 typedefの長い 長いLL。 6 INT メイン(){ 7 INT N。 8 CIN >> N。 9 チャー S1 [ 200005 ]、S2 [ 200005 ]。 10 のためには、(int型 i = 1 ; iは= N <; I ++ ) 11 CIN >> S1 [i]は、 12 GETCHAR()。 13 のための(int型 i = 1 ; iは= N <; I ++ ) 14 CIN >> S2 [i]は、 15 INT num_ab = 0、num_ba = 0 。 16 int型 AA [ 200005 ] = { 0 }、AB [ 200005 ] = { 0 }。 17 のために(int型 i = 1 ; iが<= N; iが++ ){ 18 であれば(S1 [i]が== ' ' && S2 [i]を== ' B ' ){ 19 num_abを++ 。 20 AA [num_ab] = I。 21 } 22 そう であれば(S1 [i]が== ' B ' && S2 [i]を== ' A ' ){ 23 num_ba ++ 。 24 AB [num_ba] = I。 25 } 26 } 27 であれば((num_ab + num_ba)&1)COUT << " -1 " << ENDL。 28 他{ 29 であれば(num_ab&1 ){ 30 COUT << num_ab / 2+ num_ba / 2 + 2 << ENDL。 31 のためには、(int型 i = 1 ; iがnum_abを<; I + = 2 ) 32 COUT << AA [I] << " " << AA [I + 1 ] << ENDL。 33 のためには、(int型 i = 1 ; iがnum_baを<; I + = 2 ) 34 COUT << AB [i]は<< " " << AB [I + 1 ] << ENDL。 35 COUT << AA [num_ab] << " " << << AB [num_ba] << ENDL。 36 } 37 他{ 38 COUT <<(num_ab + num_ba)/ 2 << ENDL。 39 のためには、(int型、I = 1 ; I <= num_ab; I + = 2 ) 40 COUT << AA [I] << " " << AA [I + 1 ] << ENDL。 41 のために(int型 I = 1 ; I <= num_ba; iが+ = 2 ) 42 COUT << AB [i]は<< " " <<43 } 44 } 45 リターン 0 。 46 }
Dトピック住所:http://codeforces.com/contest/1215/problem/D
チケット番号を記入するMonocarpとBicarp 2人(0-9)後半の和に等しい和の最初の半分を記入した後、Bicarpが勝てば、テーブルは、すでに、デジタルテーブルを埋めることができ、そうでない場合Monocarpは勝利 ":質問の意味? 、Monocarpはチケットの数と、すべての偶数の長さの合計を記入し、記入します。
思考:ダイレクト前半及びNUM1の後半に埋めることができ、それぞれ、公知のセットと既知とSUM1およびSUM2の数の前半Bicarpを獲得検討、後半番号NUM2を充填してもよいです。ときはSUM1勝つためだけnum1をnum2の、Bicarpに等しい等しいSUM2、。
場合等しいSUM2の-sum1(NUM1-NUM2)* 9/2のみ制御Bicarp(NUM1-NUM2)* 9/2この番号ためSUM2、単純な分析は、得られるSUM1>。SUM2>同様SUM1。
ACコード:
1の#include <iostreamの> 2の#include <cstdioを> 3の#include <CStringの> 4 使って 名前空間STDを、 5 typedefの長い 長いLL。 6 INT メイン(){ 7 INT N。 8 CIN >> N。 9 チャーC。 10 INT NUM1 = 0、NUM2 = 0、SUM1 = 0、SUM2 = 0 。 11 のためには、(int型 i = 1 ; iがn = <; iは++ ){ 12 CIN >>C; 13 ならば(私は<= N / 2 ){ 14 であれば(C == ' ?')NUM1を++ 。 15 他 SUM1 + =(C- ' 0 ' )。 16 } 17 他{ 18 であれば(C == ' ?')NUM2 ++ 。 19 他 SUM2 + =(C- ' 0 ' )。 20 } 21 } 22 ブールフラグ。 23 もし(SUM1> SUM2 && SUM1、SUM2 ==(num2の-NUM1)*9 / 2)フラグ= 偽。 24 他の 場合(SUM1 <SUM2 && SUM2-SUM1 ==(NUM1-NUM2)* 9 / 2)フラグ= 偽。 25 他の 場合(SUM1 == SUM2 && NUM1 == NUM2)フラグ= 偽。 26 他のフラグ= 真; 27 であれば(フラグ)COUT << " Monocarp " << ENDL。 28 他の裁判所未満<< " Bicarp " << てendl; 29 リターン 0 ; 30 }
なぜそれが、あまりにも不快Bよりも質問し、その優れた書き込みの両方を感じるん。