PAT B1095 解碼PAT准考證

2021-09-13 02:11:43 字數 4275 閱讀 8101

b_1095題目如下:

1095 解碼pat准考證 (25 分)

pat 准考證號由 4 部分組成:

現給定一系列考生的准考證號和他們的成績,請你按照要求輸出各種統計資訊。

輸入首先在一行中給出兩個正整數 n(≤10​4​​)和 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 內的整數 其間以空格分隔。考生...