题目链接 https://vjudge.ppsucxtt.cn/contest/450938#problem/H
题目大意:一个底座,上下底直径可能相同也可能相差1,给你n个花瓶,将其放在底座上,底座可以颠倒,一个花瓶对应一个底座,是否能全部放下?发下则输出每个花瓶的底座编号,否则输出impossible;
解题思路:将底座相同的放在mp1中,不相同的则将较小的一端放在mp2中
将花瓶按从小到大排序
从小到大遍历每一个花瓶,假设当前花瓶大小x,
先在mp1中寻找x(因为相同底座的只能匹配当前x)
否则在mp2中中寻找x-1(即找到后要颠倒花瓶,用较大端与x匹配,因为提前排过序并且mp2中存储的是x的较小端中,现在在mp2中找到的这些底座,现在的较大端若不能与x匹配,以后就更不可能匹配了,因为以后花瓶都是更大的)
否则在mp2中寻找x;
否则该花瓶没有底座与其匹配,impossible;

#include<bits/stdc++.h>
using namespace std;
const int N=10000005;
const int INF=0x3f3f3f3f;
const int m=1e+3;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
unordered_map<int,stack<int> >mp1,mp2;
int d[N];
struct pp
{int x;int i;
}s[N];
bool cmp(pp x,pp y)
{return x.x<y.x;
}
int main()
{int n,m;cin>>n>>m;for(int i=1;i<=n;i++){int x,y;cin>>x>>y;if(x==y){mp1[x].push(i);}else{mp2[min(x,y)].push(i);}}for(int i=1;i<=m;i++){cin>>s[i].x;s[i].i=i;}sort(s+1,s+m+1,cmp);int t=0;for(int i=1;i<=m;++i){if(!mp1[s[i].x].empty()){d[s[i].i]=mp1[s[i].x].top();mp1[s[i].x].pop();}else    if(!mp2[s[i].x-1].empty()){d[s[i].i]=mp2[s[i].x-1].top();mp2[s[i].x-1].pop();}else if(!mp2[s[i].x].empty()){d[s[i].i]=mp2[s[i].x].top();mp2[s[i].x].pop();}else{t=1;break;}}if(t){cout<<"impossible"<<endl;}else{for(int i=1;i<=m;i++){cout<<d[i]<<endl;}}}

Historic Exhibition 贪心相关推荐

  1. B2 - H - Historic Exhibition(二分图匹配+优化建图)

    Problem n个花瓶,每个花瓶有一个编号,m个台柱,台柱上下各有两个编号,当花瓶编号与台柱编号相匹配时花瓶才能放在台柱上,每个台柱上最多能放一个花瓶,求能否将所有花瓶放上台柱,输出方案.n< ...

  2. 史上最全的SGU题目分类

    由于SGU上神题遍地,特列此表,便于训练时分类训练. 101 Domino 欧拉路 102 Coprime 枚举/数学方法 103 Traffic Lights 最短路 104 Little Shop ...

  3. Atcoder Codefestival Exhibition/Team Relay/Tournament Round 简要题解

    Exhibition Awkward 考虑容斥,至少某些限制不满足. 把不满足的边画出来,发现是若干条不相交路径,DP即可. #include <bits/stdc++.h> #defin ...

  4. 算法设计与分析第3章 贪心算法

    第4章 贪心算法 贪心算法总是作出在当前看来最好的选择.也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择. 贪心算法的基本要素 1.贪心选择性质 所谓贪心选择性质是指所 ...

  5. 贪心算法单源点最短路径例题c语言源代码,Dijkstra算法是解单源最短路径问题的一个贪心算法...

    问题描述 给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数. 另外,还给定 V 中的一个项点,称为源. 现在我们要计算从源到所有其他各项点的最短路径长度. 这里的长度是指路上各边权之 ...

  6. Too Many Segments CF595D 贪心乱搞

    传送门! 比赛的时候没有时间写了,看看了看大佬的代码,学习学习. 一开始实验室大佬说是用差分写的,但是看了代码发现打cf的人大家都是stl狂魔! 贪心思路:区间按照左端点排序,从1~2e5遍历每一个点 ...

  7. Roundgod and Milk Tea 贪心

    这个题好像可以用一种类似与置换的贪心方法来做~ sum记为剩余奶茶,一开始sum等于奶茶和 ans记录已经喝的奶茶数 不用排序,我们就从前往后直接处理,考虑的是每一个班最多可以喝多少杯奶茶 就是从剩余 ...

  8. 贪心算法简单实践 -- 分糖果、钱币找零、最多区间覆盖、哈夫曼编解码

    1. 贪心算法概览 贪心算法是一种算法思想.希望能够满足限制的情况下将期望值最大化.比如:Huffman编码,Dijkstra单源最短路径问题,Kruskal最小生成树 等问题都希望满足限制的情况下用 ...

  9. 贪心:expedition 最优加油方法

    已知一条公路上,有一个起点与一个终点,这之间有n个加油站;已知从这n个加 油站到终点的距离d与各个加油站可以加油的量l,起点位置至终点的距离L与起 始时刻油箱中汽油量P;假设使用1个单位的汽油即走1个 ...

最新文章

  1. public void DeleteT(ListT EntityList) where T : class, new() 这是什么意思
  2. wangEditor编辑器在laravel中上传图片(二)
  3. Spring核心--IOCAOP
  4. 【c++面向对象编程】工资管理系统
  5. 永擎服务器主板稳定性,主板看不停 Computex2015华擎展台一览
  6. python中for循环格式_如何将python中for循环的输出写入csv格式的文件?
  7. Excel 【数据透视表】 -【动态表图】 之核心 -【切片器】
  8. JavaSE生成随机数
  9. windows 下pcl的安装和编译
  10. 16行代码实现微信聊天机器人,自动智能回复,打团了让它来陪老婆聊天
  11. Ubuntu 安装绿联CM448无线网卡驱动
  12. 机制检验——中介检验
  13. 深入浅出 SSL/TLS 协议
  14. python实现百度贴吧自动顶贴机器人
  15. 计算机中英字幕精品教程合集
  16. React 解决 “cross-cutting concerns” 问题
  17. html常用长度单位
  18. docker命令--k8s的日志
  19. C++之struct构造函数
  20. H5实现透明通道视频

热门文章

  1. Building Maintainable Software-java篇之Couple Architecture Components Loosely
  2. 阅读笔记之:Multimodal learning in Loosely-organized web images-CVPR2014
  3. 五分钟学会一篇期末学生学籍管理系统
  4. 处理iphone 微信中.play()方法不能播放的问题
  5. 前端练习--网易新闻
  6. attachment.php是什么,attachment是什么意思
  7. 大师们怎么养家糊口过日子
  8. 苹果更新提示:已接入无线局域网却提示需要接入
  9. 浅谈垃圾渗滤液处理设计要点
  10. 业界新闻: JAVA 7新特性让JVM“瘦身”成功!