📅  最后修改于: 2023-12-03 15:42:22.639000             🧑  作者: Mango
题目编号: 门|门CS 2011 |第 52 题
题目名称: 手机竞价
题目描述:
有 $n$ 个人,$k$ 个手机,每个人对每个手机出价,可能是一个整数,也可能不出价。手机不卖给两个出价一样的人,当然不出价也等于出 $0$ 元,求每个人所得手机的编号,如果他没有得到手机就输出 $0$。
输入格式:
第一行,两个正整数 $n,k$。
接下来 $n$ 行,每行 $k$ 个数,表示该人对这个手机的出价,如果为 $0$ 则表示不出价。
输出格式:
输出 $n$ 行,每行一个数,表示该人所得的手机编号,如果没有得到手机就输出 $0$。
输入样例:
3 3
1 2 3
2 3 1
3 2 0
输出样例:
1
2
3
这道题可以使用一种枚举的思想来解决。
枚举每一个手机的出价情况,然后判断是否有人出价高于其他人,如果有,就把这个手机给这个人,记录下编号,然后进行下一轮枚举。
在这个过程中,要注意几个问题:
n, k = map(int, input().split())
prices = [list(map(int, input().split())) for i in range(n)]
rank = [0] * k # 记录手机的得主
# 枚举手机
for i in range(k):
# 当前手机的得主
cur_winner = 0
# 当前手机的最高出价
cur_max_price = -1
# 找出当前手机的得主
for j in range(n):
if prices[j][i] > cur_max_price:
cur_max_price = prices[j][i]
cur_winner = j
# 标记得主
rank[i] = cur_winner
# 输出结果
for winner in rank:
print(winner + 1)
以上为Python3解题代码,将其复制到IDE中即可运行。