https://ac.nowcoder.com/acm/contest/883/B
まず、第1の位置となる0接頭[i]が合計で発現その後カウント及び1,1、位置となります。
もしそうであれば、出発点からであれば和をサブストリングの条件を満足するように[i]が0の値です。
子供が0点に張られていない場合は、合計として[i]は値が前に発生した限り、2つの値の間の文字列は、必ずしも法律上の文字列です。
例えば:
参照番号:12345
値:00110
合計:-1 -2 -1 0 -1
I == 4合計は[I] == 0、それは1-5の間の正当なものである、長さ4
和[1] ==和[3] ==和[5] == - 1、そう1の最初の発生の位置は-1、最後の発生が5であるため、5-1の長さであることをここで4 =これは、法的な範囲の部分文字列です。
シーケンスは、非常に単純である2で撮影した0,1数の唯一の最小数が必要です
#include <ビット/ STDC ++ H>
使用して 名前空間STDを、
typedefの長い 長い int型LL。
typedefの符号なしの長い 長い int型ULL。
const int型 INF = 0x3f3f3f3f 。
INTの DIR [ 8 ] [ 2 ] = {{ 1、0 }、{ 0、1 }、{ 1、1 }、{ 1、 - 1 }、{ - 1、1 }、{ - 1、 - 1 }、 { 0、 -1 }、{ - 1、0 }}。
#defineパイACOS(-1)
の#define LS RT << 1つ
の#defineのRS RT << 1 | 1つ
の#define ME0(S)のmemset(S、0、はsizeof(S))
の#define ME1(S)のmemset(S 、1、はsizeof(S))
の#define MEF(S)のmemset(S、-1、はsizeof(S))
の#define meinf(S)のmemset(S、INF、はsizeof(S))
のconst int型 N = 100005 。
INTの和[N]、T [N]。
インラインint型リード(){
チャー C = GETCHAR()。INT X = 0、F = 1 。
しばらく(C < "0 ' | C> ' 9 '){ もし、(C == ' - ')、F = - 1 ; C = GETCHAR();}
一方、(C> = ' 0 ' && C <= ' 9 ')、X = X * 10 + C- ' 0 '、C = GETCHAR()。
リターンのx *のF;
}
のLL exgcd(LLのB LL){
場合(Bの== 0)を返します。
exgcd(B、 %のB)。
}
LL q_pow(LLのB -1,11,11- MOD){
LLのANSS= 1 ;
一方、(b)は、{
もし、(B&1)ANSS = ANSS *%のMOD。= A *%のMOD。
B >> = 1 。
}
戻りANSS。
}
LL q_mul(LLのB -1,11,11- MOD){
LL ANSS = 0 。
一方、(b)は、{
もし、(B&1)ANSS =(ANSS + A)%MOD。=(A + A)%MOD。
B >> = 1 。
}
戻りANSS。
}
INT(主int型 ARGC、CHAR * ARGV [])
{
のstd :: IOS :: sync_with_stdio(偽)。
int型 N、L2 = 0、Y2 = 0 、ANS2、V [N]。
MEF(V);
チャーS [N]。
cinを >> N;
CIN >> S + 1 ;
INT LEN = STRLEN(S + 1 )。
以下のために(int型 i = 1 ; iは= LEN <; iは++ ){
もし、(S [I] == ' 1 ' ){
T [I] = 1 。
Y2 ++ ;
}
他{
Tの[I] = - 1 。
L2 ++ ;
}
}
和[ 1 ] = T [ 1 ]。
地図 < INT、INT > M。
M [和[ 1 ] = 1 。
int型 MAXN = 0 ;
用(int型 I = 2 ; iがLEN = <I ++は{)
和[I] =和[I- 1 ] + T [i]は、 //算出合計
場合(メートル[合計[I] =!0)=最大MAXN(MAXN、IM [合計[I]]); // あまりにも前の合計値が表示された場合、最初の位置の現在位置を引い
他の M [和[I] = I; // 他合計値のレコードが位置表示
IF([I]和== 0)=最大MAXN(MAXN、Iは); // 0に上記のもの全てを意味します01に等しい
// COUT << SUM [I] << "" << M [SUM [I]] << ENDL;
}
ANS2 = 2 *(L2> Y2?Y2:L2)、
COUT << << MAXN " 「 << ANS2 << ENDL;
戻り 0 ;
}