传送门

  • 题目:

  • 思路:
    贪心策略:
    从大到小填m,用vector存每个分组内的元素。优先队列中维护分块内的元素数目(小根堆)。如果当前m可以填入队顶分组内,则一直往当前队顶分组放元素,直至不能再放;如果当前m不可以填入队顶分组内,那么说明需要新建分组,再一直往新的分组内填元素,直至不能填。
    算法正确性还是比较显然的。当然也可以不采用可以填就一直填的策略,也可以单个单个的填,但是注意优先队列比较符的重载方式会略有不同。
    总的来说每次都应贪心的选择当前元素数目最少的分组,并且要注意优先队列中元素的更新!
    时间复杂度O(nlogn)级别

  • ac代码:
    方法1:可以填一直填

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e5+10;
int n, k;
int m[maxn], c[maxn];
vector<int> ans[maxn];
struct Que{int id;friend bool operator < (Que a, Que b){return ans[a.id].size()>ans[b.id].size();}
};
priority_queue<Que> q;
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);scanf("%d %d", &n, &k);for(int i = 1; i <= n; i++) scanf("%d", &m[i]);sort(m+1, m+1+n, greater<int>());for(int i = 1; i <= k; i++) scanf("%d", &c[i]);int cnt = 1;q.push({1});for(int i = 1; i <= n; i++){int id = q.top().id;if(ans[id].size()<c[m[i]])//当前还可填,一直填到不能填{while(ans[id].size()<c[m[i]]) ans[id].push_back(m[i]), i++;i--;q.pop();q.push({id});}else//增加新的分组,一直填{cnt++;while(ans[cnt].size()<c[m[i]]) ans[cnt].push_back(m[i]), i++;i--;q.push({cnt});}}printf("%d\n", cnt);for(int i = 1; i <= cnt; i++){printf("%d", ans[i].size());for(auto e : ans[i]) printf(" %d", e);printf("\n");}return 0;
}

方法2:单个单个的填

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e5+10;
int n, k;
int m[maxn], c[maxn];
vector<int> ans[maxn];
struct Que{int id, mx;friend bool operator < (Que a, Que b){//return ans[a.id].size()>ans[b.id].size();return ans[a.id].size()==ans[b.id].size()?a.mx>b.mx:ans[a.id].size()>ans[b.id].size();}
};
priority_queue<Que> q;
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);scanf("%d %d", &n, &k);for(int i = 1; i <= n; i++) scanf("%d", &m[i]);sort(m+1, m+1+n, greater<int>());for(int i = 1; i <= k; i++) scanf("%d", &c[i]);int cnt = 1;q.push({1, 0});for(int i = 1; i <= n; i++){int id = q.top().id, mx = q.top().mx;if(ans[id].size()<c[m[i]]){ans[id].push_back(m[i]);q.pop(); q.push({id, mx});//注意此处!}else{cnt++;ans[cnt].push_back(m[i]);q.push({cnt, m[i]});}}printf("%d\n", cnt);for(int i = 1; i <= cnt; i++){printf("%d", ans[i].size());for(auto e : ans[i]) printf(" %d", e);printf("\n");}return 0;
}

【CF1342D】Multiple Testcases(贪心+优先队列)相关推荐

  1. CF1342D Multiple Testcases(构造题)

    题意 有 nnn 个数 {ai}\{a_i\}{ai​},每个 ai≤ka_i\leq kai​≤k . 每个背包大于等于 iii 的数的个数不能超过 ci(i=1,2,..,k)c_i(i=1,2, ...

  2. codeforces D. Fedor and coupons 贪心+优先队列

    题目地址:点击打开链接 D. Fedor and coupons time limit per test 4 seconds memory limit per test 256 megabytes i ...

  3. HDU 6438 网络赛 Buy and Resell(贪心 + 优先队列)题解

    思路:维护一个递增队列,如果当天的w比队首大,那么我们给收益增加 w - q.top(),这里的意思可以理解为w对总收益的贡献而不是真正获利的具体数额,这样我们就能求出最大收益.注意一下,如果w对收益 ...

  4. 1163 最高的奖励(贪心+优先队列)

    有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励.在结束时间之前完成该任务,就可以获得对应的奖励.完成每一个任务所需的时间都是1个单位时间.有时候完成所有任务是不可能的,因为时间上可能会有冲突 ...

  5. 贪心+优先队列 HDOJ 5360 Hiking

    题目传送门 1 /* 2 题意:求邀请顺序使得去爬山的人最多,每个人有去的条件 3 贪心+优先队列:首先按照l和r从小到大排序,每一次将当前人数相同的被邀请者入队,那么只要能当前人数比最多人数条件小, ...

  6. 贪心(优先队列) - New Year Snowmen - CodeForces - 140C

    贪心(优先队列) - New Year Snowmen - CodeForces - 140C 题意: 给定一个长度为n的正整数序列a1,a2,...,an.给定一个长度为n的正整数序列a_1,a_2 ...

  7. CodeForces 140C New Year Snowmen (贪心+优先队列)

    题意:n个数,选三个严格下降的数为一组,求最多能选多少组,并列出每组哪些数. 题解:贪心+优先队列 最多能选多少组,那么必须贪心数量多的. 例如:1 1 2 3 4 5 如果按照数的大小排序,只能贪到 ...

  8. CF140C New Year Snowmen(贪心+优先队列)

    CF140C 贪心+优先队列 贪心策略:每次取出数量最多的三种球,合成一个答案,再把雪球数都-1再插回去,只要还剩下三种雪球就可以不断地合成 雪球数用优先队列维护 #include <bits/ ...

  9. 【BHOJ 女娲加农炮 |、||】贪心 | 优先队列 | 堆 | E

    这次我们通过两道例题来总结一下优先队列的用法和实现: 目录: [BHOJ 1512]女娲加农炮 [BHOJ 1517]女娲加农炮II [BHOJ 1512]女娲加农炮 核心:贪心 + 优先队列 URL ...

  10. 小A与任务 (贪心 优先队列)

    题目链接:小A与任务 题意: 小A手头有 n 份任务,他可以以任意顺序完成这些任务,只有完成当前的任务后,他才能做下一个任务 第 i 个任务需要花费 xi 的时间,同时完成第 i 个任务的时间不能晚于 ...

最新文章

  1. 一图理解腾讯本次组织结构重大变革的方向和目的
  2. yourtour的几种链接
  3. GPS计算司机行车时长,深圳交警开启疲劳驾驶午间整治
  4. 网络编程学习笔记一:Socket编程
  5. 【转】IAR与Keil两款开发工具区别
  6. python wordpress自定义字段获取_WordPress 自定义字段(Custom Fields)详细介绍和使用...
  7. CF1338D:Nested Rubber Bands(树形dp)
  8. 排序算法 --- 希尔排序
  9. 七彩影视双端新版本源码
  10. Windows10 部署 Sonarqube 代码质量管理平台
  11. 9-算法 kmp算法
  12. java知识总结-25
  13. UnityWebform(2):自定义LifetimeManager和TypeConverter使Unity从HttpContext中取值注入WebForm页面...
  14. 服务器导流板的作用,前保险杠下导流板的作用是什么?
  15. 如何判断一个类是无用的类?
  16. 基于微信小程序的鲜花销售系统毕业设计源码
  17. 云服务器bat文件在哪里,云服务器bat文件在哪里
  18. 拳皇98系列连招—金家潘学习笔记
  19. android解析json数据格式,Android编程解析Json格式数据的方法
  20. Developing DataBase Applications Using MySQL Connector/C++ 中文文本

热门文章

  1. group by 深入总结
  2. 体验MSN聚酷(Juku)
  3. python壁球小游戏——pygame之旅
  4. android studio2.4,Android Studio 2.4 Preview 7 发布
  5. agax分页查询必知知识,分页必须参数详解
  6. mysql 联合索引底层结构_MySQL联合索引底层数据结构
  7. ribbon基于接口配置超时_Spring Cloud Ribbon配置详解
  8. titanic数据集_数据可视化泰坦尼克号图表预测
  9. win7安装python3.6失败_win7下python3.6安装配置方法图文教程
  10. 盘点遥测终端RTU怎么分类?