生活随笔
收集整理的這篇文章主要介紹了
PAT_B_1095_Java(25分)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
思路:根據(jù)要求輸出的三個(gè)指令,選擇數(shù)據(jù)的存儲(chǔ)方式。
指令1:1.可以通過map容器存儲(chǔ),map<string,vector >
鍵值string為(‘A’、‘B’、‘T’) studata數(shù)據(jù)類型存儲(chǔ)學(xué)生準(zhǔn)考證號(hào)和成績
2.也可以直接通過三個(gè)vector存儲(chǔ)
vector levelTStu;
vector levelAStu;
vector levelBStu;
指令2:可直接用兩個(gè)數(shù)組存儲(chǔ),examRoomCnt[1000] = {0},examRoomResult[1000] = {0}
分別存儲(chǔ)考場(chǎng)人數(shù)和考場(chǎng)總成績。(也可用map容器)
指令3:用雙重unordered_map圖存儲(chǔ),相對(duì)map來說,查詢速度比較塊。
unordered_map<int, unordered_map<int, examroom> > dateExamData;
第一個(gè)int為六位數(shù)的日期,也可以用string類型;
第二個(gè)int為考場(chǎng)號(hào),統(tǒng)計(jì)相應(yīng)考場(chǎng)學(xué)生人數(shù)時(shí)使用;
examroom存儲(chǔ)考場(chǎng)號(hào)和考場(chǎng)人數(shù)。
這樣存儲(chǔ)后,輸出就很簡(jiǎn)單了,只需要按照要求進(jìn)行一定的排序后,就可以直接輸出。
#include <iostream>
#include <stdio.h>
#include <vector>
#include <unordered_map>
#include <string>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
using namespace std
;
typedef struct STUDATA
{char id
[13];int result
;
}studata
;
typedef struct EXAMROOMID
{int id
;int cnt
=0;
}examroom
;
bool CmpStuData(studata a
, studata b
)
{if(a
.result
!= b
.result
){return a
.result
> b
.result
;}else if(a
.id
!= b
.id
){return strcmp(a
.id
, b
.id
) < 0;}return false;
}
bool CmpExamRoom(examroom a
, examroom b
)
{if(a
.cnt
!= b
.cnt
){return a
.cnt
> b
.cnt
;}else if(a
.id
!= b
.id
){return a
.id
< b
.id
;}return false;
}
int main()
{vector
<studata
> levelTStu
;vector
<studata
> levelAStu
;vector
<studata
> levelBStu
;int N
,M
,examRoomCnt
[1000] = {0},examRoomResult
[1000] = {0};unordered_map
<int, unordered_map
<int, examroom
> > dateExamData
;studata tempStuData
;examroom tempExamroom
;char examRoomId
[5] = {0};char examDateStr
[7] = {0};scanf("%d %d", &N
, &M
);while(N
--){scanf("%s",tempStuData
.id
);scanf("%d", &tempStuData
.result
);if(tempStuData
.id
[0] == 'A'){levelAStu
.push_back(tempStuData
);}else if(tempStuData
.id
[0] == 'B'){levelBStu
.push_back(tempStuData
);}else{levelTStu
.push_back(tempStuData
);}strncpy(examRoomId
, tempStuData
.id
+ 1, 3);int examRoom
= atoi(examRoomId
);++ examRoomCnt
[examRoom
];examRoomResult
[examRoom
] += tempStuData
.result
;strncpy(examDateStr
, tempStuData
.id
+ 4, 6);int examDate
= atoi(examDateStr
);dateExamData
[examDate
][examRoom
].id
= examRoom
;++ dateExamData
[examDate
][examRoom
].cnt
;}int tempCmd
;char cmdStr
[7] = {0};int cmdCnt
= 0;while(M
--){memset(cmdStr
,0,sizeof(cmdStr
));scanf("%d %s", &tempCmd
, cmdStr
);++ cmdCnt
;printf("Case %d: %d %s\n", cmdCnt
, tempCmd
, cmdStr
);bool outputFlag
= false;if(tempCmd
== 1){if(cmdStr
[0] == 'A'){sort(levelAStu
.begin(), levelAStu
.end(), CmpStuData
);for(int i
= 0; i
< levelAStu
.size(); ++ i
){outputFlag
= true;printf("%s %d\n", levelAStu
[i
].id
, levelAStu
[i
].result
);}}else if(cmdStr
[0] == 'T'){sort(levelTStu
.begin(), levelTStu
.end(), CmpStuData
);for(int i
= 0; i
< levelTStu
.size(); ++ i
){outputFlag
= true;printf("%s %d\n", levelTStu
[i
].id
, levelTStu
[i
].result
);}}else{sort(levelBStu
.begin(), levelBStu
.end(), CmpStuData
);for(int i
= 0; i
< levelBStu
.size(); ++ i
){outputFlag
= true;printf("%s %d\n", levelBStu
[i
].id
, levelBStu
[i
].result
);}}}else if(tempCmd
== 2){strncpy(examRoomId
,cmdStr
,3);int examRoom
= atoi(examRoomId
);if(examRoomCnt
[examRoom
] > 0){outputFlag
= true;printf("%d %d\n", examRoomCnt
[examRoom
], examRoomResult
[examRoom
]);}}else if(tempCmd
== 3){strncpy(examDateStr
,cmdStr
,6);int examDate
= atoi(examDateStr
);unordered_map
<int, examroom
> tempDateExamData
= dateExamData
[examDate
];examroom tempExamroomArray
[tempDateExamData
.size()];if(tempDateExamData
.size() > 0){outputFlag
= true;int i
= -1;for(auto it
= tempDateExamData
.begin(); it
!= tempDateExamData
.end(); ++ it
){tempExamroomArray
[++i
] = it
->second
;}sort(tempExamroomArray
, tempExamroomArray
+tempDateExamData
.size(), CmpExamRoom
);for(i
= 0; i
< tempDateExamData
.size(); ++ i
){printf("%d %d\n", tempExamroomArray
[i
].id
, tempExamroomArray
[i
].cnt
);}}}if(!outputFlag
){printf("NA\n");}}return 0;
}
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)
總結(jié)
以上是生活随笔為你收集整理的PAT_B_1095_Java(25分)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。