ACM练习 小Z来讲排名规则(WA)【C++ stable_sort稳定排序】
描述
本次比賽嚴格按照ACM的排名規則進行,但可能很多小伙伴并不太了解這個排名方法,今天小Z來給大家簡單說明一下。每個人的排名根據他解出的題目數量、做題時間還有錯誤提交次數決定,呃。。。在某些特殊情況下跟大家的昵稱也有關系喲~不過不要著急去改昵稱,畢竟是特殊情況,很難遇到的。下面我具體說明一下。
排名的第一關鍵字是解出的題目數,也就是說,解出題目數量多的小伙伴一定會排在解出題目數量少的小伙伴前面
如果解出的題目數量相同,則根據“罰時”決定排名,罰時少者靠前。罰時是這樣定義的:每道成功解出的題目會造成罰時,其他題目不會;每道成功解出的題目造成的罰時是成功解出該題的時間,加上錯誤提交次數20分鐘(比如一道題目在第30分鐘解出,之前錯誤提交了兩次,那么總的罰時就是30+202=70分鐘,這里的錯誤指的是除了Accept之外的所有反饋情況);最終的罰時是所有成功解出題目的罰時的總和。
一道題目正確解出后,再次提交無論結果如何,都不會再對罰時產生任何影響。
如果解出的題目數量和罰時數量都相同,在這個平臺上就會按照昵稱排序。
舉個例子,比如當前有5道題目,你成功解出了1,3,5號題目,1號題目在第5分鐘1次解出,第3號題目在第10分鐘嘗試了一次但是wa了,在第15分鐘解出;第5號題目在第20分鐘解出,之后你又提交了2次;第2號題目你嘗試了4次但是都沒有解出;第4號題目你沒有嘗試。那么最終你的罰時是5 + 0 + 15+1*20 + 0 + 20 = 60分鐘,你解出了3道題。假設此時有另外三個小伙伴A,B,C,成績分別是4題75分鐘,3題90分鐘,2題20分鐘,那么最終的排名是A,你,B,C。
好了,現在給你一些提交記錄,按照這個規則試著計算一下吧。
輸入
第一行包含一個整數T,代表數據組數。
接下來包含T組測試數據。
每組數據第一行包含三個整數n,m,q,分別代表參賽人數、題目數量、提交記錄數量。(1<=n,m,q<=10)
緊接著q行,每行包含4個整數p,t,r,s,意思是p號小伙伴在第t分鐘提交了r號題目,得到了s的反饋,若s==0則代表錯誤,s==1代表正確。注意,你的編號就是1號。其他編號的小伙伴只是陪你一起打比賽玩耍的~(1<=p<=n,1<=t<=100,1<=r<=m,s=0或者s=1)
輸入保證不存在兩個選手,其通過題目數量和罰時相同。
輸出
對于每組測試樣例,輸出一行包含三個整數,分別代表你(1號)的排名、做出的題目數量和罰時
樣例輸入
1 2 5 10 1 5 1 1 1 6 2 0 1 7 2 0 1 8 2 0 1 9 2 0 1 10 3 0 1 15 3 1 1 20 5 1 1 30 5 1 1 35 5 0樣例輸出
1 3 60提交總是WA,不知道錯在哪了。題目給的測試用例和我自己寫的測試用例都能按照預期運行,是我理解錯題意了嗎,還是細節/邊界問題?還是數組數組大小不夠?
我寫的測試用例如下:
測試用例1
1
2 5 12
1 5 1 1
1 6 2 0
1 7 2 0
1 8 2 0
1 9 2 0
1 10 3 0
1 11 3 0
1 15 3 1
1 16 3 1
1 20 5 1
1 30 5 1
1 35 5 0
答案:1 3 80
測試用例2
1
2 5 10
1 5 1 1
1 10 3 0
1 15 3 1
1 20 5 1
1 16 3 0
1 9 2 0
1 35 5 0
1 30 5 1
1 7 2 0
1 17 4 1
答案:1 3 77
測試用例3
1
2 5 9
1 1 1 0
2 1 2 1
1 2 2 0
2 2 2 0
2 2 3 0
2 3 3 1
1 3 1 0
1 4 2 0
1 5 1 1
//1 對1 題 時間20*2+5=45
//2 對2 題 時間1+20+3=24
答案:2 1 45
測試用例4
1
3 5 10
1 1 1 0
2 1 2 1
1 2 2 0
2 2 2 0
2 2 3 0
2 3 3 1
1 3 1 0
3 4 1 1
1 4 2 1
1 5 1 1
//1 對2 題 時間20*2+20+5+4=69
//2 對2 題 時間1+20+3=24
//3 對1題 時間 4
答案:2 2 69
測試用例5
1
5 2 10
1 1 1 0
2 10 4 0
3 20 5 1
4 30 2 1
5 40 1 1
1 50 2 0
2 60 4 1
3 70 5 0
4 80 3 1
5 90 2 1
//1 對0 時0
//2 對1 時60+20=80
//3 對1 時20
//4 對2 時30+80=110
//5 對2 時40+90=130
答案:1 0 0
代碼
//排名關鍵字: //1 解出的題目數 //2 罰時:解答時間+錯誤次數*20min //3 昵稱 #include<iostream> #include<algorithm> using namespace std;class oneTry { public:int peopleNum;int time;int questionNum;int result;int wrongTime = 0; };class onePeople { public:int waQues[100] = { 0 };//嘗試某題的次數int quesOK[100] = { 0 };//本題是否通過int pNum = 0;//人的序號int accept = 0;//成功題數int pTime = 0;//罰時 };int compareQuesNum(oneTry a1, oneTry a2) {return (a1.questionNum < a2.questionNum); }int compareTryTime(oneTry a1, oneTry a2) {return (a1.time < a2.time); }int compareTime(onePeople a1, onePeople a2) {return (a1.pTime < a2.pTime); }int compareAcc(onePeople a1, onePeople a2) {return (a1.accept > a2.accept); }int main() {//輪數int play;cin >> play;//人數 題目數量 提交記錄數量int totalPeople, totalQuestion, totalTry;cin >> totalPeople >> totalQuestion >> totalTry;//輸入每一次嘗試結果oneTry onetry[15];int i;for (i = 0; i < totalTry; i++){cin >> onetry[i].peopleNum >> onetry[i].time >> onetry[i].questionNum >> onetry[i].result;}//題號排序stable_sort((onetry + 0), (onetry + totalTry), compareQuesNum);//時間排序stable_sort((onetry + 0), (onetry + totalTry), compareTryTime);//計算每個人的罰時int j;onePeople onepeople[100];for (j = 0; j < totalPeople; j++)//遍歷每個人{onepeople[j].pNum = j + 1;for (i = 0; i < totalTry; i++)//查找所有這個人的提交記錄{if (onetry[i].peopleNum == onepeople[j].pNum)//是當前人的提交記錄{if (onepeople[j].quesOK[onetry[i].questionNum] == 1)//已經通過{continue;}else//未通過{if (onetry[i].result == 0)//提交失敗{onepeople[j].waQues[onetry[i].questionNum]++;//嘗試次數++}else//提交成功{onepeople[j].accept++;onepeople[j].quesOK[onetry[i].questionNum] = 1;//標記通過onepeople[j].pTime += onepeople[j].waQues[onetry[i].questionNum] * 20 + onetry[i].time;//計算時間}}}}}//給人排序,先排罰時 注意排序穩定性stable_sort((onepeople + 0), (onepeople + totalPeople), compareTime);//排答對數量stable_sort((onepeople + 0), (onepeople + totalPeople), compareAcc);//計算排名int myrand;for (i = 0; i < totalPeople; i++){if (onepeople[i].pNum == 1){myrand = i;}}//輸出cout << myrand + 1 << ' ' << onepeople[myrand].accept << ' ' << onepeople[myrand].pTime;system("pause"); }總結
以上是生活随笔為你收集整理的ACM练习 小Z来讲排名规则(WA)【C++ stable_sort稳定排序】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# 实验四 修改版 获取系统时间、点击
- 下一篇: ACM练习 愚人节拆括号【vector的