1062 Talent and Virtue
题目大意:给出一组人数,按照要求分类再排序输出。圣人是virtue和talent都超过h的人,君子是virtue超过h并且talent位于[l,h)区间内的人,笨蛋是两个都位于[l,h)区间内并且virtue>=talent的人,剩下的达到最低标准l的都是小人。PS:python日常超时,C++这里完美AC
class Person:
def __init__(self,id,virtue,talent):
self.id=id
self.virtue=virtue
self.talent=talent
n,l,h=map(int,input().split())
sages=[] #圣人
noblemen=[] #君子
foolmen=[] #笨蛋
smallmen=[] #小人
cnt=0 #统计达标的总人数
for i in range(n):
id,virtue,talent=map(int,input().split())
if virtue<l or talent<l:
continue
else:
if virtue>=h and talent>=h: #圣人
sages.append(Person(id,virtue,talent))
elif virtue>=h and talent in range(l,h): #君子
noblemen.append(Person(id,virtue,talent))
elif virtue in range(l,h) and talent in range(l,h) and virtue>=talent: #笨蛋
foolmen.append(Person(id,virtue,talent))
else:
smallmen.append(Person(id,virtue,talent))
cnt+=1
sages.sort(key=lambda p:(-(p.virtue+p.talent),-p.virtue,p.id))
noblemen.sort(key=lambda p:(-(p.virtue+p.talent),-p.virtue,p.id))
foolmen.sort(key=lambda p:(-(p.virtue+p.talent),-p.virtue,p.id))
smallmen.sort(key=lambda p:(-(p.virtue+p.talent),-p.virtue,p.id))
print(cnt)
for i in sages:
print(i.id,i.virtue,i.talent)
for i in noblemen:
print(i.id,i.virtue,i.talent)
for i in foolmen:
print(i.id,i.virtue,i.talent)
for i in smallmen:
print(i.id,i.virtue,i.talent)
该程序根据输入的人数、美德和才能值,将人们分为圣人、君子、笨蛋和小人四类,并进行排序。圣人是美德和才能都超过h的人,君子是美德超过h且才能在[l,h)区间的人,笨蛋是美德和才能都在[l,h)且美德大于等于才能的人,其余为小人。程序分别用Python和C++实现,Python可能会超时,而C++则能正确并快速完成任务。
874

被折叠的 条评论
为什么被折叠?



