在这道题中,给定若干磁盘,每个磁盘具有一定的容量,数据需要按照三种可能的写入策略(轮循写入、优先剩余空间写入、按比例轮循写入)写入到磁盘中。题目要求根据输入的写入策略切换频率、写入数据量和写入比例,判断有多少种写入策略可以使得所有磁盘的空间占用率保持均衡。如果有多种策略满足条件,则输出这些策略的数量;如果没有满足条件的策略,则返回0。
dfs+模拟,对于目前的这次选择什么策略,考虑dfs去遍历每一种策略,第一种策略也就是按轮循写入(1 2 3 1 2 3....),第二组是每一次都选择目前剩余容量高的,第三种则是按比例,看最后看硬盘空间的占用率是不是保持均衡即可
题目要求我们模拟写入数据到多块硬盘的过程,并且需要保证写入后的硬盘占用率尽量保持均衡。为了实现这一点,我们可以通过深度优先搜索(DFS)遍历不同的写入策略组合,找到所有可能使占用率均衡的方案。题目中给出的三种写入策略分别为:
本题数据范围有误导性!本题在笔试过程中使用dfs回溯法就能过所有数据,所以官方后台数据应该都是在很小的范围内。
存储软件负责编程按照某写入策略,每次可向单块磁盘写入4KB数据,每写入n次可随机分配一次写入策略,存储软件的写入策略分为3种:
策略一: 轮循写入:比如存在3块硬盘0、1、2,
当n=2,采用该策略写入数据时,写入顺序为0->1;
当n=5,采用该策略写入数据时,写入顺序为0->1->2->0->1。
策略二: 优先写入剩余空间高的磁盘(剩余空间相同时,先写入序号小的硬盘),比如存在3块硬盘0、1、2,空间容量分别为12KB、16KB、24KB,
当n=2,采用该策略写入数据时,写入顺序为2->2,
当n=5,采用该策略写入数据时,写入顺序为2->2->1->2->0。
策略三: 按比例轮循写入:比如存在3块硬盘0、1、2,
当n=3,采用该策略写入数据时,数据写入顺序为0->1->1;
当n=6,采用该策略写入数据时,数据写入顺序为0->1->1->2->2->2。
切换写入策略时,可切换不同的策略也可以和上次策略保持一致,切换策略后不继承上次写入策略的执行结果,如:3块硬盘0、1、2,写入比例为1:1:2,待写入的数据量有24KB,
当n=2,一直通过策略1写入数据,写入顺序为(策略1)0->1->(策略1)0->1->(策略1)0->1;
当n=2,一直通过策略3写入数据,写入顺序为(策略3)0->1->(策略3)0->1->(策略3)0->1;
当n=5,一直通过策略1写入数据,写入顺序为(策略1)0->1->2->0->1->(策略1)0;
当n=5,一直通过策略3写入数据,写入顺序为(策略3)0->1->2->2->0->(策略3)0。
现在有一批数据要写入初始状态为空的硬盘,存在几种写入策略分配使最后硬盘空间的占用率(硬盘空间的占用率=硬盘写入的数据量/硬盘的总容量)保持均衡。
注:
1.如果不存在合适的写入策略分配使最后硬盘空间的占用率保持均衡,则返回0;
2.如果存在合适的写入策略,最终的磁盘空间占用率一定是整除的结果,精度>0.000001。
3.不管是否写入成功,都算一次。例如:
策略是轮循写入,n = 3 , 磁盘是0 , 1 , 2 . 但是1,2都满了。程序还是0,1,2的写,失败了也算数。而不是0.跳过1,2,写0,再跳过1,2,再写0!
磁盘的个数[1,200]
每个磁盘的容量(单位KB,空间是4的倍数)[1,10000]
磁盘的写入比例[1,1000]
待写入的总数据量(单位KB,总数据量是4的倍数)[1,1000]
每n次切换一次写入策略[1,1000]
存在几种写入策略分配
输入
3
64 64 64
1 1 1
12
3
输出
3
说明
总共有3块硬盘,每块硬盘有64KB容量,三块硬盘的
1:1,待写入12KB数据,每3次切换一次写入策略,共
略分配使最后的硬盘空间的占用率保持平衡。
方式1:策略1
方式2:策略2
方式3:策略3
采用3种方式均能保持写入后3块硬盘的空间占用率保
4/64=0.0625
输入
3
128 64 32
4 2 1
56
7
输出
1
说明