山东济南彤昌机械科技有限公司 山东济南江鹏工贸游有限公司

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 }

 

posted on 2015-10-23 10:55  hahalidaxin  阅读(188)  评论(0编辑  收藏  举报