PAT A1153 Decode Registration Card of PAT

  • 今天选的题目真是*&^%$#*,不但不值钱,搞起来还相当麻烦
  • 思路就是输入的过程中根据查询条件映射和排序好所有需要查询的数据。第一个就是PAT分给3个vector去排序;第二个用map(或数组)映射每个site的总分和人数;第三个是map套map映射每个日期中每个site的人数,这个东西因为输出时还要排序,而map仿佛不能用两个维度排序,所以用一个map套vector接过来去排序
  • 本来过程就有些曲折,搞第三个时想到map不能按要求排序,一时冲动换成了map套vector,但是因为需要映射,vector只能用下标映射,范围是101~999,所以resize成1000,然后就出事了,后俩测试点一个超时一个超了内存…
  • 长这么大超时家常便饭,超内存还是第一次见(我一般比较节俭)。算了半天这些容器,也就map套vector最大,我还上去看了一眼——范围1000,1K * 1K个单元也就8MB而已吧
  • 去看了柳婼姐姐的,她是一个个查的也没有超时,不过这样只需要单层map。突然惊醒,又去看了题目,原来N的范围是10000,扩大十倍那我刚好爆了。。。
  • 剩下就又是printf大胜利
  • 另:时限是200ms,亲测if刚好跑200ms是可以AC的
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <queue>
#include <math.h>
#include <set>
#include <map>
#include <unordered_map>
#include <stack>using namespace std;struct Stu{string ID;int score;
};
struct Res{string site;int cnt;
};
vector<Stu> va,vb,vt;
unordered_map<string,int> cnt,total;
unordered_map<string,vector<Res> > umap;
unordered_map<string,unordered_map<string,int> > umap_tmp;bool cmp(Stu s1,Stu s2){if(s1.score != s2.score) return s1.score > s2.score;else return s1.ID < s2.ID;
}bool cmp1(Res s1,Res s2){if(s1.cnt != s2.cnt) return s1.cnt > s2.cnt;else return s1.site < s2.site;
}#define DEBUG int main(){#ifdef DEBUGfreopen("1.txt","r",stdin);
#endifint num,qnum;cin >> num >> qnum;for(int i = 0;i < num;i ++){Stu s;cin >> s.ID >> s.score;if(s.ID[0] == 'A') va.push_back(s);else if(s.ID[0] == 'B') vb.push_back(s);else vt.push_back(s);string site = s.ID.substr(1,3);if(total[site]) total[site] += s.score;else total[site] = s.score;if(cnt[site]) cnt[site] ++;else cnt[site] = 1;string date = s.ID.substr(4,6);if(umap_tmp[date][site]) umap_tmp[date][site] ++;else umap_tmp[date][site] = 1;//if(umap[date].size() == 0) umap[date].resize(1000);//umap[date][site].site = site;//umap[date][site].cnt ++;}sort(va.begin(),va.end(),cmp);sort(vb.begin(),vb.end(),cmp);sort(vt.begin(),vt.end(),cmp);for(unordered_map<string,unordered_map<string,int> > :: iterator it = umap_tmp.begin();it != umap_tmp.end();it ++){string date = it -> first;unordered_map<string,int> tmp = it -> second;for(unordered_map<string,int> :: iterator iter = tmp.begin();iter != tmp.end();iter ++){umap[date].push_back({iter -> first,iter -> second});}sort(umap[date].begin(),umap[date].end(),cmp1);}/*for(unordered_map<string,vector<Res> > :: iterator it = umap.begin();it != umap.end();it ++){sort(it -> second.begin(),it -> second.end(),cmp1);}*/for(int i = 0;i < qnum;i ++){int type;string term;cin >> type >> term;printf("Case %d: %d %s\n",i + 1,type,term.c_str());//cout << "Case " << i + 1 << ": " << type << ' ' << term << endl;if(type == 1){vector<Stu> v;if(term[0] == 'A') v = va;else if(term[0] == 'B') v = vb;else v = vt;if(v.size() == 0) printf("NA\n");//cout << "NA\n";for(int i = 0;i < v.size();i ++) printf("%s %d\n",v[i].ID.c_str(),v[i].score);//cout << v[i].ID << ' ' << v[i].score << endl;}else if(type == 2){if(cnt[term]) printf("%d %d\n",cnt[term],total[term]);//cout << cnt[term] << ' ' << total[term] << endl;else printf("NA\n");//cout << "NA\n";}else{if(umap[term].size()){vector<Res> v = umap[term];for(int i = 0;i < v.size();i ++) printf("%s %d\n",v[i].site.c_str(),v[i].cnt);//cout << v[i].site << ' ' << v[i].cnt << endl;}else printf("NA\n");//cout << "NA\n";}}return 0;
}

PAT A1153 Decode Registration Card of PAT ——凭谁问,廉颇老矣,尚能饭否相关推荐

  1. PAT 1153 Decode Registration Card of PAT (25 分)- 甲级

    A registration card number of PAT consists of 4 parts: the 1st letter represents the test level, nam ...

  2. PAT甲级1153 Decode Registration Card of PAT :[C++题解]结构体、哈希表、排序、类似数据库查询题、好题

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 本题是三种不同的询问,难道要写三个结构体?想了想,就写了一个结构体,参赛人结构体,内容包括考号id和成绩grade,然后开结构体数组 ...

  3. 1153 Decode Registration Card of PAT (25分)

    1153 Decode Registration Card of PAT (25分) 题意: 给出一组学生的准考证号和成绩 准考证号组成为:考试等级(TAB),考场号(从101到999),考试日期(y ...

  4. PAT(甲级)2018年冬季考试 7-2 Decode Registration Card of PAT

    目录 体会 代码(非满分) 改进 AC代码 体会 这题主要是考察对STL中string,map,vector的应用以及自定义sort()应用. 类型1和2的处理很容易. 类型3要求对于指定date,按 ...

  5. Pat乙级 1040 有几个PAT

    Pat乙级1040 有几个PAT 思路 代码 题目网址 https://pintia.cn/problem-sets/994805260223102976/problems/9948052823899 ...

  6. 如何在Photoshop中载入使用pat格式的文件?ps图案pat格式文件载入教程

    PS中有一种为"pat"后缀的ps图案模式,小编今天为大家带来了如何在Photoshop中载入使用pat格式的文件?ps图案pat格式文件载入教程,有需要的小伙伴快来看看吧! 在桌 ...

  7. PAT 1074. 宇宙无敌加法器(20)-PAT乙级真题

    地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的.而在PAT星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为"PAT数".每个PAT星人都必须熟记各 ...

  8. PAT 乙级 1040 有几个PAT (25分)

    1040 有几个PAT (25分) 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位§,第 4 位(A),第 6 位(T):第二个 PAT 是第 3 位§,第 4 位( ...

  9. PAT乙级-1040 有几个PAT(多种实现)

    题目描述 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位§,第 4 位(A),第 6 位(T):第二个 PAT 是第 3 位§,第 4 位(A),第 6 位(T). ...

最新文章

  1. Cocos坐标之convertToNodeSpace、convertToWorldSpace、convertToNodeSpaceAR、convertToWorldSpaceAR区别和用法...
  2. 《深入理解计算机系统》读书笔记四:操作系统的抽象
  3. int * * a[10] int * (*a)[10]和 int(*a[10])() 是什么意思
  4. CCF之地铁修建(100分)
  5. LOJ2195 旅行
  6. 摄像头预览左右翻转_轻薄翻转触控本里的高性能机型:惠普ENVY x360 13评测
  7. (python numpy) np.array.shape 中 (3,)、(3,1)、(1,3)的区别
  8. 如何避免向下传递回调?
  9. ios 开发常用技巧
  10. 2021年度最全“Java面试宝典+Java核心知识集”,一箭双雕杠春招
  11. 基于Java+Spring+vue+element实现旅游信息管理平台系统
  12. python操作word实现小学拼音本功能
  13. 软件测试工程师思维逻辑题汇总
  14. 企业域名注册手续_如何注册域名以及ICP备案
  15. 处理:TF卡突然变成8M,格式化提示写保护
  16. 2022年中国国债收益率走势(附一年期、二年期、三年期、七年期、十年期、二十年期、三十年期)[图
  17. 增量式编码器 绝对值编码器
  18. php for android
  19. xp获取计算机管理员权限,xp管理员权限的获取与防范
  20. Salesforce市值3000亿美元,中国CRM企业能复制成功吗?

热门文章

  1. BackFile备份文件
  2. 利用Java Swing技术设计一个Email邮箱地址注册的图形用户界面应用程序
  3. gitbook 安装
  4. csapp程序人生大作业
  5. SpringBoot(SpringMVC)拦截Druid数据监控页面
  6. 机器学习入门学习笔记(三)决策树
  7. 西门子伺服电机维修1PH8083-1SN02-0MA1
  8. 政务数据分级安全保护要求(明细)
  9. oracle数据库备份恢复后乱码,RMAN做数据文件恢复后,查询表中数据出现乱码
  10. text-justify属于css3,css3 text-justify属性怎么用