#include <iostream> #include <algorithm> #include <utility> #include <vector> using namespace std; #define MAXN 1005 struct homework { int no; int deadline; int score; bool operator < (const homework t) const { //重载< ,扣分相同时,按提交时间递减排序 if (score == t.score) return this->deadline > t.deadline; else return this->score < t.score; //分数不同时递增排序 } }; homework H[MAXN]; int flag[MAXN] = {0}; //记录该时段是否已有作业在做,0就是空,有就存该作业编号 int findans(int n) { int i, j; int ans = 0; for (i = n-1; i >= 0; i--) { //从最后一个(扣分最多的作业)开始做 for (j = H[i].deadline; j > 0; j--) { //对照deadline,deadline前的第一个空闲做该任务 if (!flag[j]) { flag[j] = H[i].no; break; } } if (j == 0) ans += H[i].score; } return ans; } int main() { int n, time, ans; cin >> n; while (n != 0) { for (int i = 0; i < n; i++) { H[i].no = i+1; cin >> H[i].deadline; } for (int i = 0; i < n; i++) cin >> H[i].score; // 读入数据 sort(H, H + n); // 对数据进行升序排序,越靠后的数据,扣分越高,越应该先做 int res = findans(n); for (int i = 0; i < MAXN; i++) //按时间做作业顺序输出作业编号 if(flag[i]) cout << flag[i]<<' '; cout << '\n' << res << endl; fill(flag, flag + MAXN, 0); //重置flag cin >> n; } return 0; }帮我改写成python代码
时间: 2024-01-17 08:05:24 浏览: 132
把C++代码翻译成Python代码,实现同样的功能:
```python
class Homework:
def __init__(self, no, deadline, score):
self.no = no
self.deadline = deadline
self.score = score
def __lt__(self, other):
# 重载 < 运算符
# 扣分相同时,按提交时间递减排序
if self.score == other.score:
return self.deadline > other.deadline
else:
return self.score < other.score
def findans(n):
ans = 0
flag = [0] * (MAXN + 1)
for i in range(n - 1, -1, -1):
# 从最后一个(扣分最多的作业)开始做
for j in range(H[i].deadline, 0, -1):
# 对照deadline,deadline前的第一个空闲做该任务
if not flag[j]:
flag[j] = H[i].no
break
else:
ans += H[i].score
return ans, flag
MAXN = 1005
while True:
n = int(input())
if n == 0:
break
H = []
for i in range(n):
deadline = int(input())
H.append(Homework(i + 1, deadline, 0))
for i in range(n):
score = int(input())
H[i].score = score
H.sort()
res, flag = findans(n)
# 按时间做作业顺序输出作业编号
for i in range(1, MAXN + 1):
if flag[i]:
print(flag[i], end=' ')
print()
print(res)
```
注意事项:
- Python中没有结构体,可以使用类来表示作业。
- C++中数组下标从0开始,而Python中数组下标从0开始,因此在将下标作为作业编号时需要加1。
- C++中的`fill()`函数在Python中没有对应的函数,可以使用列表解析式来清空列表。
- Python中`for...else...`语句可以在for循环完整遍历完列表后执行else块,相当于C++中的if...else...语句。
阅读全文