E25301: 生日相同
data structure/implementation, http://cs101.openjudge.cn/practice/25301
在一个有210人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的学号,出生日期。试找出所有生日相同的学生。
输入
第一行为整数n,表示有n个学生,n < 100 。 此后每行包含一个字符串和两个整数,分别表示学生的学号(字符串长度小于10)和出生月(1 <= m <= 12)日(1 <= d <= 31)。 学号、月、日之间用一个空格凤娥。
输出
对每组生日相同的学生,输出一行, 其中前两个数字表示月和日,后面跟着所有在当天出生的学生的学号,数字、学号之间都用一个空格分隔。 对所有的输出,要求按照日期从前到后的顺序输出。 对生日相同的学号,按输入的顺序输出。
样例输入
5
00508192 3 2
00508153 4 5
00508172 3 2
00508023 4 5
00509122 4 5样例输出
3 2 00508192 00508172
4 5 00508153 00508023 00509122来源:2016fall-cs101
用多维数组可以很直观地解出来(这里相当于是三维数组)
python
birthday_list = [[[] for j in range(32)] for i in range(13)]
for _ in range(int(input())):
student_id,m,d = input().split()
m = int(m); d = int(d)
birthday_list[m][d].append(student_id)
for month in range(1,13):
for day in range(1,32):
if len(birthday_list[month][day]) > 1:
print(month, day, *birthday_list[month][day])python
'''
利用字典记录每个日期里的人的生日的学号,然后遍历一遍所有日期,把同一天生日的人输出。
或者根据日期进行排序,然后找出同一天生日的学号。
黄丽明 北京大学
implemented by 1400015420
'''
n=int(input())
a=[]
for i in range(n):
a.append([i for i in input().split()])
c={}
for i in range(n):
if (int(a[i][1]),int(a[i][2])) in c:
c[(int(a[i][1]),int(a[i][2]))].append(a[i][0])
else :
c[(int(a[i][1]),int(a[i][2]))]=[a[i][0]]
b=list(c.keys())
b.sort()
for i in b:
if len(c[i])>1:
print(i[0],i[1],end=' ')
re=''
for j in c[i]:
re+=j+' '
print(re[:-1])2022fall-cs101,万其委,物理学院。
构建(月份m,日期d)到一个正整数z 的一对一的函数映射z=(m-1)*31+d,方便排序与整理生日相同的人。
python
n=int(input())
date=[[] for i in range(400)]
for i in range(n):
s,m,d=input().split()
m=int(m)
d=int(d)
date[(m-1)*31+d].append(s)
for i in range(1,400):
if len(date[i])>=2:
print("{} {}".format(i//31+1,i%31),end=" ")
print(' '.join(date[i]))python
n = int(input())
info = [[] for i in range(1231)]
for i in range(n):
stu, m, d = [x for x in input().split()]
a = int(m)*100 + int(d)
info[a].append(stu)
for j in range(1231):
if len(info[j]) > 1:
number = ''
for _ in info[j]:
number += _ + ' '
print(int(j/100), int(j%100), number)2022fall-cs101,郭祺,物理学院。
核心是第七行,用 get 和空格来针对同一键对应多个值。(可能说得不准确,但意思是那样)。
python
n = int(input())
info = {}
for i in range(n):
id, m, d = map(str, input().split())
m = int(m)
d = int(d)
info[(m,d)] = info.get((m,d),'') + ' ' + id
a = list(info.items())
a.sort()
for i,j in a:
m,d = i
if len(j.split()) > 1:
print(str(m) + ' ' + str(d) + j)