首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

PAT乙级-1095 解码PAT准考证 (25分)

  • 24-02-22 07:00
  • 4263
  • 14108
blog.csdn.net

点击链接PAT乙级-AC全解汇总

题目:
PAT 准考证号由 4 部分组成:

第 1 位是级别,即 T 代表顶级;A 代表甲级;B 代表乙级;
第 2~4 位是考场编号,范围从 101 到 999;
第 5~10 位是考试日期,格式为年、月、日顺次各占 2 位;
最后 11~13 位是考生编号,范围从 000 到 999。
现给定一系列考生的准考证号和他们的成绩,请你按照要求输出各种统计信息。

输入格式:
输入首先在一行中给出两个正整数 N(≤10​4​​ )和 M(≤100),分别为考生人数和统计要求的个数。

接下来 N 行,每行给出一个考生的准考证号和其分数(在区间 [0,100] 内的整数),其间以空格分隔。

考生信息之后,再给出 M 行,每行给出一个统计要求,格式为:类型 指令,其中

  • 类型 为 1 表示要求按分数非升序输出某个指定级别的考生的成绩,对应的 指令 则给出代表指定级别的字母;

  • 类型 为 2 表示要求将某指定考场的考生人数和总分统计输出,对应的 指令 则给出指定考场的编号;

  • 类型 为 3 表示要求将某指定日期的考生人数分考场统计输出,对应的 指令 则给出指定日期,格式与准考证上日期相同。
    输出格式:
    对每项统计要求,首先在一行中输出 Case #: 要求,其中 # 是该项要求的编号,从 1 开始;要求 即复制输入给出的要求。随后输出相应的统计结果:

  • 类型 为 1 的指令,输出格式与输入的考生信息格式相同,即 准考证号 成绩。对于分数并列的考生,按其准考证号的字典序递增输出(题目保证无重复准考证号);

  • 类型 为 2 的指令,按 人数 总分 的格式输出;

  • 类型 为 3 的指令,输出按人数非递增顺序,格式为 考场编号 总人数。若人数并列则按考场编号递增顺序输出。
    如果查询结果为空,则输出 NA。

输入样例:

8 4
B123180908127 99
B102180908003 86
A112180318002 98
T107150310127 62
A107180908108 100
T123180908010 78
B112160918035 88
A107180908021 98
1 A
2 107
3 180908
2 999
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

输出样例:

Case 1: 1 A
A107180908108 100
A107180908021 98
A112180318002 98
Case 2: 2 107
3 260
Case 3: 3 180908
107 2
123 2
102 1
Case 4: 2 999
NA
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

我的AC代码:

#include
using namespace std;
struct Rooms {
    string room_id_;
    int num_;
};
bool my_cmp_case3s(const Rooms &a, const Rooms &b) {
    if(a.num_!=b.num_)return a.num_>b.num_;
    else  return a.room_id_<b.room_id_;
}

class Stu {
public:
    Stu(string id,int score):id_(id),score_(score){};
    string id_;
    int score_;
};

bool my_cmp_case1(Stu &a,Stu &b){
    if(a.score_!=b.score_)return a.score_>b.score_;
    else  return a.id_<b.id_;
}

class Room {
public:
    Room(string id,int num=1):room_id_(id),num_(num){};
    string room_id_;
    int num_;
};

bool my_cmp_case3(Room &a,Room &b){
    if(a.num_!=b.num_)return a.num_>b.num_;
    else  return a.room_id_<b.room_id_;
}

int main()
{
	int N,M;
    cin>>N>>M;
    vector<Stu>all_stu;
	for(int i=0;i<N;i++)
	{
		string id;
        int score;
        cin>>id>>score;
        Stu t(id,score);
        all_stu.push_back(t);
	}

    for(int i=1;i<=M;i++)
    {
        int choice;
        cin>>choice;
        if(choice==1)//准考证号 成绩
        {
            char c;
            cin>>c;
            vector<Stu>out;
            for(int j=0;j<N;j++)
            {
                if(all_stu[j].id_[0]==c)out.push_back(all_stu[j]);
            }

            //输出case1
            printf("Case %d: 1 %c\n",i,c);
            if(out.size()==0)
            {
                printf("NA\n");
                continue;
            }
            sort(out.begin(),out.end(),my_cmp_case1);
            for(int j=0;j<out.size();j++)
            {
                printf("%s %d\n", out[j].id_.c_str(), out[j].score_);
            }
        }
        else if(choice==2)//人数 总分
        {
            int cnt=0,sum=0;
            string id_room;
            cin>>id_room;
            for(int j=0;j<N;j++)
            {
                if(all_stu[j].id_.substr(1,3)==id_room)
                {
                    cnt++;
                    sum+=all_stu[j].score_;
                }
            }

            //输出case2
            cout<<"Case "<<i<<": 2 "<<id_room<<endl;
            if(cnt==0)
            {
                printf("NA\n");
                continue;
            }
            printf("%d %d\n",cnt,sum);
        }
        else if(choice==3)//考场编号 总人数
        {
            string date;
            cin>>date;
            vector<Rooms> out;
            unordered_map<string, int> room_index;
            for (int j = 0; j < N; j++)
            {
                if (all_stu[j].id_.substr(4, 6) == date)
                    room_index[all_stu[j].id_.substr(1, 3)]++;
            }
            for (auto it : room_index)
            {
//                Rooms t{it.first, it.second};
                out.push_back({it.first, it.second});
            }

            //输出case3
            cout<<"Case "<<i<<": 3 "<<date<<endl;
            if(out.size()==0)
            {
                printf("NA\n");
                continue;
            }
            sort(out.begin(),out.end(),my_cmp_case3s);
            for (int j = 0; j < out.size(); j++)
                printf("%s %d\n", out[j].room_id_.c_str(), out[j].num_);
        }
    }
    return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131

在这里插入图片描述

case 3 4超时代码:

#include
using namespace std;

class Stu {
public:
    Stu(string id,int score):id_(id),score_(score){};
    string id_;
    int score_;
};

bool my_cmp_case1(Stu a,Stu b)
{
    if(a.score_!=b.score_)return a.score_>b.score_;
    else  return a.id_<b.id_;
}

class Room {
public:
    Room(string id):room_id_(id),num_(1){};
    string room_id_;
    int num_;
};

bool my_cmp_case3(Room a,Room b)
{
    if(a.num_!=b.num_)return a.num_>b.num_;
    else  return a.room_id_<b.room_id_;
}

int main()
{
	int N,M;
    cin>>N>>M;
    vector<Stu>all_stu;
	for(int i=0;i<N;i++)
	{
		string id;
        int score;
        cin>>id>>score;
        Stu t(id,score);
        all_stu.push_back(t);
	}

    for(int i=1;i<=M;i++)
    {
        int choice;
        cin>>choice;
        if(choice==1)//准考证号 成绩
        {
            char c;
            cin>>c;
            vector<Stu>out;
            for(int j=0;j<N;j++)
            {
                if(all_stu[j].id_[0]==c)out.push_back(all_stu[j]);
            }

            //输出case1
            printf("Case %d: 1 %c\n",i,c);
            if(out.size()==0)
            {
                cout<<"NA"<<endl;
                continue;
            }
            sort(out.begin(),out.end(),my_cmp_case1);
            for(int j=0;j<out.size();j++)
            {
                cout<<out[j].id_<<" "<<out[j].score_<<endl;
            }
        }
        else if(choice==2)//人数 总分
        {
            int cnt=0,sum=0;
            string id_room;
            cin>>id_room;
            for(int j=0;j<N;j++)
            {
                if(all_stu[j].id_.substr(1,3)==id_room)
                {
                    cnt++;
                    sum+=all_stu[j].score_;
                }
            }

            //输出case2
            cout<<"Case "<<i<<": 2 "<<id_room<<endl;
            if(cnt==0)
            {
                cout<<"NA"<<endl;
                continue;
            }
            cout<<cnt<<" "<<sum<<endl;
        }
        else if(choice==3)//考场编号 总人数
        {
            string date;
            cin>>date;
            int index=1;
            map<string,int>room_index;
            vector<Room>out;
            for(int j=0;j<N;j++)
            {
                if(all_stu[j].id_.substr(4,6)==date)
                {
                    string room_id=all_stu[j].id_.substr(1,3);
                    if(room_index[room_id]!=0)
                    {
                        out[room_index[room_id]-1].num_++;
                    }
                    else
                    {
                        Room t(room_id);
                        out.push_back(t);
                        room_index[room_id]=index++;
                    }
                }
            }

            //输出case3
            cout<<"Case "<<i<<": 3 "<<date<<endl;
            if(index==1)
            {
                cout<<"NA"<<endl;
                continue;
            }
            sort(out.begin(),out.end(),my_cmp_case3);
            for(int j=0;j<out.size();j++)
            {
                cout<<out[j].room_id_<<" "<<out[j].num_<<endl;
            }
        }
    }
    return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135

在这里插入图片描述

在这里插入图片描述
case3 4哪个时间长不一定的,而且如果用的数据结构差不多,可以多试几次能不能通过,同样的代码跑的时间也不一样~
不知道超时是不是都是201ms…

注意: 主要就是处理3的情况,用struct会快一点、用printf会快一点、看柳神说的map用unordered_map也会快一点~,总之越快越好!

开心,一个月总算把乙级刷完了,完结撒花~
甲级我来了!

注:本文转载自blog.csdn.net的邂逅模拟卷的文章"https://blog.csdn.net/qq_34451909/article/details/105065799"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top