[codechef July Challenge 2017] IPC Trainers
IPCTRAIN: 训练营教练
题目描述
本次印度编程训练营(Indian Programming Camp,IPC)共请到了 N 名教练。训练营的日
程安排有 M 天,每天最多上一节课。第 i 名教练在第 Di 天到达,直到训练营结束才离开。第 i 名
教练希望上 Ti 节课。要是少上了课,那么教练会感到扎心,每少上一节,扎心值就会加 Si。
作为主办方,你希望最小化所有教练的扎心值之和。
输入格式
输入的第一行包含一个整数 T,代表测试数据的组数。接下来是 T 组数据。
每组数据的第一行包含两个整数 N 和 D。接下来 N 行,每行包含三个整数 Di
, Ti
, Si。
输出格式
对于每组数据,输出一行,包含一个整数,代表扎心值之和的最小值。
数据范围和子任务
• 1 ≤ T ≤ 10
• 1 ≤ N, D, Si ≤ 105
• 1 ≤ Di
, Ti ≤ D
子任务 1(40 分):
• 1 leqN, D, Si ≤ 103
子任务 2(60 分):
• 无附加限制
样例数据
输入
3
2 3
1 2 300
2 2 100
2 3
1 1 100
2 2 300
2 3
3 2 150
1 1 200
输出
100
0
150
样例解释
对于第一组数据,两名教练都想上两节课,分别在第 1 和第 2 天到达。可以安排第一名教练
上头两天的课程,第二名教练上最后一天的课程。这样第二名教练少上了一节课,扎心程度为
100。可以证明不存在更好的排课方案。
对于第二组数据,可以让所有教练都满意。
对于第三组数据,第一名教练第三天才到,却想上两节课。一天一节课,训练营就三天,所
以只能让他扎心。第二名教练第一天就到了,但只想上一节课,所以可以给他安排第 1 天或者第 2
天。但无论如何,总有一天没有课上。
这题还是比较水的。当然是一个贪心的想法。在某一天,很多人会要求上课。那怎么办?挑代价最大的呗,之后一直都挑代价最大的(且需要能取,没有取完),最后就能得到最优解。那么想到了这里,我们自然会有一个用堆维护的想法。每一天从堆里面挑出最大的一个,那么这个教授需要要求上课的天数少了一天。如果某个教授要求天数变为了0,那么他就没事了。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
];
long long ans;
struct per{
int arr,cla,unh;
bool operator < (const per &other) const {return arr<other.arr;}
}a[];
inline int read(){
; char ch=getchar();
') ch=getchar();
+ch-',ch=getchar();
return x;
}
void put(int x){
heap[++len]=x;
; son>>=)
]].unh&&a[heap[son]].unh>a[heap[son>>]].unh) swap(heap[son],heap[son>>]);
else break;
}
void get(){
heap[]=heap[len],heap[len]=,len--;
; (fa<<)<=n;){
int son;
]].unh>a[heap[fa<<|]].unh||(fa<<|)>n) son=fa<<; |;
if (a[heap[son]].unh>a[heap[fa]].unh) swap(heap[son],heap[fa]),fa=son;
else return;
}
}
int main(){
for (int Ts=read(); Ts; Ts--){
n=read(),D=read(),ans=len=;
memset(a,,sizeof a);
memset(heap,,sizeof heap);
; i<=n; i++) a[i].arr=read(),a[i].cla=read(),a[i].unh=read();
sort(a+,a++n);
;
; days<=D; days++){
while (j<=n&&a[j].arr==days) put(j),j++;
if (!len) continue;
]; a[x].cla--;
if (!a[x].cla) get();
}
; i<=n; i++) ans+=(long long)a[i].unh*a[i].cla;
printf("%lld\n",ans);
}
;
}
[codechef July Challenge 2017] IPC Trainers的更多相关文章
- [codechef July Challenge 2017] Calculator
CALC: 计算器题目描述大厨有一个计算器,计算器上有两个屏幕和两个按钮.初始时每个屏幕上显示的都是 0.每按一次第一个按钮,就会让第一个屏幕上显示的数字加 1,同时消耗 1 单位的能量.每按一次第二 ...
- [codechef July Challenge 2017] Chef and Sign Sequences
CHEFSIGN: 大厨与符号序列题目描述大厨昨天捡到了一个奇怪的字符串 s,这是一个仅包含‘<’.‘=’和‘>’三种比较符号的字符串.记字符串长度为 N,大厨想要在字符串的开头.结尾,和 ...
- [codechef July Challenge 2017] Pishty and tree
PSHTTR: Pishty 和城堡题目描述Pishty 是生活在胡斯特市的一个小男孩.胡斯特是胡克兰境内的一个古城,以其中世纪风格的古堡和非常聪明的熊闻名全国.胡斯特的镇城之宝是就是这么一座古堡,历 ...
- CF&&CC百套计划2 CodeChef December Challenge 2017 Chef And Easy Xor Queries
https://www.codechef.com/DEC17/problems/CHEFEXQ 题意: 位置i的数改为k 询问区间[1,i]内有多少个前缀的异或和为k 分块 sum[i][j] 表示第 ...
- CF&&CC百套计划2 CodeChef December Challenge 2017 Chef and Hamming Distance of arrays
https://www.codechef.com/DEC17/problems/CHEFHAM #include<cstdio> #include<cstring> #incl ...
- CF&&CC百套计划2 CodeChef December Challenge 2017 Total Diamonds
https://www.codechef.com/DEC17/problems/VK18 #include<cstdio> #include<iostream> #includ ...
- CF&&CC百套计划2 CodeChef December Challenge 2017 Penalty Shoot-out
https://www.codechef.com/DEC17/problems/CPLAY #include<cstdio> #include<algorithm> using ...
- CF&&CC百套计划2 CodeChef December Challenge 2017 Chef And his Cake
https://www.codechef.com/DEC17/problems/GIT01 #include<cstdio> #include<algorithm> using ...
- codechef January Challenge 2017 简要题解
https://www.codechef.com/JAN17 Cats and Dogs 签到题 #include<cstdio> int min(int a,int b){return ...
随机推荐
- Python: 字典应用题
Write a program to read through the mbox-short.txt and figure out who has sent the greatest number o ...
- 51nod 1832 先序遍历与后序遍历(dfs+高精度)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1832 题意: 思路: 官方题解如下: 可以看一下这篇文章:https:/ ...
- HDU 4403 A very hard Aoshu problem(dfs爆搜)
http://acm.hdu.edu.cn/showproblem.php?pid=4403 题意: 给出一串数字,在里面添加一个等号和多个+号,使得等式成立,问有多少种不同的式子. 思路: 数据量比 ...
- P1547 Out of Hay
传送门 练习 只是一个最小生成树的水题,拿来练练模板 AC代码: #include<iostream> #include<cstdio> #include<alg ...
- C++的虚函数
1 多态产生的背景 希望同一个方法在派生类和基类中的行为是不同的,换句话来说,方法的行为取决于调用该方法的对象. 2 解决多态的两种方法 1)在派生类中重新定义基类的方法 2)使用虚方法 3 虚 ...
- 牛客网NOIP赛前集训营-提高组(第七场)C 洞穴
洞穴 思路: 矩阵乘法 由于只需要知道 A ^ l 的 第a行第b个元素 所以我们每次在做矩阵乘法时只需要算第a行就可以了 还要像矩阵快速幂一样预处理A ^ (1<<d) 代码: #pra ...
- Python __init__.py 文件使用
__init__.py的主要作用是: 1. Python中package的标识,不能删除 2. 定义__all__用来模糊导入 3. 编写Python代码(不建议在__init__中写python模块 ...
- vue cli 打包项目造成css背景图路径错误
vue cli做项目的时候难免会碰到,css引用背景图或者css,js之间的相互引用!!!这时候打包后可能会出现一个错误!!如下图: 写法: 错误: 会无端多出一个“/css/static/” 这样就 ...
- 第 3 章 镜像 - 010 - base 镜像
base 镜像有两层含义: 不依赖其他镜像,从 scratch 构建. 其他镜像可以之为基础进行扩展. 能称作 base 镜像的通常都是各种 Linux 发行版的 Docker 镜像,比如 Ubunt ...
- Spring Boot入门第一天:Hello, Spring Boot!
原文链接 1. 新建一个Maven Web项目. 2. 配置pom.xml文件. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...