每次 pat 考試結束後,考試中心都會發布乙個考生單位排行榜。本題就請你實現這個功能。年輕的我果然又菜又天真……再一次預感可能會出現執行超時的問題,但是還是頭鐵的繼續寫。這次吸取教訓覺得用雙向指標的方法能夠讓時間複雜度減半,然而,再怎麼樣也是o(n2)級別的時間複雜度啊,就算是減半了也不能從根本上將o(n2)變成o(n)。然後就又執行超時了……輸入第一行給出乙個正整數 n(≤10~5 ),即考生人數。隨後 n 行,每行按下列格式給出乙個考生的資訊:
准考證號 得分 學校
其中准考證號是由 6 個字元組成的字串,其首字母表示考試的級別:b代表乙級,a代表甲級,t代表頂級;得分是 [0, 100] 區間內的整數;學校是由不超過 6 個英文本母組成的單位碼(大小寫無關)。注意:題目保證每個考生的准考證號是不同的。
首先在一行中輸出單位個數。隨後按以下格式非降序輸出單位的排行榜:
排名 學校 加權總分 考生人數
其中排名是該單位的排名(從 1 開始);學校是全部按小寫字母輸出的單位碼;加權總分定義為乙級總分/1.5 + 甲級總分 + 頂級總分*1.5的整數部分;考生人數是該屬於單位的考生的總人數。
學校首先按加權總分排行。如有並列,則應對應相同的排名,並按考生人數公升序輸出。如果仍然並列,則按單位碼的字典序輸出。
10a57908 85 au
b57908 54 lanx
a37487 60 au
t28374 67 cmu
t32486 24 hypu
a66734 92 cmu
b76378 71 au
a47780 45 lanx
a72809 100 pku
a03274 45 hypu
51 cmu 192 2
1 au 192 3
3 pku 100 1
4 hypu 81 2
4 lanx 81 2
其實這道題還是應該用map儲存,map的好處就在於處理這種問題。通過string作為key來進行索引,直接將value儲存為乙個node,然後對每乙個node進行處理就行了……具體的思路看順便貼一下我的源**……大神勿噴
#include
#include
#include
#include
using
namespace std;
struct member
;string tolowercase
(string str)
}return str;
}int
compare
(member m1,member m2)
intmain()
else
if(id[0]
=='t'
)int flag=0;
int i=
0,j=vec.
size()
-1;while
(iif(vec[j]
.school==school)
i++; j--;}
if(flag==0)
}sort
(vec.
begin()
,vec.
end(
),compare)
;int flag=1;
cout<
size()
<
for(
int i=
0;isize()
;i++
)else
if(vec[i]
.score==vec[i-1]
.score)
else
}}
執行超時。最終能通過的原始碼:
#include
#include
#include
#include
#include
#include
using
namespace std;
typedef
struct node
node;
bool
cmp(pair a, pair b)
else
return a.second.score > b.second.score;
}int
main()
vector>
v(school.
begin()
, school.
end())
;sort
(v.begin()
, v.
end(
), cmp)
; v[0]
.second.order =1;
cout << v.
size()
<< endl << v[0]
.second.order <<
" "<< v[0]
.first <<
" "<<
(int
)floor
(v[0
].second.score)
<<
" "<< v[0]
.second.num << endl;
for(i =
1; i < v.
size()
; i++
)return0;
}
以上**為
就連用map都要400ms的時間,更別說直接查詢了……
PTA乙級1085,單位排行
分析 先定義乙個結構體node,儲存考生所屬學校排名 考生人數 總分 單位名稱 設定輸出的比較函式cmp floor 函式有向下取整的功能 因為輸出結果需要按照題目要求,所以再定義乙個vector,內部儲存結構體node型別,利用cmp進行排序後,再按要求輸出。include using names...
PAT 1085 PAT單位排行
每次 pat 考試結束後,考試中心都會發布乙個考生單位排行榜。本題就請你實現這個功能。輸入格式 輸入第一行給出乙個正整數 n 10 5 即考生人數。隨後 n 行,每行按下列格式給出乙個考生的資訊 准考證號 得分 學校 其中准考證號是由 6 個字元組成的字串,其首字母表示考試的級別 b代表乙級,a代表...
1085 PAT單位排行
每次 pat 考試結束後,考試中心都會發布乙個考生單位排行榜。本題就請你實現這個功能。輸入第一行給出乙個正整數 n 10 5 即考生人數。隨後 n 行,每行按下列格式給出乙個考生的資訊 准考證號 得分 學校其中准考證號是由 6 個字元組成的字串,其首字母表示考試的級別 b代表乙級,a代表甲級,t代表...