ディマは一日中働き、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 }