• 「CF 140C」 New Year Snowmen


    题目链接

    戳这

    贪心+优先队列,只要每次将数量前三大的半径拿出来就好了,用优先队列维护一下

    #include<bits/stdc++.h>
    #define rg register
    #define file(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout);
    using namespace std;
    int read(){
        int x=0,f=1;
        char c=getchar();
        while(c<'0'||c>'9') f=(c=='-')?-1:1,c=getchar();
        while(c>='0'&&c<='9') x=x*10+c-48,c=getchar();
        return f*x;
    }
    struct hh{
        int v,id;
        bool operator < (hh a) const {
            return v<a.v;
        }
    }a[100001];
    struct node {
        int x,y,z;
    }c[100001];
    int b[100001],d[100001];
    priority_queue<hh> q;
    int main(){
        int n=read(),tot=1,cnt=0;
        for(int i=1;i<=n;i++)
            a[i].v=read(),a[i].id=i;
        sort(a+1,a+1+n);
        a[0].v=-2147483647;
        for(int i=2;i<=n+1;i++){
            if(a[i].v!=a[i-1].v){
                hh now;
                now.id=a[i-1].v,now.v=tot;
                q.push(now),tot=1;
            }
            else
                tot++;
        }
        hh now;
        now=q.top();
        int cc=0;
        while(q.size()>=3){
            hh now1,now2,now3;
            now1=q.top(),q.pop();
            now2=q.top(),q.pop();
            now3=q.top(),q.pop();
            now1.v--,now2.v--,now3.v--;
            if(now1.v) q.push(now1),cc++;
            if(now2.v) q.push(now2),cc++;
            if(now3.v) q.push(now3),cc++;
            c[++cnt].x=now1.id,c[cnt].y=now2.id,c[cnt].z=now3.id;
        }
        printf("%d
    ",cnt);
        for(int i=1;i<=cnt;i++){
            int l=min(c[i].x,min(c[i].y,c[i].z)),r=max(c[i].x,max(c[i].y,c[i].z));
            
            printf("%d ",r);
            if(c[i].x<r&&c[i].x>l)
                printf("%d ",c[i].x);
            if(c[i].y<r&&c[i].y>l)
                printf("%d ",c[i].y);
            if(c[i].z<r&&c[i].z>l)
                printf("%d ",c[i].z);
            printf("%d
    ",l);
        }
        return 0;
    }
    
    
  • 相关阅读:
    第七章读书笔记
    第八章读书笔记
    第五章读书笔记
    第六章读书笔记
    总结
    第四章读书笔记
    第十一章读书笔记
    第十章读书笔记
    第九章读书笔记
    第八章读书笔记
  • 原文地址:https://www.cnblogs.com/hbxblog/p/10150701.html
Copyright © 2020-2023  润新知