编程题:贪心算法
现在是选举时间。V选民参加选举,每个人都投票给N个政党中的一个。M名官员将被选入议会。
从选票到议会席位的转换采用D'Hondt方法,门槛为5%。更准确地说,假设双方编号为1到N,并且他们收到V1,V2,…,VN投票。议会席位分配如下:
1.所有获得5%以上V票的政党将从政党名单中删除。
2.议会最初是空的,即每个政党都没有分配席位。
3.对于每个P党,计算商QP=VP/(SP+1),其中VP是P党收到的总票数,SP是已经分配给P党的席位数。
4.QP商最大的政党分配一个席位。如果多个政党拥有相同的最大商,则编号较低的政党赢得席位。
5.重复第3步和第4步,直到议会满员。
选票正在清点中,只清点了V票的一部分。到目前为止,我们知道每个政党获得了多少选
票。
为每个政党编写一个程序,计算在所有V票统计完毕后选举的所有可能结果中,该政党赢得的最大和最小席位数。
### 输入格式:
第一行包含整数V、N和M(1≤V≤10000000, 1≤N≤100, 1≤M≤200),表示选票、政党和议会席位的数量。
第二行包含N个整数——每个政党(在已统计的选票中)获得的票数。这些数字之和最多为V。
### 输出格式:
在第一行输出N个整数,用空格分隔,表示两党能赢得的最大席位数。
在第二行输出N个整数,用空格分隔,表示两党能赢得的最小席位数。
### 输入样例1:
in
20 4 5
4 3 6 1
### 输出样例1:
out
3 3 3 2
1 0 1 0
### 输入样例2:
in
100 3 5
30 20 10
### 输出样例2:
out
4 3 3
1 1 0
在第一个例子中,14张选票已经清点,6张尚未清点。为了说明一种可能的结果,假设第一党获得6票中的2票,第二票无,第三票1票和第四票3票。两党的票数分别为6票、3票、7票和4票。所有各方都超过了5%的门槛。
座位分配如下:
1.商数最初为6/1、3/1、7/1和4/1;最大的是7/1,所以第三方赢得了一个席位。
2.商为6/1、3/1、7/2和4/1;最大的是6/1,所以第一方赢得了一个席位。
3.商为6/2、3/1、7/2和4/1;最大的是4/1,所以第四方赢得了一个席位。
4.商为6/2、3/1、7/2和4/2;最大的是7/2,所以第三方赢得了一个席位。
5.商为6/2、3/1、7/3和4/2;第一方和第二方的商数分别为6/2和3/1,但第一方的数量较低,因此赢得了最后一个席位。
在这一结果中,两党赢得的席位分别为2、0、2和1。由于第二党可能不会赢得任何席位,所以第二行输出的第二个数字是零。
答案:若无答案欢迎评论
从选票到议会席位的转换采用D'Hondt方法,门槛为5%。更准确地说,假设双方编号为1到N,并且他们收到V1,V2,…,VN投票。议会席位分配如下:
1.所有获得5%以上V票的政党将从政党名单中删除。
2.议会最初是空的,即每个政党都没有分配席位。
3.对于每个P党,计算商QP=VP/(SP+1),其中VP是P党收到的总票数,SP是已经分配给P党的席位数。
4.QP商最大的政党分配一个席位。如果多个政党拥有相同的最大商,则编号较低的政党赢得席位。
5.重复第3步和第4步,直到议会满员。
选票正在清点中,只清点了V票的一部分。到目前为止,我们知道每个政党获得了多少选
票。
为每个政党编写一个程序,计算在所有V票统计完毕后选举的所有可能结果中,该政党赢得的最大和最小席位数。
### 输入格式:
第一行包含整数V、N和M(1≤V≤10000000, 1≤N≤100, 1≤M≤200),表示选票、政党和议会席位的数量。
第二行包含N个整数——每个政党(在已统计的选票中)获得的票数。这些数字之和最多为V。
### 输出格式:
在第一行输出N个整数,用空格分隔,表示两党能赢得的最大席位数。
在第二行输出N个整数,用空格分隔,表示两党能赢得的最小席位数。
### 输入样例1:
in
20 4 5
4 3 6 1
### 输出样例1:
out
3 3 3 2
1 0 1 0
### 输入样例2:
in
100 3 5
30 20 10
### 输出样例2:
out
4 3 3
1 1 0
在第一个例子中,14张选票已经清点,6张尚未清点。为了说明一种可能的结果,假设第一党获得6票中的2票,第二票无,第三票1票和第四票3票。两党的票数分别为6票、3票、7票和4票。所有各方都超过了5%的门槛。
座位分配如下:
1.商数最初为6/1、3/1、7/1和4/1;最大的是7/1,所以第三方赢得了一个席位。
2.商为6/1、3/1、7/2和4/1;最大的是6/1,所以第一方赢得了一个席位。
3.商为6/2、3/1、7/2和4/1;最大的是4/1,所以第四方赢得了一个席位。
4.商为6/2、3/1、7/2和4/2;最大的是7/2,所以第三方赢得了一个席位。
5.商为6/2、3/1、7/3和4/2;第一方和第二方的商数分别为6/2和3/1,但第一方的数量较低,因此赢得了最后一个席位。
在这一结果中,两党赢得的席位分别为2、0、2和1。由于第二党可能不会赢得任何席位,所以第二行输出的第二个数字是零。
答案:若无答案欢迎评论