• 雅礼2018-03-11


    题 3、成绩单(result.pas/in/out)
    【问题描述】
    又考试了,这次考试的人数特别多,每个人的学号很特别,是用字符串表示的(不超过
    30 位),每次考试结束后,成绩统计是一件很重要的事情。
    老师们都很关心学生的成绩,于是他们把学生的成绩按学号排列(字典顺序,学号全为
    小写字母,从小到大排列)(不排成绩),并统计各个分数,及分数段的人数,以及满分人员
    (满分要奖励 XXX 奖学金的)。
    【输入数据】
    第一行:一个数 n (n<=130000 人)。
    以下 n 行:每行两个信息,分别为学号,分数(1~150 分)。
    【输出数据】
    第一行:各个分数段(空格隔开)(例如 1~10 11~20 „„(见例样,不包括 150 分
    的人数)。
    第二行:各个分数段的人数(空格隔开,没有则输出 0)。
    接下来的 n 行,分别为 n 个学生的学号,成绩,(空格隔开)。
    再接下来的一行为满分的人的人数 x(如果没有则为 0)(保证 x 不超过 10000)。
    接下来的 x 行为满分人的学号(如果 x 为 0 则为一行‘No’)(按字典序从小到大排序)。
    注意:一行若有多个数据,每一个数据之间用空格隔开,最后一个数据后不允许有空格。
    分数段中没有 0 分和 150 分的。
    3 / 3 内部资料,版权所有
    【样例输入】
    3
    bid 50
    wxy 85
    alc 55
    【样例输出】
    1~9 10~19 20~29 30~39 40~49 50~59 60~69 70~79 80~89 90~99 100~109 110~119 120~129
    130~139 140~149
    0 0 0 0 0 2 0 0 1 0 0 0 0 0 0
    alc 55
    bid 50
    wxy 85
    0
    No

    思路:先打出“1~9 10~19 20~29 30~39 40~49 50~59 60~69 70~79 80~89 90~99 100~109 110~119 120~129
    130~139 140~149”的表,在根据题意步步求解,但没考虑会超时,只得了40分

    更正后代码:

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    const int maxn=130000+10;
    struct node{
    string s;
    int t;
    }a[maxn];
    bool cmp1(node x,node y){
    return x.t<y.t;
    }
    bool cmp2(node x,node y){
    return x.s<y.s;
    }
    int main(){
    freopen("result.in","r",stdin);
    freopen("result.out","w",stdout);
    int i,j,k,m,n;
    cin>>n;
    int ans=0;
    for(i=1;i<=n;i++){
    cin>>a[i].s;
    scanf("%d",&a[i].t);
    if(a[i].t==150)ans++;
    }
    printf("1~9 10~19 20~29 30~39 40~49 50~59 60~69 70~79 80~89 90~99 100~109 110~119 120~129 130~139 140~149 ");
    sort(a+1,a+n+1,cmp1);
    int sum=0;
    for(i=1;i<=n;i++)
    if(a[i].t>=1 && a[i].t<=9)sum++;
    printf("%d ",sum);
    int f=10,l=19;
    for(i=1;i<=14;i++){
    sum=0;
    for(j=1;j<=n;j++)
    if(a[j].t>=f && a[j].t<=l)sum++;
    printf("%d ",sum);
    f+=10;l+=10;
    }
    printf(" ");
    sort(a+1,a+n+1,cmp2);
    for(i=1;i<=n;i++){
    cout<<a[i].s;
    printf(" %d ",a[i].t);
    }
    if(ans==0){
    printf("0 ");
    printf("No");
    return 0;
    }
    int tot=0;
    cout<<ans<<endl;
    for(i=1;i<=n;i++){
    if(a[i].t==150){
    cout<<a[i].s<<endl;
    tot++;
    if(tot==ans)break;
    }
    }
    return 0;
    }

  • 相关阅读:
    Java中String与byte[]的转换
    移动端界面设计之尺寸篇(更新)
    移动端开发必晓
    sublime 之 vitage/emmet
    Sublime Text3工具的安装、破解、VIM功能vintage插件教程
    Sublime Text 3 快捷键总结
    iPhone Safari下iframe不显示滚动条无法滚动的解决方法
    名片设计尺寸及名片设计的注意事项
    转:『引』最全前端资源汇集
    (转)详解css3弹性盒模型(Flexbox)
  • 原文地址:https://www.cnblogs.com/jr-ag/p/8546942.html
Copyright © 2020-2023  润新知