効果:指定された長さのn $ $ $ S $文字列、最初の文字は1 $ $ $ $ Iであるとき、あなたは$ I $の通信ブロックサイズを取得するために、片側を削除することができます満たすために必要なツリー構造。それは$ 0 $である場合、私は$ $は、縁無しを省略した後に、通信ブロックサイズが得られる示します。
最初の文アウト特別な状況が明確に満たされていない、我々はキャタピラを構築することができます
書式#include <iostreamの> 書式#include <sstream提供> 書式#include <アルゴリズム> 書式#include <cstdioを> 書式#include <cmath> 書式#include <設定> 書式#include <マップ> 書式#include <キュー> 書式#include <文字列> 書式#include <CStringの> 書式#include <ビットセット> 書式#include <機能> 書式#include <ランダム> #define REP(I、N)のための(iは= int型、iが<= N; I ++) ( - I; I> = A I = N INT)のためのPER(I、n)を#defineします #define人事のputchar(10) #define PB一back #define LC(O << 1) #define RC(LC | 1) #define半ば((L + R)>> 1) #defineのls LC、L、ミッド #define RSのRC、ミッド+ 1、R #define X最初 #define Y秒 #define IOのstd ::イオス:: sync_with_stdio(偽) #defineてendl '\ n' は #define DB(A)({REP(__ I、1、n)はCOUT << [__ I] << '';時間;}) 名前空間stdを使用。 typedefの長い長いLL。 typedefのペア<int型、int型> PII。 CONST int型P = 1E9 + 7、INF = 0x3f3f3f3f。 LLのGCD(-1,11,11- b)は{戻りB GCD(B、%のB):;} {LLのR = 1%のP(LL N、LL)qpow LL;のため(%= P; N; = *%P、N >> = 1)(&N 1)であれば、R = R *% P;戻りR;} LL INV(LL X){?X <= 1を返す:INV(P%以下のX)*(PP / X)%のP;} インラインint型RD(){int型のx = 0;チャーP = GETCHAR();一方、(P < '0' || P> '9')p = GETCHAR();一方、(P> = '0' && P <= '9')、X = X * 10 + P-'0' 、P = GETCHAR();戻りX;} //頭 CONST int型N = 1E6 + 10。 チャーS [N]。 {int型のmain() scanf関数( "%sの"、S + 1)。 INT、N = STRLEN(S + 1)。 IF(S [1] == '0' || S [N] == '1')戻りプット( " - 1")、0。 REP(I、1、N)の場合(S [I] == '1' && S [NI] == '0')戻りプット( " - 1")、0。 int型RT = 1; REP(I、2、n)の{ printf( "%D%D \ n" は、RT、I); IF(S [I-1] == '1')RT = I。 } }