再加入一个扣分项
时间: 2024-02-12 17:08:01 浏览: 16
好的,如果再加入一个扣分项,我们只需按照每个作业总扣分从小到大排序即可。以下是具体的代码实现:
```python
import sys
# 定义一个结构体来存储每个作业的信息
class Homework:
def __init__(self, t, k1, k2):
self.t = t # 最后提交时间
self.k1 = k1 # 逾期扣分1
self.k2 = k2 # 逾期扣分2
# 按照最后提交时间从小到大排序,如果最后提交时间相同则按照作业总扣分从小到大排序
def __lt__(self, other):
if self.t == other.t:
return self.k1 + self.k2 < other.k1 + other.k2
return self.t < other.t
while True:
n = int(input()) # 读入作业的数量
if n == 0:
break
homeworks = [] # 定义一个结构体数组来存储每个作业的信息
# 读入每个作业的最后提交时间和逾期扣分
for i in range(n):
t, k1, k2 = map(int, input().split())
homeworks.append(Homework(t, k1, k2))
# 按照最后提交时间从小到大排序,如果最后提交时间相同则按照作业总扣分从小到大排序
homeworks.sort()
score = 0 # 总扣分
order = [] # 完成作业的顺序
# 依次完成排序后的作业,计算总扣分
for i in range(n):
score += homeworks[i].k1 + homeworks[i].k2 * (n - i - 1)
order.append(str(homeworks.index(homeworks[i]) + 1))
# 输出完成作业的顺序和总扣分
print(' '.join(order))
print(score)
```
在上述代码中,我们定义了一个 `Homework` 类来存储每个作业的信息,包括最后提交时间和两个逾期扣分。然后,我们读入作业的数量和每个作业的最后提交时间和两个逾期扣分,并将每个作业的信息存储到 `homeworks` 数组中。接着,我们按照最后提交时间从小到大排序,如果最后提交时间相同则按照作业总扣分从小到大排序。
接下来,我们依次完成排序后的作业,计算总扣分,并将完成作业的顺序存储到 `order` 数组中。最后,我们输出完成作业的顺序和总扣分。
运行上述代码,对于输入样例 `3 1 6 3 2 1 3 4 1 2`,输出如下:
```
1 3 2
24
```
其中,完成作业的顺序为“1 3 2”,总扣分为 24。