zoukankan      html  css  js  c++  java
  • 51nod

    题目链接:1393 0和1相等串

    思路:把0当成-1,然后求前缀和。如果出现前缀和相等的,那么这个串肯定就满足要求。因为只要求最长的,所以只需要存前缀和首次出现的位置即可,之后再遇到就可以直接更新答案。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 const int maxn = 2e6 + 10;
     5 int sum[maxn];
     6 char s[maxn>>1];
     7 int main() {
     8     gets(s);
     9     int l = strlen(s);
    10     memset(sum, -1, sizeof(sum));
    11     sum[l] = 0;
    12     int ans = 0;
    13     int tsum = l;
    14     for(int i=0; i<l; i++) {
    15         if(s[i] == '1') tsum ++;
    16         else tsum --;
    17         if(sum[tsum] >= 0) {
    18             ans = max(ans, i - sum[tsum] + 1);
    19         } else {
    20             sum[tsum] = i + 1;
    21         }
    22     }
    23     printf("%d
    ", ans);
    24     return 0;
    25 }
  • 相关阅读:
    selectHelper
    Windows Server 2003 下实现网络负载均衡(2) (转)
    顺序栈
    线性表链式存储
    线性表顺序存储
    Swift
    组件化
    swift
    Swift
    Swift
  • 原文地址:https://www.cnblogs.com/fredy/p/5868237.html
Copyright © 2011-2022 走看看