标签:1095 PAT string map grade int 25 include type
原题
https://pintia.cn/problem-sets/994805260223102976/problems/1071786104348536832
知识点
之前没用过<unordered_map>抄答案都有点费劲。https://blog.csdn.net/weixin_45003868/article/details/118196370
#include<unordered_map>
unordered_map<int, int> map;
//使用“数组”形式插入
map[2] = 200;
//迭代
for (auto &x : map) {
cout << x.first << " " << x.second << endl;//取出键和值
}
首先结构体的的排序用得妙——类型一和类型三要求绑定在一起两个数据,既要正向排序然后反向排序。
string::c_str()string类型调用后可以用,printf("%s")输出
&与变量声明一起使用代表这个变量是引用(没办法赋值常量),类似java和python的引用类型变量和基本类型变量区别。这两种语言中没有指针怎么实现传址,就是利用引用。
代码
代码基本是抄的柳大佬的:
#include <iostream>
#include <algorithm>
#include<string>
#include<vector>
#include<unordered_map>
using namespace std;
struct Examinee{
string id;
int grade;
};
bool cmp(const Examinee &a,const Examinee &b){//&符号代表c++引用,可不加
//注意相等的情况
return a.grade!=b.grade?a.grade>b.grade:a.id<b.id;//按其准考证号的字典序递增输出
}
int main(void){
int n,m;
cin >> n >> m;
vector<Examinee> e(n);
for(int i=0;i<n;i++) cin >> e[i].id>>e[i].grade;
int type;
string require;
for (int i = 0; i < m; i++)
{
cin >> type>>require;
printf("Case %d: %d %s\n",i+1,type,require.c_str());
bool flag=true;
if(type==1){
sort(e.begin(),e.end(),cmp);
for(int j = 0; j <n;j++)
if(e[j].id[0]==require[0]){
printf("%s %d\n",e[j].id.c_str(),e[j].grade);
flag=false;
}
}else if(type==2){
int cnt=0,sum=0;
for(int j = 0; j <n;j++)
if(e[j].id.substr(1,3)==require){
cnt++;
sum+=e[j].grade;
flag=false;
}
if(cnt!=0) printf("%d %d\n",cnt,sum);
}else if(type==3){
vector<Examinee> temp;
unordered_map<string,int> map;
for(int j = 0; j <n;j++)
if(e[j].id.substr(4,6)==require){
map[e[j].id.substr(1,3)]++;
flag=false;
}
for(auto it:map) temp.push_back({it.first,it.second});//把map值,放入结构体
sort(temp.begin(), temp.end(),cmp);
for(int i=0; i<temp.size(); i++)
printf("%s %d\n",temp[i].id.c_str(),temp[i].grade);
}
if(flag) printf("NA\n");
}
return 0;
}
标签:1095,PAT,string,map,grade,int,25,include,type 来源: https://www.cnblogs.com/InifiteVictory/p/15700083.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。