• CF140C New Year Snowmen


    题目

    CF140C New Year Snowmen

    (n) 个雪球,每次从中选出三个半径严格递增的雪球做成雪人,求最多能做多少个。

    分析

    最开始十分 (naive) 地想分成三组来做,然后其实发现只要是选了三个不同种类的,总是可以做一个雪人。

    于是考虑贪心,先把尽可能多的选掉同一类雪球最多的种类。

    于是用一个堆来维护当前的雪球个数最多的种类,每次取出堆顶的三种,做一个雪人然后放回去。

    显然是正确的。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    template<typename T>
    inline void read(T &x){
    	x=0;bool f=false;char ch=getchar();
    	while(!isdigit(ch)){f|=ch=='-';ch=getchar();}
    	while(isdigit(ch)){x=x*10+(ch^48);ch=getchar();}
    	x=f?-x:x;
    	return ;
    }
    template<typename T>
    inline void write(T x){
    	if(x<0) x=-x,putchar('-');
    	if(x>9) write(x/10);
    	putchar(x%10^48);
    	return ;
    }
    const int N=1e5+5;
    #define PII pair<int,int>
    #define pb push_back
    #define fi first
    #define se second
    #define mp make_pair
    int n;
    unordered_map<int,int>Map;
    priority_queue<PII>pq;
    struct node{
    	int x,y,z;
    }Ans[N];
    signed main(){
    	read(n);int cnt=0;
    	for(register int i=1,x;i<=n;i++) read(x),Map[x]++;
    	for(unordered_map<int,int>::iterator it=Map.begin();it!=Map.end();it++) pq.push(mp((*it).se,(*it).first));
    	while(pq.size()>=3){
    		PII a,b,c;int t[4];
    		a=pq.top();pq.pop();b=pq.top();pq.pop();c=pq.top();pq.pop();
    		t[1]=a.se,t[2]=b.se,t[3]=c.se;
    		sort(t+1,t+4);
    		Ans[++cnt].x=t[3],Ans[cnt].y=t[2],Ans[cnt].z=t[1];
    		a.fi--,b.fi--,c.fi--;
    		if(a.fi) pq.push(a);
    		if(b.fi) pq.push(b);
    		if(c.fi) pq.push(c);
    	}
    	write(cnt),putchar('
    ');
    	for(register int i=1;i<=cnt;i++) write(Ans[i].x),putchar(' '),write(Ans[i].y),putchar(' '),write(Ans[i].z),putchar('
    ');
    	return 0;
    }
    
  • 相关阅读:
    【华为云技术分享】区块链与数据库如何结合?
    【华为云技术分享】跟繁琐的命令行说拜拜!Gerapy分布式爬虫管理框架来袭!
    gin casbin xorm vue-admin权限认证。
    golang优秀库及介绍
    网上的element-ui-admin运行
    golang时区处理
    Let's Encrypt apache的配置
    wireshark分析自己向自己请求服务
    XORM的几个常用数据处理
    golang处理json
  • 原文地址:https://www.cnblogs.com/Akmaey/p/15265915.html
Copyright © 2020-2023  润新知