T607195 【标记数组模板】查询分数3

解题思路

这道题目要求根据输入的学号查询对应的分数,如果学号不存在则输出"Not found"。关键在于如何高效地存储和查询学号与分数的对应关系。

方法思路

  1. 标记数组法:使用一个标记数组vis来存储学号和分数的对应关系。数组的索引代表学号,数组的值表示该学号对应的分数。

  2. 输入处理

    • 首先读取学生人数n

    • 然后读取n个学号和对应的分数,将分数存储在vis数组中以学号为索引的位置。

  3. 查询处理

    • 读取查询次数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; // 否则输出

 

posted @ 2025-05-20 17:10  CRt0729  阅读(27)  评论(0)    收藏  举报