#567(本部2)B.分割数ラウンドCodeforces

#567(本部2)ラウンドCodeforces

 

B.は、番号を分割しました

 

ディマは一日中働き、Lの数字からなる彼のお気に入りの数nを取り除き、長い紙に書き留めました。残念ながら、ストリップはそれはディマの本棚に入りきらなかったほど長いことが判明しました。

この問題を解決するために、ディマは、それらのそれぞれが含まれているように、2つの空でない部分にストリップを分割することを決定した   先行ゼロなし整数。その後、彼は二つの整数の合計を計算し、新しいストリップにそれを書き留め。

それは合計が本棚にそれを収まる可能性が高くなりますので、ディマは、結果の整数はできるだけ小さくなるように望んでいます。ヘルプディマは、彼が入手できる最小の和であるかを決めます。

入力

ディマの好きな数の長さ - 最初の行は、単一の整数L(2≤l≤100000)を含みます。

ディマのお気に入り数:2行目は、最初は、ストリップに書かれた正の整数nが含まれています。

整数nは正確にL個の数字から成り、それは先行ゼロを含みません。ディマ保証、ストリップを分割する少なくとも1つの有効な方法があること。

出力

ディマを得ることができる最小の数 - 単一の整数を出力します。

入力
7 
1234567
出力
1801
入力
3 
101
出力
11

注意

最初の例ではディマは整数1234と567それらの和は1801であるに番号1234567を分割することができます。

第2の例ではディマは整数10と1に番号101を分割することができるそれらの合計は、数字がゼロで開始することができないので、「1」と「01」にストリップを分割することは不可能であること11.注意あります。

 

タイトルの意味:タイトルはあなたが途中でそれを切るように、2つの文字列の中に、あなたの長さnの文字列を与えることを意味し、

そして、デジタル合計として最小を見つけることが、ゼロの文字列をリードする切り取ってきたことができません。

アイデア:明らかに類似した2つの文字列が最小のビット数を増やすことと、最初にすべきで、

その後、あなたは、文字列の途中からカットし始めるが、アカウントに文字パリティと0のビット数を取ることができます

したがって、成功したカットアウトまで、切り捨てられた文字列の両側に中央から2つの文字列を延びる、その後最小リフレッシュを合計

 

 

  1の#include <iostreamの>
   2の#include <CStringの>
   3の#include <cstdioを>
   4の#include <cmath>
   5の#include <アルゴリズム>
   6の#include <地図>
   7の#include <ベクトル>
   8の#include < 設定 >
   9#含める<キュー>
 10  使って 名前空間はstdを、
11  の#defineが長い長いっ 
 12  
13  列の合計(文字列文字列 B)// 大数加法
14  {
 15      // 补前导零
16     一方、(a.size()< b.size())
 17          a.insert(0" 0 " )。
18      一方(b.size()< a.size())
 19          b.insert(0" 0 " )。
20      
21       ANS = "" ; // 记录结果
22      
23      int型の jinwei = 0、合計= 0、湯。// 运算所需
24      
25      のためにint型 I = a.size() - 1 ; I> = 0; i--)// カウントの終了から
26である     {
 27          SUM =([I] - ' 0 ')+(B [I] - ' 0 ')+ Jinwei;
 28          Jinwei = SUM / 10 ;
 29          ゆう= %のSUM 10 ;
 30の          + =(ゆう+ ANS ' 0 '); // このビットを追加し、残り
31である     }
 32      IF(Jinwei)//のマルチかもしれ
33がある          (Jinwei + ANS + = ' 0 ' );
 34である     
35     (ans.begin()、ans.end())は逆// それが端からのものであるので、文字列の後方必要が
36      
[37を     返すANSを、
 38である }
 39  
40  INT メイン()
 41は 、{
 42である      IOSの:: sync_with_stdio(falseに); cin.tie(0); cout.tie(0 )、
 43は     
44である     INT 、今、LEN
 45      STR、S;
 46である     文字列、B A;
 47      ながら(CIN >> LEN)
 48      {
 49          CIN >> STR;
 50          
51である         文字列ミネソタ州= " 0 " ;
52          
53          今= LEN / 2 54          のためにint型今= Iを、I> = 0 ; i-- 55          {
 56              であれば(!STR [I] = ' 0 ' 57              {
 58                  = str.substr(0 、I)。
59                  B = str.substr(I、len- I)。
60個の                  S = 合計(A、B)。
61                      
62                  であれば(ミネソタ州== " 0 " 63は、                      ミネソタ州= S;
 64                  
65                  { // 長さを見てここでは文字列ではない直接比較サイズ、桁だけ小さい数より少ない
66                      IF(s.size()< minn.size()) 
 67                          ミネソタ州= S ;
 68                       IF(s.size()== minn.size())
 69                      {
 70                          IF(S < ミネソタ州)
 71である                              ミネソタ州= S;
 72                      }
 73である                 }
 74                  BREAK ;
 75              }
76          }
 77              
78              
79          用のint型 +今= Iを1 ; iがLEN <; iは++ 80          {
 81              であれば(STRを[I] =!' 0 ' 82              {
 83                  = str.substr(0 、I)。
84                  B = str.substr(I、len- I)。
85個の                  S = 合計(A、B)。
86              
87                  であれば(ミネソタ州== " 0 " 88                      ミネソタ州= S。
89                 他の
90                  {
 91                      OW(s.size()< minn.size())
 92                          =のS;
93                      他の OW(s.size()== minn.size())
 94                      {
 95                          OW(S < A)
 96                              =のS;
97                      }
 98                  }
 99                  ブレーク100              }
 101          }
 102          COUTS << << ENDL。
103      }
104      
105      リターン 0 106 }

 

 

おすすめ

転載: www.cnblogs.com/xwl3109377858/p/11041560.html