“非常男女”计划 plan
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了“非常男女”计划 plan相关的知识,希望对你有一定的参考价值。
“非常男女”计划 plan
【题目描述】:
Matrix67已经当过多次“媒人”了。他因此获得了许多经验。例如,距Matrix67观察,身高相近的人似乎比较合得来。
Matrix67在学校策划了一次大型的“非常男女”配对活动。对于这次活动的参与者,Matrix67有自己独特的选择方式。他希望能选择男女人数相等且身高都很接近的一些人。这种选择方式实现起来很简单。他让学校的所有人按照身高排成一排,然后从中选出连续的若干个人,使得这些人中男女人数相等。Matrix67当然希望他能选出的人越多越好。请编写程序告诉他,他最多可以选出多少人来。
【输入描述】:
第一行有一个正整数n,代表学校的人数。
第二行有n个用空格隔开的数,这些数只能是0或1,其中,0代表一个女生,1代表一个男生。
【输出描述】:
输出一个非负整数。这个数表示在输入数据中最长的一段男女人数相等的子序列长度。
如果不存在男女人数相等的子序列,请输出0。
【样例输入】 |
【样例输出】 |
9 0 1 0 0 0 1 1 0 0 |
6 |
【数据范围及描述】:
对于30%的数据,n<=100;
对于50%的数据,n<=1 000;
对于100%的数据,n<=100 000。
稍微考一点思维!
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cstring> 5 using namespace std; 6 7 const int maxn=100005; 8 int N; 9 int pos[maxn]; 10 int rpos[maxn]; 11 12 int main() 13 { 14 scanf("%d",&N); 15 int ans=0,sum=0,a,p; 16 memset(pos,-1,sizeof(pos)); 17 memset(rpos,-1,sizeof(rpos)); 18 pos[0]=0; 19 for(int i=1;i<=N;i++) 20 { 21 scanf("%d",&a); 22 if(a==1) sum++; 23 else sum--; 24 if(sum>=0) 25 { 26 if(pos[sum]!=-1) ans=max(i-pos[sum],ans); 27 else pos[sum]=i; 28 } 29 else 30 { 31 p=-sum; 32 if(rpos[p]!=-1) ans=max(i-rpos[p],ans); 33 else rpos[p]=i; 34 } 35 } 36 printf("%d",ans); 37 return 0; 38 }
以上是关于“非常男女”计划 plan的主要内容,如果未能解决你的问题,请参考以下文章
sql server 执行计划(execution plan)介绍