51nod 1393 0和1相等串 思路 : map存前缀和
生活随笔
收集整理的這篇文章主要介紹了
51nod 1393 0和1相等串 思路 : map存前缀和
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:
?
思路:把'0'當成數字-1,'1'當成數字1,求前綴和,用map更新當前前綴和最早出現的位置。(用map而不用數組是因為可能會出現負數)
當前綴和的值之前出現過,比如i = 10時,sum = 0;j = 50時,sum = 0; 更新ans = max(ans,j-i);
?
?
下面是一個例子:
?
代碼:
#include <bits\stdc++.h> using namespace std;map<int,int> m; //存前綴和最早出現的位置 int a[1000001]; //數字數組 int main(){string s;cin >> s;//將字符串轉換成數字數組 for (int i = 0; s[i]; ++i) {if (s[i] == '0') a[i + 1] = -1;else a[i + 1] = 1;}int ans = 0; //最大長度 int sum = 0; //前綴和 for (int i = 1; i <= s.length(); ++i) {sum += a[i]; //m[i]默認是為0的 (i為任意值)if (sum != 0 && m[sum] == 0) { m[sum] = i; //之前未出現過相同值 }else {ans = max(ans, i - m[sum]); // 之前出現過相同值 }}cout << ans << endl;return 0; }?
總結
以上是生活随笔為你收集整理的51nod 1393 0和1相等串 思路 : map存前缀和的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Codeforces 845 C. Tw
- 下一篇: 51nod 1103 N的倍数 思路:抽