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