zoukankan      html  css  js  c++  java
  • 最长配对

    小b有一个01序列,她想找到一个最长的区间使得这个区间的01能两两配对,即0的个数和1的个数相等。求最长区间的长度。

    输入

    第一行输入一个正整数n;
    第二行输入n个整数,表示A[i],以空格隔开;
    第三行输入一个正整数K;
    其中1≤n≤30000,对于任意A[i]有-10000≤A[i]≤10000,2≤K≤10000

    输出

    输出一个数,表示子序列的数目

    输入样例

    3
    0 1 0

    输出样例

    2

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int N=1e5+10,M=5e4;
    #define int long long
    int a[N],vis[N];
    signed main(){
    	int n;
    	cin>>n;
    	int sum=0,ans=0;
    	for(int i=1;i<=n;i++){
    		scanf("%lld",&a[i]);
    		if(a[i]==1)sum++;
    		else sum--;
    		if(sum==0)ans=max(ans,i);
    		else
    		if(vis[sum+M]==0)vis[sum+M]=i;
    		else ans=max(ans,i-vis[sum+M]);
    	}
    	cout<<ans<<endl;
    }
    
  • 相关阅读:
    WebService
    JavaMail
    ssh框架整合
    CSS3初步
    SpringMVC 文件上传及下载
    Java多线程
    SpringMVC 数据校验
    初始化参数绑定——日期格式
    SpringMVC入门
    Quartz
  • 原文地址:https://www.cnblogs.com/naruto-mzx/p/11685790.html
Copyright © 2011-2022 走看看