【1153】Decode Registration Card of PAT (25分)

简介: 【1153】Decode Registration Card of PAT (25分)【1153】Decode Registration Card of PAT (25分)
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<string>
#include<algorithm>  
#include<map>
#include<vector>
#include<queue> 
#include<unordered_map>
using namespace std;  
把map的key&value存到vector中,用sort对vector排序
注意c_str()可使printf用%s输出string类型字符串,为一指针
//编号规则,第1位代表pat等级,第2-4位为考场编号
//第5-10位为测试日期,第11-13位为测试者编号
struct node{
  string t;
  int value;
};
bool cmp(const node &a, const node &b){
  return a.value !=b.value ? a.value >b.value : a.t<b.t;
  //成绩不等则按成绩降序,成绩相等则按编号"升序"
}
int main(){   
  int n,k,num;
  string s;
  cin>>n>>k; //n个学生的数据,k次查询操作
  vector<node>v(n); //n个vector存储学生信息
  for(int i=0;i<n;i++){
    cin>>v[i].t>>v[i].value;//t存储对应学生编号,value存pat分数
  }
  for(int i=1;i<=k;i++){
    cin >>num>>s;//num为操作功能项,s为操作的字符
    printf("Case %d: %d %s\n",i,num,s.c_str());
    //输出第i个case:功能项,输入的字符串
    vector<node> ans;
    int cnt=0,sum=0;
    if(num==1){ 
      //第1个功能:输入考试等级,找出该等级的考生,按照成绩降序,准考证升序排序
      //按照等级查询,枚举匹配的学生然后排序
      for(int j=0;j<n;j++)
        if(v[j].t[0]==s[0]) 
          ans.push_back(v[j]);
    }else if(num==2){ 
      //第2个功能:输入考场号,统计该考场的考生数和总得分
      //按照考场查询,枚举匹配学生然后计数求和
      for(int j=0;j<n;j++){
        if(v[j].t.substr(1,3) == s){//截取出考场编号判断
          cnt++;
          sum += v[j].value;
        }
      }
      if(cnt!=0)  printf("%d %d\n",cnt,sum);
      //打印出改考场的  考生数 总分
    }else if(num==3) {
        //第3个功能:输入考试日期,查询该日期下所有考场的人数,按照人数降序,考场号升序
        //按日期查询每个考场人数,用unordered_map存储,再排序汇总
      unordered_map<string,int> m;
      for(int j=0;j<n;j++)
        if(v[j].t.substr(4,6)==s)  //找符合日期的考场
          m[v[j].t.substr(1,3)]++;//考场编号对应数加1
      for(auto it:m) {
        node t;//这里写得和柳神代码不同,可能是编译器用2012VS太老的原因之前那个会报出
        t.t=it.first;
        t.value=it.second;
        ans.push_back(t);
      }
    }
    //把map的key&value存到vector中,用sort对vector排序
    //m是map,ans是vector
    sort(ans.begin(),ans.end(),cmp); //排序
    for(int j=0;j<ans.size();j++)
      printf("%s %d\n",ans[j].t.c_str(),ans[j].value);
        //输出考场编号和总人数
    if ( (  (num==1 || num==3)&&ans.size()==0 )|| (num==2&&cnt==0) )
      printf("NA\n");
  }
  system("pause");
  return 0;
}
相关文章
|
7月前
|
存储 编解码 前端开发
Base64编码与打印标签(label)实例
在本篇文章,我们认识什么是Base64编码格式,以及它内部的编码规则;也列举了base64的常用使用场景以及注意方面,同时也列举了实际场景使用与代码示例。最后列举几种常用base64转码为arrayBuffer,blod等格式。
149 0
|
6月前
|
索引
1001 A+B Format (20 分)
1001 A+B Format (20 分)
|
存储 C++ Windows
【PAT甲级 - C++题解】1153 Decode Registration Card of PAT
【PAT甲级 - C++题解】1153 Decode Registration Card of PAT
90 0
1001. A+B Format(20分)
1001. A+B Format(20分)
91 0
|
XML 网络协议 网络安全
【1121】Damn Single (25分)【set】
【1121】Damn Single (25分)【set】 【1121】Damn Single (25分)【set】
101 0
【1082】Read Number in Chinese (25 分)
【1082】Read Number in Chinese (25 分) 【1082】Read Number in Chinese (25 分)
110 0
【1144】The Missing Number (20 分)
【1144】The Missing Number (20 分) 【1144】The Missing Number (20 分)
79 0
|
TensorFlow 算法框架/工具
TF之data_format:data_format中的NHWC&NCHW简介、转换的详细攻略
TF之data_format:data_format中的NHWC&NCHW简介、转换的详细攻略
TF之data_format:data_format中的NHWC&NCHW简介、转换的详细攻略
|
存储 缓存 固态存储
Long Story of Block - 1 Data Unit
计算、存储、网络构成了云计算的基本组件。Linux 中的 IO 栈主要分为 Filesystem 与 Block 两层,前者包括 VFS 与各种类型的文件系统(包括 Ext4、XFS 等),描述了数据的组织形式、提供管理数据的接口;而后者包括通用块层 (generic block layer) 与各种类型的块设备驱动(包括 SCSI、NVMe、Virtio 等),主要实现了数据在非易失性存储(HD
419 1
Long Story of Block - 1 Data Unit