某循环赛的比赛规则是胜者得3分,和者得1分,败者不得分。请根据各人总得分从高到低进行排名。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试先输入一个整数n(2≤n≤100),表示参赛人数,然后输入n*(n-1)/2行,每行一个比赛结果。每行比赛结果由A、B、f构成,A和B为参赛人名(不含空格),f=1表示A胜B,f=0表示A与B打和。由于总是将胜者排在前面,所以不存在A败于B的情况。
输出格式:
对于每组测试,按名次分行输出,名次与名字之间以一个空格间隔,并列名次的名字在同一行输出,按字典序以一个空格隔开。
输入样例:
2
3
Jack Smith 0
Smith Bob 1
Jack Bob 1
6
a b 1
c a 0
a d 0
a e 1
f a 1
b c 1
d b 0
e b 0
f b 0
c d 1
c e 1
c f 1
d e 0
f d 0
e f 0
输出样例:
1 Jack Smith
3 Bob
1 c
2 a
3 b f
5 d
6 e
这个题其实不难,很多同学可能忽略字典序了,话不多说直接放代码:
from collections import defaultdict
def lolo2(z):
w = defaultdict(int) # 当查找字典键不存在时返回0
for a, b, f in z:
if f == 1:
w[a] += 3
w[b] += 0
elif f == 0:
w[a] += 1
w[b] += 1
return w
def lolo1():
n = int(input())
z = []
for i in range(n * (n - 1) // 2):
a, b, f = input().split()
z.append((a, b, int(f)))
w = lolo2(z)
q = sorted(w.items(), key=lambda x: (-x[1], x[0]))
# lambda表达式,先对下x[1]逆序(默认升序),如果x[1]相等则按x[0]升序
for e, f in enumerate(q, 1):
if e == 1:
print(f'{e} {f[0]}', end="")
else:
if w == f[1]:
print(end=" ")
print(f'{f[0]}', end="")
e += 1
else:
print()
print(f'{e} {f[0]}', end="")
w = f[1]
t = int(input())
for i in range(t):
lolo1()
if i < t - 1:
print()
我这里使用了一个偷懒的函数 defaultdict,感兴趣的可以去学一下, 当然你们也可以自己用if来判断情况
给你们看一下之前我用if写的代码:
a=eval(input())
z={}
for i in range(a):
b=eval(input())
for g in range(int(b*(b-1)/2)):
c=input().split()
if c[2]=="1":
if z.get(c[0])==None or z.get(c[1])==None:
if z.get(c[0])!=None and z.get(c[1])==None:
z[c[0]]=z[c[0]]+3
z[c[1]]=0
elif z.get(c[0])==None and z.get(c[1])!=None:
z[c[0]]=3
else:
z[c[0]]=3
z[c[1]]=0
else:
z[c[0]]=z[c[0]]+3
else:
if z.get(c[0])==None or z.get(c[1])==None:
if z.get(c[0])!=None and z.get(c[1])==None:
z[c[0]]=z[c[0]]+1
z[c[1]]=1
elif z.get(c[0])==None and z.get(c[1])!=None:
z[c[1]]=z[c[1]]+1
z[c[0]]=1
else:
z[c[0]]=1
z[c[1]]=1
else:
z[c[0]]=z[c[0]]+1
z[c[1]]=z[c[1]]+1
d=sorted(z.items(),key=lambda z:(-z[1],z[0]))
for e,f in enumerate(d,1):
if e==1:
print(f'{e} {f[0]}',end="")
else:
if w==f[1]:
print(end=" ")
print(f'{f[0]}',end="")
e+=1
else:
print()
print(f'{e} {f[0]}',end="")
w=f[1]
if i!=a-1:
print()
z={}
其实这题细心一点大家应该都会写。
当然,这只是本人对这个题的一下看法,可能用的方法有点笨!
欢迎读者指教!