zoukankan      html  css  js  c++  java
  • BZOJ 2217: [Poi2011]Lollipop

    若sum可行 sum-2一定可行

    序列和为ans

    找出和ans奇偶性不同的最大的ans,即最靠左或最靠右的1的位置

    更新答案

    有spj

    #include<cstdio>
    using namespace std;
    int L[2000005],R[2000005],a[2000005];
    char s[2000005];
    void calc(int l,int r,int ans){
    	while (ans>0){
    		L[ans]=l,R[ans]=r;
    		if (a[l]==2) l++;
    		else if (a[r]==2) r--;
    		else l++,r--;
    		ans-=2;
    	}
    }
    int main(){
    	int n,m;
    	scanf("%d%d",&n,&m);
    	scanf("%s",s+1);
    	for (int i=1; i<=n; i++)
    		if (s[i]=='W') a[i]=1;
    		else a[i]=2;
    	int ans=0;
    	for (int i=1; i<=n; i++) ans+=a[i];
    	calc(1,n,ans);
    	int idl=0,idr=0;
    	for (int i=1; i<=n; i++) if (a[i]==1) {
    		idl=i;
    		break;
    	}
    	for (int i=n; i>=1; i--) if (a[i]==1) {
    		idr=i;
    		break;
    	}
    	if (idl){
    		if (idl<=n-idr+1) calc(idl+1,n,ans-idl*2+1);
    		else calc(1,idr-1,ans-(n-idr+1)*2+1);
    	}
    	while (m--){
    		int x;
    		scanf("%d",&x);
    		if (!L[x]) printf("NIE
    ");
    		else printf("%d %d
    ",L[x],R[x]);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    java操作练习
    java认知
    java了解
    抽象类及抽象类
    杨辉三角实例菱形实例
    案例分析之运行顺序
    Object类的方法,toString的重写.
    多态
    类的继承
    面对对象
  • 原文地址:https://www.cnblogs.com/silenty/p/9901972.html
Copyright © 2011-2022 走看看