时间复杂度O(nm)炸了,求调
def day(s):
month = int(s[4:6])
date = int(s[6:])
if month > 1:
date += 31
if month > 2:
date += 28
if month > 3:
date += 31
if month > 4:
date += 30
if month > 5:
date += 31
if month > 6:
date += 30
if month > 7:
date += 31
if month > 8:
date += 31
if month > 9:
date += 30
if month > 10:
date += 31
if month > 11:
date += 30
return date*86400
def second(s):
return int(s[:2])*3600+int(s[3:5])*60+int(s[6:])
def result(s):
index = list(s).index("'")
return int(s[:index])*60+int(s[index+1:len(s)-1])
def run(time, s):
if s == 'M':
if time <= 750:
return 20
if time <= 780:
return 18
if time <= 810:
return 16
if time <= 840:
return 14
if time <= 870:
return 12
if time <= 910:
return 10
if time <= 950:
return 8
if time <= 990:
return 6
if time <= 1030:
return 4
if time <= 1080:
return 2
else:
return 0
else:
if time <= 400:
return 20
if time <= 417:
return 18
if time <= 434:
return 16
if time <= 451:
return 14
if time <= 470:
return 12
if time <= 485:
return 10
if time <= 500:
return 8
if time <= 515:
return 6
if time <= 530:
return 4
if time <= 540:
return 2
else:
return 0
def sun(x):
if x >= 21:
return 10
if x >= 19:
return 9
if x >= 17:
return 8
if x >= 14:
return 7
if x >= 11:
return 6
if x >= 7:
return 4
if x >= 3:
return 2
else:
return 0
def plan(x):
if x >= 18:
return 5
if x >= 15:
return 4
if x >= 12:
return 3
if x >= 9:
return 2
if x >= 6:
return 1
else:
return 0
information = []
n = int(input())
sunny = [[] for i in range(n)]
for i in range(n):
inp = input().split()
information.append([int(inp[0]), inp[1], int(inp[2]), result(inp[3]), inp[4], int(inp[5]), int(inp[6])])
# 0:学号
# 1:性别
# 2:专项成绩
# 3:长跑成绩(秒)
# 4:体质测试
# 5:大一专项期末检测成绩
# 6:班级训练营
# 7:阳光赛跑
m = int(input())
for i in range(m):
inp = input().split()
number = int(inp[1])
u = 0
for j in range(n):
if information[j][0] == number:
u = j
break
sunny[u].append([day(inp[0]), number, second(inp[2]), second(inp[3]),
float(inp[4])*1000, result(inp[5]), int(inp[6])])
for i in range(n):
last = -21600
cnt = 0
for j in sunny[i]:
if information[i][1] == 'F':
if j[4] < 1500:
continue
else:
if j[4] < 3000:
continue
if not 2 <= j[4]/(j[3]-j[2]) <= 5:
continue
if j[5] > 270:
continue
if j[4]/j[6] > 1.5:
continue
if j[0]+j[2]-last < 21600:
continue
last = j[0]+j[3]
cnt += 1
information[i].append(cnt)
for i in information: # i[2]为总成绩
i[2] += run(i[3], i[1])
i[2] += sun(i[7])
if i[4] == 'P':
i[2] += 10
i[2] += i[5]
i[2] += plan(i[6]+i[7])
if i[2] >= 95:
level = 'A'
elif i[2] >= 90:
level = 'A-'
elif i[2] >= 85:
level = 'B+'
elif i[2] >= 80:
level = 'B'
elif i[2] >= 77:
level = 'B-'
elif i[2] >= 73:
level = 'C+'
elif i[2] >= 70:
level = 'C'
elif i[2] >= 67:
level = 'C-'
elif i[2] >= 63:
level = 'D+'
elif i[2] >= 60:
level = 'D'
else:
level = 'F'
print('%d %d %s' % (i[0], i[2], level))