57级返校测试-T3-成绩单

题目:

 

 

题目背景

今天大家返校参加考试,本来信心满满以为能拿400分……自己再提交一下试试吧!

题目描述

又考试了,这次考试的人数特别多,每个人的学号很特别,是用字符串表示的(不超过 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 分的。

……

说明

恩,这个是我们一道测试题。本来信心满满感觉挺简单,能AC的,结果直接爆零……

结果最后就是一个字符串比较的问题……

研究一阵子才发现可以直接用大于小于号……

代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string.h>
#include<cstring>

using namespace std;

struct stu
{
    string xh;
    int fs;
}student[150000];
int jiance=1;
bool cmp(stu a,stu b)
{
    return a.xh<b.xh;
    /*
    for(int i=1;i<=min(a.xh.length(),b.xh.length());i++)
    {
        if(a.xh[i]>b.xh[i])
        {
            return 1;
        }
        if(a.xh[i]<b.xh[i])
        {
            return 0;
        }
    }
    if(strcmp(a.xh.c_str(),b.xh.c_str())>0)
    {
        return 0;
    }
    else
    {
        return 1;
    }
    */
    //以上这一部分就是我那时候写的字符串比较……还试了好几种……反正总之就是莫名不对……
    //后来才学到原来字符串也可以直接用大于小于号……
    //这道题主要就是学习到这个吧…… 
}

int fsd[20];
int flag11=0;

int main()
{
    int n;
    int x=0;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>student[i].xh>>student[i].fs;
        if(student[i].fs==150)
        {
            x++;
        }
        fsd[student[i].fs/10+1]++;
    }
    cout<<"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";
    cout<<endl;
    for(int i=1;i<16;i++)
    {
        cout<<fsd[i]<<" ";
    }
    cout<<endl;
    
    sort(student,student+n+1,cmp);
    for(int j=1;j<=n;j++)
    {
        cout<<student[j].xh<<" "<<student[j].fs<<endl;
    }
    cout<<x<<endl;
    for(int fbk=1;fbk<=n;fbk++)
    {
        if(student[fbk].fs==150)
        {
            cout<<student[fbk].xh<<endl;
            flag11=1;
        }
    }
    if(!flag11)
    {
        cout<<"No";
    }
    return 0;
}

恩……

posted @ 2020-05-17 17:22  芊枫Thomitics  阅读(344)  评论(1编辑  收藏  举报