51Nod 1393 0和1相等串

2021-07-22 18:02:49 字數 968 閱讀 1073

1393 0和1相等串

基準時間限制:1 秒 空間限制:131072 kb 分值: 20 

難度:3級演算法題

給定乙個0-1串,請找到乙個盡可能長的子串,其中包含的0與1的個數相等。

input

乙個字串,只包含01,長度不超過1000000。
output

一行乙個整數,最長的0與1的個數相等的子串的長度。
input示例

1011
output示例

2
思路:先掃瞄一遍字串記錄1和0相差的次數,然後按次數大小排序(為的是讓相差次數相同的在一起),再按0出現的次數排序,然後用相差數相同的0(或1)的最大次數減去最小次數,在這裡面找最大值,就是結果。
理由:不妨設d(i) = (mi, ni, ci) (s[0,...i] 0,1出現的次數,次數的差值),若s[i...j]中0,1出現次數相同,那麼mj - mi = nj - ni  => mi - ni = mj - nj即
s[0..i] 和s[0...j] 0,1出現次數的差值相同(ci = cj)這樣只需記錄次數的差值還有0(或1)的次數就行了#include#include#includeconst int maxn = 1e6 + 10;

using namespace std;

typedef pairp;

p p[maxn];

char s[maxn];

int solve(int l)

return ans * 2;

}int main()

p[l].first = p[l].second = 0;

l++;

printf("%d\n", solve(l));

}return 0;

}

51nod 1393 0和1相等串

給定乙個0 1串,請找到乙個盡可能長的子串,其中包含的0與1的個數相等。input 乙個字串,只包含01,長度不超過1000000。output 一行乙個整數,最長的0與1的個數相等的子串的長度。input示例 1011output示例 2 準備乙個sum,如果碰到0則 1,碰到1則 1.對於每乙個...

51nod 1393 0和1相等串

基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 給定乙個0 1串,請找到乙個盡可能長的子串,其中包含的0與1的個數相等。input 乙個字串,只包含01,長度不超過1000000。output 一行乙個整數,最長的0與1的個數相等的子串的長度。input示例 ou...

51Nod 1393 0和1相等串

題目 給定乙個0 1串,請找到乙個盡可能長的子串,其中包含的0與1的個數相等。輸入 乙個字串,只包含01,長度不超過1000000。輸出 一行乙個整數,最長的0與1的個數相等的子串的長度。樣例輸入 1011樣例輸出 2分析 使用字首和,字首和pre i val表示01字串前i個字元中,1的數量 0的...