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 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值