列表

详情


NC217893. 成绩查询ing

描述

去年的新冠疫情爆发让众多大学生只能只能在家里上学,老师为了方便自己录入成绩和方便大家成绩查询,建立了一个录入和查询成绩的系统,能完成M次两种不同的查询,输入查询次数M,查询M次,每次首先输入查询的模式T,T为1时,输入同学的姓名Name,并依次输出同学的成绩Grade(0<=Grade<=100), 学号(0~1000000},性别(1/2),T为2时,输入成绩,输出有具体有哪些同学考到了这个分数,输出同学的Name,并要求按字典序输出,当没有同学为此分数时,则不输出。字典序,对于字符串,先按首字符排序,如果首字符相同,再按第二个字符排序,以此类推。

输入描述

第一行包含一个整数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 "")

上一题