9.2 游戏 2714(9.4)

题目

“Ran,今天我要在Hakase家打游戏,不回来了。”
“Ran,Hakase新发明了游戏,我今天住博士家。”
“Ran,Conan今天要在我家通宵打游戏。”
终于有一天,电脑被打坏了……2333
所以Conan要前往专卖店买新的,正好专卖店正在促销,一共有三种礼包:
豪华礼包:一个 U盘、一个鼠标和一个机械键盘。
幸运礼包:一个 U盘、两个鼠标。
普通礼包:两个 U盘、一个鼠标。
卖店内准备了 a 个 U盘、b 个鼠标和 c 个机械键盘。为了给顾客带来足够多的惊喜,店长希望相邻两位领礼包的顾客拿到的礼包类型都是不同的。店长想知道这些奖品最多可以发出多少份礼包。可是店长毕竟没有Conan聪明,所以请教Conan,可是Conan要急着回去打游戏,所以就交给你啦。

对于100%的数据满足t<=100000,0<=a,b,c<=1000,000。

题解

每种礼包:
a b c
1 2 0
2 1 0
1 1 1
每种礼包都最少要消耗1个a和一个b,每个a和b都减去1后就是:
a b c
0 1 0
1 0 0
0 0 1
剩下的a,b,c就是每种礼包可以发的数量
因此对于每组a,b,c,假设要发d份礼包,最少要消耗掉d个a和d个b,a和b就都减去d
得x,y,z(x=a-d,y=b-d,z=c)就是每种礼包可以发的数量。
显然x,y,z都应大于等于0且所有礼包加起来大于计划要发的总礼包数量才能继续
此时有一个限制:“相邻两位领礼包的顾客拿到的礼包类型都是不同的”
那么最理想的发礼包方式无疑是12121323…的方式
二分答案ans
要达到这种方式,每种礼包的数量都应不大于其他两种礼包的和+1,可得:
x <= y+z+1
y <= x+z+1
z <= x+y+1
判断即可
然而我并没有做出这种判断方式的正确解法,于是自己根据这个思路又想了一种类似的解法:
(x+y)*2+1>=mid
(x+z)*2+1>=mid
(y+z)*2+1>=mid
每个都应满足

例:25 19 30  要发17份
    8  2  30
    x  y  z
323231313131313131313可以达到17份
3礼包最多,所以1和2礼包都用来跟3礼包搭配,开头或结尾可以加上1份3礼包
要判断能否达到17份可以通过判断(x+y)*2+1>=mid来确定
而18份:
    7  1  30
32313131313131313无法达到18份

代码

var
  a,b,c,i,t,ans,mid,l,r,x,y:longint;
begin
  readln(t);
  for i:=1 to t do
    begin
      readln(a,b,c);
      ans:=0;
      r:=a;if b<a then r:=b;
      l:=0;
      while l<=r do
        begin
          mid:=(l+r) div 2;
          x:=a;y:=b;
          a:=a-mid;b:=b-mid;
          if ((a+b)*2+1>=mid)and((b+c)*2+1>=mid)and((a+c)*2+1>=mid)and(a>=0)and(b>=0)and(a+b+c>=mid)then
            begin
              l:=mid+1;
              ans:=mid;
            end else r:=mid-1;
          a:=x;b:=y;
        end;
      writeln(ans);
    end;
end.
好的,让我来回答你的问题。 首先,让我们看一下四种调度算法的定义: - 先来先服务调度算法(FCFS):按照作业提交的顺序进行调度,先提交的作业先执行。 - 非抢占式短作业优先调度算法(SJF):按照作业运行时间的长短进行调度,先运行时间短的作业先执行。 - 抢占式短作业优先调度算法(PSJF):按照作业运行时间的长短进行调度,但是可以在运行过程中抢占当前正在运行的作业,使更短的作业先执行。 - 最高响应比优先调度算法(HRRN):按照作业响应比的大小进行调度,响应比越高的作业先执行。 接下来我们分别对这四种算法进行计算,得出它们的调度序列、平均周转时间和平均带权周转时间。 1. 先来先服务调度算法(FCFS) 按照提交顺序进行调度,所以调度序列为:A -> B -> C -> D。计算平均周转时间和平均带权周转时间: 作业号 周转时间 带权周转时间 A 4.0 2.0 B 5.0 5.0 C 5.3 10.6 D 5.5 18.3 平均周转时间 = (4.0 + 5.0 + 5.3 + 5.5)/ 4 = 5.2 平均带权周转时间 = (2.0 + 5.0 + 10.6 + 18.3)/ 4 = 9.0 2. 非抢占式短作业优先调度算法(SJF) 按照运行时间短的作业先执行,所以调度序列为:D -> C -> B -> A。计算平均周转时间和平均带权周转时间: 作业号 周转时间 带权周转时间 D 3.3 11.0 C 3.8 7.6 B 4.8 4.8 A 6.0 3.0 平均周转时间 = (3.3 + 3.8 + 4.8 + 6.0)/ 4 = 4.975 平均带权周转时间 = (11.0 + 7.6 + 4.8 + 3.0)/ 4 = 6.35 3. 抢占式短作业优先调度算法(PSJF) 按照运行时间短的作业先执行,但可以抢占当前正在运行的作业,所以调度序列为:A -> B -> D -> C。计算平均周转时间和平均带权周转时间: 作业号 周转时间 带权周转时间 A 4.0 2.0 B 5.0 5.0 D 5.3 17.7 C 5.8 11.6 平均周转时间 = (4.0 + 5.0 + 5.3 + 5.8)/ 4 = 5.275 平均带权周转时间 = (2.0 + 5.0 + 17.7 + 11.6)/ 4 = 9.075 4. 最高响应比优先调度算法(HRRN) 按照响应比高的作业先执行,所以调度序列为:A -> B -> C -> D。计算平均周转时间和平均带权周转时间: 作业号 周转时间 带权周转时间 A 4.0 2.0 B 5.0 5.0 C 5.3 10.6 D 5.5 18.3 平均周转时间 = (4.0 + 5.0 + 5.3 + 5.5)/ 4 = 5.2 平均带权周转时间 = (2.0 + 5.0 + 10.6 + 18.3)/ 4 = 9.0 综上所述,四种调度算法的调度序列、平均周转时间和平均带权周转时间如下: 调度算法 调度序列 平均周转时间 平均带权周转时间 FCFS A -> B -> C -> D 5.2 9.0 SJF D -> C -> B -> A 4.975 6.35 PSJF A -> B -> D -> C 5.275 9.075 HRRN A -> B -> C -> D 5.2 9.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值