来来来,走过路过不要错过

  • 题目
  • 题解
  • 代码实现1
  • 代码实现2

题目

⼩Y同学有⼀块超级CPU,它有两个超级核⼼A和B。

A核⼼可以同时处理多项任务,每项任务处理时间为x,B核⼼只能同时处理⼀项任务,每项任务处理时间为y。

这⼀天,⼩Y同学接到了n项紧急任务,第i项紧急任务在ti时刻发出,且必须在任务发出时进⾏处理。
由于⼩Y可以调节CPU的B核⼼,你想知道对于y∈1,x,处理完毕所有任务的最早时间是多少?

输入格式
第⼀⾏两个整数n,x,表⽰紧急任务数量及A核⼼对每项任务的处理时间。 第⼆⾏n个整数ti,表⽰第i个紧急任务发出的时间ti。
输出格式
共x⾏:第i(1≤i≤x)⾏⼀个整数,表⽰当y=i时的答案ans。

样例
样例输入1:
3 3
1 2 3
样例输出1:
4
5
6
样例输入2:
3 5
1 4 5
样例输出2:
6
9
9
9
10
数据范围与提示
样例输入输出解释1:
y=1的时候:t1=1任务交给核⼼A,t2=2,t3=3两个任务交给核⼼B,结束时刻是4,这是最早的⼀种完成的⽅案。
y=2的时候:t1=1,t3=3两个任务交给核⼼B,t2=2任务交给核⼼A,结束时刻是5,这是最早的⼀种完成的⽅案。
y=3的时候:t1=1,t2=2两个任务交给核⼼A,t3=3任务交给核⼼B,结束时刻是6,这是最早的⼀种完成的⽅案。

数据范围:
对于40%的数据,1≤n≤103
对于100%的数据,1≤n,x≤106,0≤ti-1≤ti≤109

题解

初见这道题的时候,一行扫下来,贪心应该是跃然纸上,我就没必要解释了吧

每次拿到题一定要先观察数据范围
40%告诉我们:当你完全没有思路的时候,就可以暴力得到40
100%告诉我们:我们只能运用n,x的范围,因为1e9一秒肯定是会被T掉的
所以我们就能大概推出这份正解的时间复杂度应该是O(n)O(n)O(n)左右
贪心就更加有信心了


首先通读题目后应该了解,求得就是最后一个任务的完成时间
我们就从最后一个开始思考
题目告诉了y永远小于等于x
那么最后一个n任务肯定是交给y去完成,一定是优于或者等于交给x完成
所以说x?


贪心思想就呼之欲出了:
B核心只能一次进行一个任务,而A可以多个连续进行
所以最晚的完成时间就是?
n任务交给B完成的时间和最后一个任务交给A完成的时间的最大值


接下来我们就是思考如何去找到最后一个交给A完成的任务i???

我们知道,当i与j任务的时间差大于等于y的时候,i和j任务都可以由B去完成
这就启示我们,去找到最后一个任务i的时间与n任务的时间差小于y
这个i就必须交给A去完成,作差的方法就是AC实现

因为是求最后一个,其实我们转化一下就是从后往前找的第一个
用一个数组去存当y=i时,最后一个i的下标,这个y的处理一个n循环就可以完成了
下面分享两种代码,本质上应该都是一样的,但理解可能有难易之分

代码实现1

#include <cstdio>
#include <iostream>
using namespace std;
#define MAXN 1000005
int n, x;
int t[MAXN], result[MAXN];
int main() {scanf ( "%d %d", &n, &x );for ( int i = 1;i <= n;i ++ )scanf ( "%d", &t[i] );int tmp = x;for ( int i = n;i > 1;i -- ) {int ip = t[i] - t[i - 1];while ( ip < tmp && tmp > 0 ) {result[tmp] = i - 1;tmp --;}if ( ! tmp ) break;}for ( int i = 1;i <= x;i ++ )printf ( "%d\n", max ( t[result[i]] + x, t[n] + i ) );return 0;
}

代码实现2

#include <cstdio>
#include <iostream>
using namespace std;
#define MAXN 1000005
int n, x;
int t[MAXN], vis[MAXN];
int main() {scanf ( "%d %d", &n, &x );for ( int i = 1;i <= n;i ++ )scanf ( "%d", &t[i] );for ( int i = n;i > 1;i -- ) {int ip = t[i] - t[i - 1];ip ++;for ( int j = ip;j <= x && ! vis[j];j ++ )vis[j] = i - 1;}for ( int i = 1;i <= x;i ++ )printf ( "%d\n", max ( t[vis[i]] + x, t[n] + i ) );return 0;
}

好了,这道题就到此为止,

[2019CSP多校联赛普及组第五周] 调度CPU (贪心)相关推荐

  1. 1316 文化之旅 2012年NOIP全国联赛普及组

    1316 文化之旅 2012年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 有一位使者要游历各国,他每到一 ...

  2. 【codevs 1315】1315 摆花2012年NOIP全国联赛普及组(dp)

    1315 摆花2012年NOIP全国联赛普及组  时间限制: 1 s   空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description     小明的花店新开张,为 ...

  3. 1313 质因数分解 2012年NOIP全国联赛普及组

    1313 质因数分解 2012年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 青铜 Bronze 题目描述 Description 已知正整数 n是两个不同 ...

  4. Codevs 1010 过河卒 2002年NOIP全国联赛普及组

    1010 过河卒 2002年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 传送门 题目描述 Description 如图,A 点有一个过河卒 ...

  5. 1009 产生数 2002年NOIP全国联赛普及组

    009 产生数 2002年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 给出一个整数 n(n<10^ ...

  6. [2000年NOIP全国联赛普及组] 1019 单词接龙

    [2000年NOIP全国联赛普及组] 1019: 单词接龙 题目链接:http://129.211.20.246/problem.php?id=1019 题目描述 单词接龙是一个与我们经常玩的成语接龙 ...

  7. codevs 1145 Hanoi双塔问题 2007年NOIP全国联赛普及组

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的 ...

  8. 选数 2002年NOIP全国联赛普及组

    题目描述 Description 已知 n 个整数 x1,x2,-,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整 ...

  9. 【2002年NOIP全国联赛普及组】过河卒

    描述 棋盘上 A 点有一个过河卒,需要走到目标 B 点.卒行走的规则:可以向下.或者向右.同时在棋盘上 C 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为" ...

最新文章

  1. [剑指offer] 两个链表的第一个公共结点
  2. ueditor百度编辑器中,多图上传后,图片顺序乱掉的处理方法
  3. 求出歌手的得分python_哪位大侠帮我做做python的题目啊,做其中5个就好。跪求啊...
  4. 分享B2B信息发布小技巧
  5. tyvj 1067 合唱队形 dp LIS
  6. create_proc_read_entry中函数的说名
  7. 淤泥管道机器人_丛台区设备管道清洗超高效率
  8. 关于Debug和Release之本质区别的讨论(转载)
  9. bat(续六)-windows批处理set命令
  10. c语言从键盘输入求最大值和最小值,从键盘任意输入10个整数,计算并输出最大值和最小值及......
  11. 【BZOJ3884】上帝与集合的正确用法
  12. 苹果Mac Win10式任务栏工具:uBar
  13. 二、vue组件化开发(轻松入门vue)
  14. 真格量化入门课程——①量化策略思路入门
  15. 智能人体感应灯,微波雷达存在感应,智能照明技术方案
  16. 联想官方OEM分区制作
  17. 闲鱼:Thread.sleep(0) 到底有什么用?我:有点懵~
  18. 大数据给交通行业带来的五大变革 | 交通数据的深度应用
  19. iphone 自定义铃声制作
  20. Project使用总结-如何统计项目总工时,设置Project起始日期,修改项目日期格式

热门文章

  1. linux默认归档目录,Linux系统管理(第4章:目录和文件管理二)
  2. python if main_Python:if __name__ == '__main__'
  3. java swing 示例_JAVA简单Swing图形界面应用演示样例
  4. 神舟笔记本电源管理软件_笔记本电脑长期不用充不上电了?原来问题就出在这儿...
  5. 微信小程序android错误,app安卓端 跳转到微信小程序失败
  6. sql两个表查不同数据_产品操作MySQL第6篇 – 数据过滤-WHERE子句
  7. java实用教程——组件及事件处理——布局管理(五种)
  8. 7-3 银行家算法--综合 (50 分)(思路+详解+分析输入)宝宝们 加油
  9. [PAT乙级]1011 A+B 和 C
  10. LeetCode 104二叉树的最大深度-简单