zoukankan      html  css  js  c++  java
  • BZOJ 1034 [ZJOI2008]泡泡堂BNB

    【题解】

      贪心。因为有平局的情况所以需要稍微思考,最普通的贪心是不可行的。我们可以构造一个这样的贪心策略:先把a,b排序,若a最弱的打得过b最弱的,那就打;否则,若a最强的打得过b最强的,那就打。否则就用a最弱的与b最强的对战,把自己的损失降到最小。

    #include<cstdio>
    #include<algorithm>
    #define N 200010
    #define rg register
    using namespace std;
    int n,a[N],b[N],a2[N],b2[N];
    inline int read(){
    	int k=0,f=1; char c=getchar();
    	while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();
    	while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar();
    	return k*f;
    }
    int main(){
    	n=read(); 
    	for(rg int i=1;i<=n;i++) a[i]=b2[i]=read();
    	for(rg int i=1;i<=n;i++) b[i]=a2[i]=read();
    	sort(a+1,a+1+n); sort(b+1,b+1+n);
    	sort(a2+1,a2+1+n); sort(b2+1,b2+1+n);
    	int la=1,lb=1,ra=n,rb=n,mx=0;
    	while(la<=ra){
    		if(a[la]>b[lb]) mx+=2,la++,lb++;
    		else 
    			if(a[ra]>b[rb]) mx+=2,ra--,rb--;
    			else if(a[la++]==b[rb--]) mx++;
    	}
    	printf("%d ",mx);
    	la=1,lb=1,ra=n,rb=n,mx=0;
    	while(la<=ra){
    		if(a2[la]>b2[lb]) mx+=2,la++,lb++;
    		else 
    			if(a2[ra]>b2[rb]) mx+=2,ra--,rb--;
    			else if(a2[la++]==b2[rb--]) mx++;
    	}
    	printf("%d
    ",n*2-mx);
    	return 0;
    }
    

      

  • 相关阅读:
    Spring中常用的配置和注解详解
    SpringBoot中的常用配置
    Maven项目创建问题
    hibernate缓存:一级缓存和二级缓存
    Hibernate标准查询
    Hibernate中Hql的查询
    Hibernate中对象的三种状态
    Hibernate中使用load和get加载的区别
    Spring增强
    Spring代理模式
  • 原文地址:https://www.cnblogs.com/DriverLao/p/8475556.html
Copyright © 2011-2022 走看看