zoukankan      html  css  js  c++  java
  • vijosP1195“非常男女”计划

    vijosP1195“非常男女”计划

    链接:https://vijos.org/p/1195

    【思路】

       人数差。

       人数差相等的两点之间的区间一定有男女人数相等。

       计目前为止到i的1为sum1,0为sum0,则人数差为t,用l [t] 数组记录差值t出现的最左点,比较得ans。

       需要注意N是偏移量,化负为正,l[0+N]初始为0且防止被覆盖。

    【代码】

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 
     5 const int maxn = 200000+10;
     6 const int N=100000+2;
     7 int l[maxn],r;
     8 int n;
     9 
    10 inline int read_int() {
    11     char c=getchar();
    12     while(!isdigit(c)) c=getchar();
    13     int x=0;
    14     while(isdigit(c)) {
    15         x=x*10+c-'0';
    16         c=getchar();
    17     }
    18     return x;
    19 }
    20 int main() {
    21     n=read_int();
    22     int ans=0;
    23     int sum0=0,sum1=0;
    24     l[0+N]=0;
    25     for(int i=1;i<=n;i++) {
    26         int x=read_int(); 
    27         if(x) sum1++; else sum0++;
    28         int t=sum1-sum0+N;
    29         if((t-N)&&!l[t]) l[t]=i;
    30         ans=max(ans,i-l[t]);
    31     }
    32     cout<<ans;
    33     return 0;
    34 }
  • 相关阅读:
    一道题DP
    BZOJ 3155: Preprefix sum
    BZOJ:3209: 花神的数论题
    TJU 4087. box
    BZOJ1192: [HNOI2006]鬼谷子的钱袋
    概率DP
    Codeforces Round #253 (Div. 2) D题
    二维树状数组
    Codeforces Round #250 (Div. 2)
    莫比乌斯函数
  • 原文地址:https://www.cnblogs.com/lidaxin/p/4903799.html
Copyright © 2011-2022 走看看