b_1095題目如下:
1095 解碼pat准考證 (25 分)
pat 准考證號由 4 部分組成:
現給定一系列考生的准考證號和他們的成績,請你按照要求輸出各種統計資訊。
輸入首先在一行中給出兩個正整數 n(≤104)和 m(≤100),分別為考生人數和統計要求的個數。
接下來 n 行,每行給出乙個考生的准考證號和其分數(在區間 [0,100] 內的整數),其間以空格分隔。
考生資訊之後,再給出 m 行,每行給出乙個統計要求,格式為:型別 指令
,其中
對每項統計要求,首先在一行中輸出case #: 要求
,其中#
是該項要求的編號,從 1 開始;要求
即複製輸入給出的要求。隨後輸出相應的統計結果:
如果查詢結果為空,則輸出na
。
8 4
b123180908127 99
b102180908003 86
a112180318002 98
t107150310127 62
a107180908108 100
t123180908010 78
b112160918035 88
a107180908021 98
1 a2 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:1.可以通過map容器儲存,map>
鍵值string為('a'、'b'、't') studata資料型別儲存學生准考證號和成績
2.也可以直接通過三個vector儲存
vectorleveltstu;
vectorlevelastu;
vectorlevelbstu;
指令2:可直接用兩個陣列儲存,examroomcnt[1000] = ,examroomresult[1000] =
分別儲存考場人數和考場總成績。(也可用map容器)
指令3:用雙重unordered_map圖儲存,相對map來說,查詢速度比較塊。
unordered_map> dateexamdata;
第乙個int為六位數的日期,也可以用string型別;
第二個int為考場號,統計相應考場學生人數時使用;
examroom儲存考場號和考場人數。
這樣儲存後,輸出就很簡單了,只需要按照要求進行一定的排序後,就可以直接輸出。
**如下:
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 using namespace std;10 /*
11 1.level --> id/score sort
12 solve:vector + struct -> sort -> output
13 2.examroom --> peoplecnt/scoresum
14 solve:array + int -> plus
15 3.date --> examroom/people + sort
16 solve:map + int + vector
17 */
18 typedef struct studata
19 studata;
23 typedef struct examroomid
24 examroom;
28 bool cmpstudata(studata a, studata b)
29 34 else if(a.id != b.id)
35
38 return false;
39 }
40 bool cmpexamroom(examroom a, examroom b)
41 46 else if(a.id != b.id)
47
50 return false;
51 }
52 int main()
53 ,examroomresult[1000] = ;
60 //指令3資料儲存
61 unordered_map> dateexamdata;
62 63 studata tempstudata;
64 examroom tempexamroom;
65 char examroomid[5] = ;
66 char examdatestr[7] = ;
67 68 scanf("%d %d", &n, &m);
69 //資料讀入
70 while(n--)
71
79 else if(tempstudata.id[0] == 'b')
80
83 else
84
87 //指令2
88 strncpy(examroomid, tempstudata.id + 1, 3);
89 int examroom = atoi(examroomid);
90 ++ examroomcnt[examroom];
91 examroomresult[examroom] += tempstudata.result;
92 //指令3
93 strncpy(examdatestr, tempstudata.id + 4, 6);
94 int examdate = atoi(examdatestr);
95 dateexamdata[examdate][examroom].id = examroom;
96 ++ dateexamdata[examdate][examroom].cnt;
97 }
98 // cout << "data entered over" << endl;
99 int tempcmd;
100 char cmdstr[7] = ;
101 int cmdcnt = 0;
102 //指令讀入
103 while(m--)
104
120 }
121 else if(cmdstr[0] == 't')
122
129 }
130 else
131
138 }
139 }
140 else if(tempcmd == 2)
141
149 }
150 else if(tempcmd == 3)
151
164 sort(tempexamroomarray, tempexamroomarray+tempdateexamdata.size(), cmpexamroom);
165 for(i = 0; i < tempdateexamdata.size(); ++ i)
166
169 }
170 }
171 if(!outputflag)
172
175 }
176 return 0;
177 }
1095 解碼PAT准考證
1095 解碼pat准考證 25 分 pat 准考證號由 4 部分組成 現給定一系列考生的准考證號和他們的成績,請你按照要求輸出各種統計資訊。輸入首先在一行中給出兩個正整數 n 10 4 和 m 100 分別為考生人數和統計要求的個數。接下來 n 行,每行給出乙個考生的准考證號和其分數 在區間 0,...
1095 解碼PAT准考證
pat 准考證號由 4 部分組成 現給定一系列考生的准考證號和他們的成績,請你按照要求輸出各種統計資訊。輸入首先在一行中給出兩個正整數 n 10 4 和 m 100 分別為考生人數和統計要求的個數。接下來 n 行,每行給出乙個考生的准考證號和其分數 在區間 0,100 內的整數 其間以空格分隔。考生...
1095 解碼PAT准考證
pat 准考證號由 4 部分組成 現給定一系列考生的准考證號和他們的成績,請你按照要求輸出各種統計資訊。輸入首先在一行中給出兩個正整數 n 10 4 和 m 100 分別為考生人數和統計要求的個數。接下來 n 行,每行給出乙個考生的准考證號和其分數 在區間 0,100 內的整數 其間以空格分隔。考生...