TR / EE AtCoder - 4433(構成)

効果:指定された長さの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。
	}
}

 

おすすめ

転載: www.cnblogs.com/uid001/p/11738429.html