NC217893. 成绩查询ing
描述
输入描述
第一行包含一个整数N,表示系统中共有N个人(1<=N<=100000)。 下面N行分别输入N个人的姓名Name,成绩Grade(成绩在0~100之间),性别(1或2分别表示男性、女性),学号。表示系统中成员的信息 输入查询次数M(M<=10000000),接下来M行完成M次查询任务
输出描述
输出M次查询的结果,当T为1时,输入同学的姓名Name,并在一行中依次输出同学的成绩Grade(0<=Grade<=100), 学号(0~1000000},性别(1/2),用空格间隔(注意行末无空格),T为2时,输入成绩,输出有具体有哪些同学考到了这个分数,输出同学的Name(每个Name输出一行,无空格),并要求按字典序输出,当没有同学为此分数时,则不输出。
示例1
输入:
5 N 28 2 7475 UN 83 2 27550 EXF 5 2 17298 OVYNH 51 2 14827 XNV 53 1 7591 2 1 XNV 2 27
输出:
53 7591 1
Python3(3.9) 解法, 执行用时: 1268ms, 内存消耗: 23092K, 提交时间: 2021-01-30 14:00:09
_ = int(input()) name_dl = {} grade_dl = {} for _ai in range(_): li = input().split() name_dl[li[0]] = li[1] + ' ' + li[3] + ' ' + li[2] if li[1] not in grade_dl: grade_dl[li[1]] = [li[0]] else: grade_dl[li[1]].append(li[0]) _b = int(input()) for _bi in range(_b): r = input() if r == '1': k = input() print(name_dl[k]) else: p = input() if p in grade_dl: res = grade_dl[p] res.sort() for i in res: print(i)
C++(clang++11) 解法, 执行用时: 768ms, 内存消耗: 20708K, 提交时间: 2021-01-30 19:40:52
#include <bits/stdc++.h> using namespace std; const int N=1e5+10; struct s { int sex,num,g; }; unordered_map<string,struct s >mp; unordered_map<int,set<string>>mp1; int main() { int n,m; cin>>n; while(n--){ int s,n,g; string name; cin>>name>>g>>s>>n; mp[name]={s,n,g}; mp1[g].insert(name); } cin>>m; while(m--){ int opt; cin>>opt; if(opt==1){ string n; cin>>n; printf("%d %d %d\n",mp[n].g,mp[n].num,mp[n].sex); } else{ int gr; cin>>gr; for(auto c:mp1[gr]) cout<<c<<'\n'; } } return 0; }
pypy3(pypy3.6.1) 解法, 执行用时: 932ms, 内存消耗: 54596K, 提交时间: 2021-02-07 14:20:10
from collections import defaultdict n = int(input()) hmc = list() for i in range(n): xm, cj, xb, xh = input().split() hmc.append((xm, cj, xh, xb)) hmc.sort(key=lambda x: x[0]) q = [{xm: y for xm, *y in hmc}, defaultdict(list)] for xm, cj, *_ in hmc: q[1][cj].append(xm) m = int(input()) for i in range(m): t = int(input()) - 1 s = input() print((" ", "\n")[t].join(q[t][s]) if s in q[t] else "")