2019拼多多提前批笔试 —— 票选球王

题目描述:
M 个投票者给 N 个球星评等级,等级由英文字母表示,'a'级最高,'z'级最低,共26个级别。当 [球星X的评级比Y高] 的票数高于 [球星Y的评级比X高] 的票数时,称候选球星X强于候选球星Y。若有一个候选球星强于其他所有球星,则称为球王。根据这个规则至多有一个球王,否则没有球王。请你判断哪位换选球星是球王。

输入描述:

第一行包含两个数字N、M,分别代表候选球星数量和选票数量;接下来M行,每行是一个长度为N的字符串,每个字符串表示一张选票上的信息。每个字符串的第k个字符,表示这张选票对第k个候选球星。

输出描述:

若有球王,则输出仅包含一个整数X,表示编号为X(0<=X<N)的候选球星是球王;若无球王,则输出一行仅包含一个整数-1

输入样例:

4 3

acbd

bacd

bdca

输出样例:
0

N,M = map(int,input().split(' '))
matrix = [[0]*N]*M

#output = [[0]*M]*N
#初始化
for i in range(M):
    matrix[i] = list(input())
    for j in range(N):
        matrix[i][j] = matrix[i][j]

#倒置并排序
out = []
for i in range(N):
    a = []
    for j in range(M):
        a.append(matrix[j][i])
    out.append(''.join(sorted(a)))
#选择球王
king = out[0]
index = 0
for i in range(1,N):
    if king>out[i]:
        king = out[i]
        index = i
#查看是否有票数相同的,若有为-1,无则为球王
count = 0
for i in range(N):
    if king == out[i]:
        count += 1
if count>1:
    index = -1
print(index)

参考了这篇 C++版本:https://blog.csdn.net/lizhentao0707/article/details/81159859

猜你喜欢

转载自blog.csdn.net/Eat_shopping/article/details/81168926