https://vjudge.net/contest/174235#problem/D

【题意】

  • 给定n个已知size的帆布,要给这n块帆布涂上不同的颜色,规则是这样的:
  • 每次选择一种颜色C
  • 对于颜色为C的所有帆布都要涂上颜色,其中前F个涂为颜色X,剩下的涂为颜色Y,X和Y都是不同于任何已知颜色的颜色
  • 每次涂颜色用掉的墨水用量都是帆布的size
  • 重复步骤2和3直到所有的帆布都是不同的颜色
  • 求最少要多少墨水

【思路】

  • 第一次涂把帆布变成两种颜色,剩下每次涂色都是增加一种颜色,所以n块帆布一定是涂n-1次色
  • 观察涂色的过程像是一棵树不断分枝
  • 可以考虑涂色的逆过程,最初是n种不同的颜色,每次选择两种颜色合并成一种颜色
  • 一定是选择size最小的两种颜色合并成一种颜色
  • 类似于哈夫曼树,用优先级队列做

【Accepted】

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<set>
#include<functional>
#include<queue>
using namespace std;
typedef long long ll;
int n; const int maxn=1e5+; struct node
{
ll val;
friend bool operator<(node n1,node n2)
{
return n2.val<n1.val;
}
}a[maxn];
priority_queue<node> q;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
while(!q.empty()) q.pop();
scanf("%d",&n);
for(int i=;i<n;i++)
{
scanf("%lld",&a[i].val);
q.push(a[i]);
}
ll ans=0ll;
for(int i=;i<n-;i++)
{
ll x=q.top().val;
q.pop();
ll y=q.top().val;
q.pop();
ans+=x+y;
node nd;
nd.val=x+y;
q.push(nd);
}
cout<<ans<<endl;
}
return ;
}

【优先级队列的用法】

优先级队列的默认排序是从大到小,而且不能重载>,有一下两种方式实现从小到大排序:

 struct node
{
ll val;
friend bool operator<(node n1,node n2)
{
return n2.val<n1.val;
}
}a[maxn];

结构体

 priority_queue<ll,vector<ll>,greater<ll> > q;

greater

【教训】

一开始WA了一发是因为多组数据,没有在每组数据前清空队列,以后对于vector,set,q,pq之类的一定要记得清空

【优先级队列】Southwestern Europe Regional Contest Canvas Painting的更多相关文章

  1. 2015-2016 ACM-ICPC Southwestern Europe Regional Contest (SWERC 15)

    C. Canvas Painting 合并果子. E. Wooden Signs \(dp(i,l,r)\)表示第\(i\)块木板的长度区间为\([l,r]\)的方案数,根据题意,\(l\)或\(r\ ...

  2. Southwestern Europe Regional Contest 2014 题解

    时间:2017/9/8 题目8/10 Rank 5/150 体会:三星的题目和国内区域赛差距大,大多数题读懂题意就能做,所以静心读题是关键,套路性太深. A: 题意:给出一个算式,算式中的数字用大写字 ...

  3. Southwestern Europe Regional Contest 2015 题解

    题目链接:http://codeforces.com/gym/101128 题目数7/10 Rank 34/209 A: 题意:给出一张n个点的有向图表示一家有n个员工的公司的隶属图,u->v表 ...

  4. 【枚举】Southwestern Europe Regional Contest H - Sheldon Numbers

    https://vjudge.net/contest/174235#problem/H [题意] 求[x,y]之间有多少个Sheldon Number Sheldon Number是二进制满足以下条件 ...

  5. Gym 101128A :Promotions (Southwestern Europe Regional Contest )

    题意 一个公司里有E个员工P个上下级关系.这个公司有一种晋升制度.如果要晋升员工a,那么必须要先晋升a的所有领导.给出一个区间[A,B],如果要晋升A个员工,有哪些员工是一定会被晋升的?如果要晋升B个 ...

  6. ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków

    ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków Problem A: Rubik’s Rect ...

  7. Central Europe Regional Contest 2012 Problem J: Conservation

    题目不难,感觉像是一个拓扑排序,要用双端队列来维护: 要注意细节,不然WA到死  = =! #include<cstdio> #include<cstring> #includ ...

  8. Central Europe Regional Contest 2012 Problem I: The Dragon and the Knights

    一个简单的题: 感觉像计算几何,其实并用不到什么计算几何的知识: 方法: 首先对每条边判断一下,看他们能够把平面分成多少份: 然后用边来对点划分集合,首先初始化为一个集合: 最后如果点的集合等于平面的 ...

  9. Central Europe Regional Contest 2012 Problem c: Chemist’s vows

    字符串处理的题目: 学习了一下string类的一些用法: 这个代码花的时间很长,其实可以更加优化: 代码: #include<iostream> #include<string> ...

随机推荐

  1. Outlook读取奇妙清单Wunderlist日历失败的解决办法

    错误: Outlook.com日历订阅奇妙清单的日历链接时报错 This calendar wasn't updated because of a problem with the publisher ...

  2. iOS面试题之runloop

    本文围绕以下几个部分展开对runloop的叙述. 1.runloop是什么/runloop的概念? 2.NSRunLoop 和 CFRunLoopRef? 3.runloop和线程的关系? 4.run ...

  3. 解决IDEA Tomcat控制台乱码问题

    1.在Tomcat Server的配置中添加一句命令: 神秘代码: -Dfile.encoding=UTF-8 重启Tomcat,ok. 如果还不行,则需要: 1.在Settings中修改文件编码 2 ...

  4. 利用伪类写一个自定义checkbox和radio

    首先是效果图来一张 再来一张html结构 关键的CSS来了~ 首先呢要把input标签设置为display: none;  因为自定义的原理是通过label的for属性,来点击label转向为点击in ...

  5. IOS数组

    /*******************************************************************************************NSArray ...

  6. Vue踩坑第一步,安装Vue最新版本

    学习vue第一步肯定是安装vue-cli,那么肯定想去搜下如何安装vue-cli呢? 网上搜到的结果大都是: npm i vue-cli -g 输入vue -V发现: 输入node -v发现: 自己明 ...

  7. Android(java)学习笔记159:多线程断点下载的原理(Android实现)

    之前在Android(java)学习笔记215中,我们从JavaSE的角度去实现了多线程断点下载,下面从Android角度实现这个断点下载: 1. 新建一个Android工程: (1)其中我们先实现布 ...

  8. 用list去初始化numpy的array数组 numpy的array和python中自带的list之间相互转化

    http://blog.csdn.net/baiyu9821179/article/details/53365476 a=([3.234,34,3.777,6.33]) a为python的list类型 ...

  9. CWnd::Updata的作用

    CWnd::Updata的作用 CWnd::UpdateData 调用此成员函数以在对话框中初始化数据,或者取回和验证对话框数据. BOOL UpdateData(BOOL bSaveAndValid ...

  10. Caused by: java.lang.ClassNotFoundException: Cannot find class: User

    源代码: <select id="selectAll" resultType="User"> select user_id uid,user_nam ...