标签:stream bsp ret 拼接字符串 contain spec namespace htm repr
A registration card number of PAT consists of 4 parts:
T
for the top level, A
for advance and B
for basic;yymmdd
;Now given a set of registration card numbers and the scores of the card owners, you are supposed to output the various statistics according to the given queries.
Each input file contains one test case. For each case, the first line gives two positive integers N (≤) and M (≤), the numbers of cards and the queries, respectively.
Then N lines follow, each gives a card number and the owner‘s score (integer in [), separated by a space.
After the info of testees, there are M lines, each gives a query in the format Type Term
, where
Type
being 1 means to output all the testees on a given level, in non-increasing order of their scores. The corresponding Term
will be the letter which specifies the level;Type
being 2 means to output the total number of testees together with their total scores in a given site. The corresponding Term
will then be the site number;Type
being 3 means to output the total number of testees of every site for a given test date. The corresponding Term
will then be the date, given in the same format as in the registration card.For each query, first print in a line Case #: input
, where #
is the index of the query case, starting from 1; and input
is a copy of the corresponding input query. Then output as requested:
CardNumber Score
. If there is a tie of the scores, output in increasing alphabetical order of their card numbers (uniqueness of the card numbers is guaranteed);Nt Ns
where Nt
is the total number of testees and Ns
is their total score;Site Nt
where Site
is the site number and Nt
is the total number of testees at Site
. The output must be in non-increasing order of Nt
‘s, or in increasing order of site numbers if there is a tie of Nt
.If the result of a query is empty, simply print 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
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需要map,直接记录考场号和日期拼接字符串对应考生的个数,然后排序。
代码:
#include <iostream> #include <vector> #include <cstring> #include <cstdio> #include <cstdlib> #include <algorithm> #include <map> #define MAX 10001 using namespace std; int n,m; struct stu { char Tid[14]; int score; }s[MAX]; char *Substr(char *a,int l,int r) { char *t = (char *)malloc(sizeof(char) * (r - l + 1)); for(int i = l;i < r;i ++) { t[i - l] = a[i]; } t[r - l] = 0; return t; } int snum[1000],sscore[1000];///考场对应考生人数 和 总分的数组 int lnum[3]; char *str[MAX];///记录考场和日期总串 int c; map<string,int> mp; bool cmp(const stu &a,const stu &b) { if(a.Tid[0] == b.Tid[0]) { if(a.score == b.score) return strcmp(a.Tid,b.Tid) < 0; return a.score > b.score; } return a.Tid[0] < b.Tid[0]; } bool cmp1(const char *a,const char *b) { if(mp[a] == mp[b]) return strcmp(a,b) < 0; return mp[a] > mp[b]; } int main() { char *t; scanf("%d%d",&n,&m); for(int i = 0;i < n;i ++) { scanf("%s %d",s[i].Tid,&s[i].score); t = Substr(s[i].Tid,1,4); int d = atoi(t); snum[d] ++; sscore[d] += s[i].score; int dd = s[i].Tid[0] == ‘T‘ ? 2 : s[i].Tid[0] - ‘A‘; lnum[dd] ++; t = Substr(s[i].Tid,1,10); if(!mp[t]) { str[c] = (char *)malloc(sizeof(char) * 10); strcpy(str[c],t); c ++; } mp[t] ++; } sort(s,s + n,cmp); sort(str,str + c,cmp1); int choice,site; char level[2],date[7]; for(int i = 1;i <= m;i ++) { scanf("%d",&choice); printf("Case %d: %d ",i,choice); if(choice == 1) { scanf("%s",level); printf("%s\n",level); int l,r; if(level[0] == ‘A‘) l = 0,r = lnum[0]; else if(level[0] == ‘B‘) l = lnum[0],r = lnum[1]; else l = lnum[0] + lnum[1],r = lnum[2]; if(r == 0) { printf("NA\n"); continue; } for(int j = 0;j < r;j ++) { printf("%s %d\n",s[l + j].Tid,s[l + j].score); } } else if(choice == 2) { scanf("%d",&site); printf("%d\n",site); if(!snum[site]) { printf("NA\n"); } else { printf("%d %d\n",snum[site],sscore[site]); } } else { scanf("%s",&date); printf("%s\n",date); int d = 0; for(int j = 0;j < c;j ++) { if(strcmp(Substr(str[j],3,9),date) == 0) { printf("%s %d\n",Substr(str[j],0,3),mp[str[j]]); d ++; } } if(d == 0) printf("NA\n"); } } }
1153 Decode Registration Card of PAT (25 分)
标签:stream bsp ret 拼接字符串 contain spec namespace htm repr
原文地址:https://www.cnblogs.com/8023spz/p/10211512.html