A registration card number of PAT consists of 4 parts:
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 (≤104) and M (≤100), the numbers of cards and the queries, respectively.
Then N lines follow, each gives a card number and the owner’s score (integer in [0,100]), separated by a space.
After the info of testees, there are M lines, each gives a query in the format Type Term, where
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:
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
1095 解码PAT准考证 (25point(s))
1095 解码PAT准考证(C语言)
#include
#include
#include
struct id{
char str[14];
char level[2];
int room;
int date;
int num;
int score;
};
int cmp(const void *a, const void *b)
{
struct id *ida = (struct id*)a, *idb = (struct id*)b;
if (ida->score != idb->score)
return idb->score - ida->score;
return strcmp(ida->str, idb->str);
}
int type1(struct id ids[], int n, int i);
int type2(struct id ids[], int n, int i);
int type3(struct id ids[], int n, int i);
int main()
{
struct id ids[10000];
int n, m, type;
int i;
char level[2];
scanf("%d %d", &n, &m);
for (i = 0; i < n; i++) {
scanf("%s %d", ids[i].str, &ids[i].score);
sscanf(ids[i].str, "%1s%3d%6d%3d", ids[i].level,
&ids[i].room, &ids[i].date, &ids[i].num);
}
qsort(ids, n, sizeof(ids[0]), cmp);
for (i = 0; i < m; i++) {
scanf("%d", &type);
if (type == 1)
type1(ids, n, i);
else if (type == 2)
type2(ids, n, i);
else if (type == 3)
type3(ids, n, i);
}
return 0;
}
int type1(struct id ids[], int n, int i)
{
char level[2];
int f = 1, j;
scanf("%1s", level);
printf("Case %d: %d %c\n", i + 1, 1, level[0]);
for (j = 0; j < n; j++)
if (ids[j].level[0] == level[0]) {
f = 0;
printf("%s %d\n", ids[j].str,ids[j].score);
}
if (f)
puts("NA");
return 0;
}
int type2(struct id ids[], int n, int i)
{
int room, sum = 0, count = 0;
int j, f = 1;
scanf("%d", &room);
printf("Case %d: %d %d\n", i + 1, 2, room);
for (j = 0; j < n; j++)
if (ids[j].room == room) {
f = 0;
count++;
sum += ids[j].score;
}
if (f)
puts("NA");
else
printf("%d %d\n", count, sum);
return 0;
}
int type3(struct id ids[], int n, int i)
{
int date, max = 0, rooms[1000] = {
0};
int f = 1, j;
scanf("%d", &date);
printf("Case %d: %d %06d\n", i + 1, 3, date);
for (j = 0; j < n; j++)
if (ids[j].date == date) {
f = 0;
rooms[ids[j].room]++;
if (max < rooms[ids[j].room])
max = rooms[ids[j].room];
}
if (f)
puts("NA");
else
for (; max > 0; max--)
for (j = 101; j < 1000; j++)
if (rooms[j] == max)
printf("%d %d\n", j, max);
return 0;
}