输入格式:

输入在第 1 行给出不超过 10​5​​ 的正整数 N,即学生总人数。随后一行给出 N 名学生的百分制整数成绩,中间以空格分隔。最后一行给出要查询的分数个数 K(不超过 N 的正整数),随后是 K 个分数,中间以空格分隔。

输出格式:

在一行中按查询顺序给出得分等于指定分数的学生人数,中间以空格分隔,但行末不得有多余空格。

输入样例:

10
60 75 90 55 75 99 82 90 75 50
3 75 90 88

输出样例:

3 2 0

  这道题的思路还是比较简单直接的。用一维数组的下标作为成绩来统计相应成绩学生的个数。
我的代码如下:
#include <iostream> using namespace std; int main()
{
    int studentCnt,tempScore;
    int findCnt,tempNum;
    int scoreCnt[101]={0};//初始化数组
    cin >> studentCnt;
    for(int i=0; i<studentCnt; ++i)
    {
        cin >> tempScore;
        scoreCnt[tempScore] ++;//统计每个成绩学生的个数
    }
    cin >> findCnt;
    bool symbolFlag = false;
    for(int i=0; i<findCnt; ++i)
    {
        cin >> tempNum;
        if(symbolFlag)
            cout << " ";
        else
            symbolFlag = true;
        cout << scoreCnt[tempNum];//输出要查询成绩对应的学生个数
    }
    return 0;
}
不过提交发现,测试点3出现超时问题。时间复杂度主要在于for循环中的代码。
于是我把cin和cout用scanf和sprintf进行替换,再次提交,成功通过。
更详细原因可参考博文:https://blog.csdn.net/qq1169091731/article/details/51926460 总之,在OJ上做题尽量使用scanf和printf,尤其是有大量数据需要输入输出时。 替换后代码:
#include <iostream>
#include <stdio.h>
using namespace std; int main()
{
    int studentCnt,tempScore;
    int findCnt,tempNum;
    int scoreCnt[101]={0};
    scanf("%d",&studentCnt);
    for(int i=0; i<studentCnt; ++i)
    {
        scanf("%d",&tempScore);
        scoreCnt[tempScore] ++;
    }
    scanf("%d",&findCnt);
    bool symbolFlag = false;
    for(int i=0; i<findCnt; ++i)
    {
        scanf("%d",&tempNum);
        if(symbolFlag)
            printf(" ");
        else
            symbolFlag = true;
        printf("%d",scoreCnt[tempNum]);
    }
    return 0;
}

PAT B1038 统计同成绩学生超时问题的更多相关文章

  1. PAT B1038 统计同成绩学生

    读入N名同学的成绩,然后将获得某一给定分数的学生人数输出第一行给出不超过10^5的正整数,即学生总数:第二行给出N名学生的百分制的成绩,中间以空格分隔:第三行给出要查寻的分数个数K,随后是K个分数,中 ...

  2. PAT 1038 统计同成绩学生(20)(代码)

    1038 统计同成绩学生(20)(20 分) 本题要求读入N名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式: 输入在第1行给出不超过10^5^的正整数N,即学生总人数.随后1行给出N名学生 ...

  3. 【算法笔记】B1038 统计同成绩学生

    1038 统计同成绩学生 (20 分) 本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式: 输入在第 1 行给出不超过 10​5​​ 的正整数 N,即学生总人数.随后一行给 ...

  4. 【PAT】B1038 统计同成绩学生(20)(20 分)

    #include<stdio.h> int arr[102]={0};//分数作为自己的下标,注意 int main(){ int N;scanf("%d",& ...

  5. PAT——1038. 统计同成绩学生

    本题要求读入N名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式: 输入在第1行给出不超过105的正整数N,即学生总人数.随后1行给出N名学生的百分制整数成绩,中间以空格分隔.最后1行给出要查 ...

  6. PAT 1038. 统计同成绩学生(20)

    本题要求读入N名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式: 输入在第1行给出不超过105的正整数N,即学生总人数.随后1行给出N名学生的百分制整数成绩,中间以空格分隔.最后1行给出要查 ...

  7. PAT 1038 统计同成绩学生

    https://pintia.cn/problem-sets/994805260223102976/problems/994805284092887040 本题要求读入N名学生的成绩,将获得某一给定分 ...

  8. B1038 统计同成绩学生 (20 分)

    #include<iostream> #include<cstring> using namespace std; const int maxn = 10010; int sc ...

  9. 牛客网PAT练兵场-统计同成绩学生

    题解:开100的数组,进行存储人数,方便查询 题目地址:https://www.nowcoder.com/questionTerminal/3df4810cc0664b8bb848d785f68f7c ...

随机推荐

  1. linux内核链表的实现

    .\linux-2.6.22.6_vscode\include\linux\list.h #ifndef _LINUX_LIST_H#define _LINUX_LIST_H #ifdef __KER ...

  2. mybatis插入数据后将其ID返回

    背景 mybatis没有关联保存的功能,所以主从表需要分开保存,这就涉及到主表保存后要再次获取主表ID的环节,以下介绍mybatis插入数据后返回其自增ID的两种方式 方案 1.sql获取 <i ...

  3. POJ - 3468 A Simple Problem with Integers (线段树区间更新---间接修改)

    题意:区间add,区间求和. #include<cstdio> #include<cstring> #include<cstdlib> #include<cc ...

  4. 使用css3的Flex布局实现列表展示

    实现效果图如下: 通过css3样式实现(部分代码): .box { display: flex; flex-wrap:wrap; justify-content:space-between; alig ...

  5. Html5 自学笔记

      1 html的全称 Hyper Text Markup Language 2 HTML的意义 使用标记标签( Markup Tag)来描述网页 3 HTML标签一定成对吗 是 4 <html ...

  6. 前端安全之 XSS攻击

    参看: XSS的原理分析与解剖 前端安全 -- XSS攻击 web大前端开发中一些常见的安全性问题 1.前言 XSS 是面试时,hr提出来给我的,然后大体的浏览一遍,今天才查阅资料大体了解了它. XS ...

  7. excel处理经纬度

    =LEFT(A1,FIND("°",A1)-1)*1+MID(A1,FIND("°",A1)+1,2)/60+MID(A1,FIND("′" ...

  8. java排序,效率高的是哪种排序方法

    和所有其他语言是一样的.应该还是快速排序效率最高. public static void bubbleSort(int a[]) {int len = a.length;for (int i = 0; ...

  9. idea新建maven web项目

    一.新建maven web项目 二.配置服务器 三.测试运行

  10. Eclipse 中打开工程目录的插件

    我们想在Eclipse中的打开工程目录,Eclipse 自身没有这个功能,我们可以安装一个插件来实现这个功能.具体的操作方法如下: (1).到以下链接中下载插件:https://github.com/ ...