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

在这里插入图片描述在这里插入图片描述

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

  • 题目
  • 题解
  • 代码实现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;
}

好了,这道题就到此为止,
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318254.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NumSharp v0.6.1 科学计算库发布,支持标量和隐式转换

NumSharp&#xff08;Numerical .NET&#xff09;可以说是C&#xff03;中的科学计算库。 它是用C&#xff03;编写的&#xff0c;符合.netstandard 2.0库标准。 它的目标是让.NET开发人员使用NumPy的语法编写机器学习代码&#xff0c;从而最大限度地借鉴现有大量在python代码的…

[Luogu2279][HNOI2003] 消防局的设立

文章目录题目法一&#xff1a;树上DP思路代码实现法二&#xff1a;贪心 搜索思路代码实现题目 2020年&#xff0c;人类在火星上建立了一个庞大的基地群&#xff0c;总共有n个基地。起初为了节约材料&#xff0c;人类只修建了n-1条道路来连接这些基地&#xff0c;并且每两个基…

dnSpy 强大的.Net反编译软件

一说起.net的反编译软件&#xff0c;大家首先想到的就是Reflector&#xff0c;ILSpy&#xff0c;dotPeek等等。而dnSpy同样是一款优秀的反编译软件&#xff0c;同时它是开源免费的。官方的描述是: dnSpy是一个调试器和.NET组件编辑器。 即使您没有任何可用的源代码&#xff0c;…

小奇探险

文章目录题目题解代码实现题目 小奇去遗迹探险&#xff0c;遗迹里有N个宝箱&#xff0c;有的装满了珠宝&#xff0c;有的装着废品。 小奇有地图&#xff0c;所以它知道每一个宝箱的价值&#xff0c;但是它不喜欢走回头路&#xff0c;所以要按顺序拿这N个宝箱中的若干个。 拿宝…

基于Asp.Net Core打造轻量级内部服务治理RPC(二 远程服务设计)

紧接上一篇《基于Asp.Net Core打造轻量级内部服务治理RPC(一)》文章。本文主要讲解基于Asp.Net Core的远程服务设计和实现。在上一篇中讲过,服务提供者提供的服务实际上就是一个Controller&#xff0c;那么是否在该程序中&#xff0c;服务都按照Asp.Net Core 中的Web Api的方式…

[NOIP 2009 提高组]最优贸易

勤劳的一更题目题解代码实现题目 C国有 n个大城市和 m 条道路&#xff0c;每条道路连接这n个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这 m 条道路中有一部分为单向通行的道路&#xff0c;一部分为双向通行的道路&#xff0c;双向通行的道路在统计条数…

Azure Service Fabric Mesh:一个构建任务关键型微服务的平台

本文要点Azure Service Fabric Mesh&#xff08;目前处于预览阶段&#xff09;是一个完全托管的服务&#xff0c;它使你可以使用“无服务器”方法构建、部署和管理由运行在容器中的多语言服务组成的应用程序。Azure Service Fabric Mesh 通过使用 Envoy Proxy 构建的软件定义网…

P3265 [JLOI2015]装备购买

题目描述&#xff1a; 给N个整数向量&#xff0c;每个向量带权值&#xff0c;求权值和最小的线性基 题解&#xff1a; 按权值v从小->大排序&#xff0c;依次插入线性基。整数线性基的思想类似&#xff0c;只是此时“消去”不能直接xor完成&#xff0c;需要类似高斯消元一样…

Surging1.0发布在即,.NET开发者们,你们还在等什么?

开源&#xff0c;是近三十年来互联网经久不衰的话题。它不仅仅是一种技术分享的形态&#xff0c;更是一种开放&#xff0c;包容&#xff0c;互利共赢的互联网精神。 不到30年前&#xff0c;大神林纳德托瓦兹&#xff0c;在赫尔辛基大学实验室里&#xff0c;开发出了第一个版本的…

[SDOI2016]排列计数 (错排数概念 + 递推公式【附带证明】)

辛勤二更题目题解错排数概念错排数递推公式及其证明代码实现这种题做的时候&#xff1a; 做完后&#xff1a;正常这就是生活&#xff0c;我们要学会习惯 题目 求有多少种长度为 n 的序列 A&#xff0c;满足以下条件&#xff1a; 1 ~ n 这 n 个数在序列中各出现了一次 若第 i …

失配树(border树)

4和6没有border关系 举例子&#xff1a; 当i 3时&#xff0c;j fa[i-1] fa[2] 0 s[j1] s[1] a s[3] 所以把i 3点的父亲设为j1 1 P5829 [模板]失配树

魔方俱乐部

爆肝感动三更题目思路90分代码&#xff08;MLE&#xff09;题解代码实现题目 fateice 来到了魔方俱乐部旅行。 魔方俱乐部有N个分部&#xff0c;每个分部均有且仅有一个虫洞&#xff0c;但是这虫洞只能通往一个分部。 每个分部有一个 orzFang 价值&#xff0c;第i个分部的 or…

模板:最大匹配

文章目录前言代码前言 匈牙利算法 可以解决的问题&#xff1a; &#xff08;原谅我的偷懒&#xff09; &#xff08;原谅我的水文&#xff09; 代码 #include<bits/stdc.h> using namespace std; #define ll long long const int N3e5100; const int mod1e97; int n,…

Stack Overflow 监控系统内部架构初探

Stack Exchange 架构主管 Nick Craver 在最近的一篇文章中介绍了他们的监控系统。他在文章中讨论了监控策略背后的理念和动机&#xff0c;并介绍了他们的工具集——主要是 Bosun、Grafana 和 Opserver。Stack Overflow 及其姐妹站点 Stack Exchange 运行在.NET 和 MS SQL Serve…

P5829 【模板】失配树

P5829 【模板】失配树 题目&#xff1a; 题解&#xff1a; 参考题解 我们先想一个问题&#xff1a;如何求出一个字符串的所有border&#xff1f; 如果一个字符串既是 S的前缀又是 S 的后缀&#xff0c;那么我们把 SS 自己平移一下就可以前后重合&#xff0c;然后我们就可以继…

[JLOI2015]战争调度

文章目录题目题解代码实现题目 脸哥最近来到了一个神奇的王国&#xff0c;王国里的公民每个公民有两个下属或者没有下属&#xff0c;这种关系刚好组成一个 n 层的完全二叉树。 公民 i 的下属是 2 * i 和 2 * i 1。最下层的公民即叶子节点的公民是平民&#xff0c; 平民没有下…

使用PerfView监测.NET程序性能(一):Event Trace for Windows

前言&#xff1a;在日常项目开发中&#xff0c;我们时不时会遇到程序占用了很高CPU的情况&#xff0c;可能是程序里某些未经优化的代码或者Bug&#xff0c;或者是程序运行压力太大。无论是什么原因&#xff0c;我们总希望能看到到底是哪个方法占用了如此高的CPU。微软为我们提供…

【用学校抄作业带你走进可持久化线段树(主席树)】可持久化线段树概念+全套模板+例题入门:[福利]可持久化线段树)

我似乎很少写这种算法博客可持久化线段树概念概念介绍&#xff08;类比帮助理解&#xff09;简单分析一下时间和空间复杂度&#xff08;内容池&#xff09;模板结构体变量建树模板单点修改模板单点查询模板区间修改模板&#xff08;pushup&#xff09;区间修改模板&#xff08;…

P3258 [JLOI2014]松鼠的新家

文章目录题意&#xff1a;题解&#xff1a;树上差分代码&#xff1a;树链剖分代码&#xff1a;P3258 [JLOI2014]松鼠的新家题意&#xff1a; n个点&#xff0c;n-1条边&#xff0c;给出每个点的拜访顺序&#xff0c;问每个点经过几次&#xff08;最后一次移动不算拜访&#xf…

[SOCI2005]最大子矩阵(DP) + [JXOI2018]守卫(DP) + [CQOI2016]手机号码(数位DP)[各种DP专练]

DP专练博客 DP专练T1&#xff1a;最大子矩阵题目题解代码实现T2&#xff1a;守卫题目题解代码实现T3&#xff1a;手机号码题目题解代码实现T1&#xff1a;最大子矩阵 题目 这里有一个n*m的矩阵&#xff0c;请你选出其中k个子矩阵&#xff0c;使得这个k个子矩阵分值之和最大。…