#585(DIV。2)C、DラウンドCodeforces

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よりも質問し、その優れた書き込みの両方を感じるん。

おすすめ

転載: www.cnblogs.com/xunzf0402/p/11545135.html