zoukankan      html  css  js  c++  java
  • Luogu P1114 “非常男女”计划/Luogu P2697 宝石串

    Luogu P1114 “非常男女”计划/Luogu P2697 宝石串

    感觉我最近很爱做双倍经验的题啊
    使$d$等于第$i$个位置男生数(绿宝石数)减女生数(红宝石数)的差值。
    那么差值相等的两个位置之间的人(宝石)是满足相等的。
    所以找到在差值相等情况下最左边和最右边的位置。
    特别要注意要把$0$的位置作为差值为$0$的起点。
    (两道题的读入略微有些不同)

    Luogu P1114

    #include<bits/stdc++.h>
    
    using namespace std;
    
    int n,sumboy,sumgirl,ans;
    int l[200010],r[200010];
    
    int main()
    {
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++) {
    		int x,d;
    		scanf("%d",&x);
    		x==1?sumboy++:sumgirl++;
    		d=sumgirl-sumboy+n;
    		if(!l[d]&&d!=n) {
    			l[d]=i;
    		}
    		else {
    			r[d]=i;
    		}
    	}
    	for(int i=0;i<=n*2;i++) {
    		ans=max(ans,r[i]-l[i]);
    	}
    	printf("%d",ans);
    	return 0;
    }
    

    Luogu P2697

    #include<bits/stdc++.h>
    
    using namespace std;
    
    int sumg,sumr,ans,len;
    int l[1000010],r[1000010];
    char c[1000010];
    
    int main()
    {
    	scanf("%s",&c);
    	len=strlen(c);
    	for(int i=1;i<=len;i++) {
    		int x,d;
    		x=c[i-1];
    		x=='G'?sumg++:sumr++;
    		d=sumr-sumg+len;
    		if(!l[d]&&d!=len) {
    			l[d]=i;
    		}
    		else {
    			r[d]=i;
    		}
    	}
    	for(int i=0;i<=len*2;i++) {
    		ans=max(ans,r[i]-l[i]);
    	}
    	printf("%d",ans);
    	return 0;
    }
    
  • 相关阅读:
    mysql 更改字符集
    修改pip源
    git命令
    virtualwrapper使用
    Python环境搭建
    IntellIJ IDEA 配置 Maven 以及 修改 默认 Repository
    Spring4:JDBC
    Spring3:AOP
    Spring2:bean的使用
    Spring1:Spring简介、环境搭建、源码下载及导入MyEclipse
  • 原文地址:https://www.cnblogs.com/luoshui-tianyi/p/11478700.html
Copyright © 2011-2022 走看看