T607195 【标记数组模板】查询分数3
解题思路
这道题目要求根据输入的学号查询对应的分数,如果学号不存在则输出"Not found"。关键在于如何高效地存储和查询学号与分数的对应关系。
方法思路
-
标记数组法:使用一个标记数组
vis来存储学号和分数的对应关系。数组的索引代表学号,数组的值表示该学号对应的分数。 -
输入处理:
-
首先读取学生人数
n。 -
然后读取
n个学号和对应的分数,将分数存储在vis数组中以学号为索引的位置。
-
-
查询处理:
-
读取查询次数
m。 -
对于每个查询的学号
x,检查vis[x]是否为0。如果是0,说明学号不存在,输出"Not found";否则输出对应的分数。
-
这种方法的时间复杂度为O(n + m),因为我们需要遍历所有学生信息进行存储,然后对每个查询进行常数时间的查找。
#include<bits/stdc++.h> using namespace std; int n,m,vis[10005]; // 定义变量:n为学生人数,m为查询次数,vis为标记数组,存储学号对应的分数 int main() { cin >> n; // 读取学生人数n for(int i = 1; i <= n; i++){ // 循环读取n个学生的学号和分数 int x,y; // x为学号,y为分数 cin >> x >> y; // 读取学号和分数 vis[x] = y; // 将分数y存储在vis数组中以学号x为索引的位置 } cin >> m; // 读取查询次数m while(m--) // 循环处理m次查询 { int x; // x为要查询的学号 cin >> x; // 读取查询学号 if(vis[x] == 0) cout << "Not found" << endl; // 如果vis[x]为0,说明学号不存在 else cout << vis[x] << endl; // 否则输出

浙公网安备 33010602011771号