EOJ_1057_排名汇总
生活随笔
收集整理的這篇文章主要介紹了
EOJ_1057_排名汇总
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
#include <bits/stdc++.h>using namespace std;
//因?yàn)榘凑辗謹(jǐn)?shù)排名 所以不能邊輸入邊排序,邊輸入邊排序得到的是當(dāng)前的排名,而不是整體的排名
//因?yàn)榘凑辗謹(jǐn)?shù)排序,直接sort
//因?yàn)橐敵雠琶蚁嗤謹(jǐn)?shù)處于同一排名,所以可以直接用桶記錄分?jǐn)?shù),桶內(nèi)容為考取該分?jǐn)?shù)的學(xué)生數(shù)量
//(如果不是同一排名,要按照學(xué)號(hào)再排序,則桶的內(nèi)容不能是考了該分?jǐn)?shù)的學(xué)生數(shù)量,而是學(xué)生的具體信息,之后桶內(nèi)要再排序),
//(即同一分?jǐn)?shù)不是相同排名,桶排序計(jì)算排名沒(méi)有優(yōu)勢(shì),不用桶排序,可以直接用普通方法,局部變量rank+遍歷得到)
//再計(jì)算大于當(dāng)前考生分?jǐn)?shù)之前的人數(shù)(即桶內(nèi)人數(shù)的總數(shù))typedef struct
{string stuNum;int place;//因?yàn)樾枰敵隹键c(diǎn)int score;//按照分?jǐn)?shù)排名,同時(shí)要保證輸入完后進(jìn)行整體排名,所以結(jié)構(gòu)體內(nèi)留有分?jǐn)?shù)
}stu;int dicScore[103]={0};
stu allStu[30003];
int dicScorePlace[103][103]={0};//第一個(gè)下標(biāo)表示考場(chǎng),第二個(gè)下標(biāo)表示考j分,數(shù)值表示人有多少
int allStuNum=1;
stu placeStu[303];int getRankPlace(stu tmpStu, int place)
{int rankNum=0;for(int score=100; score>tmpStu.score ; score--){rankNum += dicScorePlace[place][score];}rankNum++;return rankNum;
}void pushAllStu(stu tmpStu, int place)
{dicScore[tmpStu.score]++;dicScorePlace[place][tmpStu.score]++;allStu[allStuNum] = tmpStu;
}int get(stu s)
{int rankAll=0;for(int score=100; score>s.score; score--){rankAll += dicScore[score];}rankAll++;return rankAll;
}bool cmp(stu a, stu b)
{if(a.score > b.score){return true;}else if(a.score==b.score){if(a.stuNum.compare(b.stuNum)<0) return true;else return false;}else if(a.score < b.score) return false;
}int main()
{int n;cin>>n;for(int i=1;i<=n;i++){int num;cin>>num;for(int j=1;j<=num;j++){stu tmpStu;tmpStu.place = i;cin>>tmpStu.stuNum >>tmpStu.score;pushAllStu(tmpStu, i);allStuNum++;}}allStuNum--;sort(allStu+1, allStu+allStuNum+1, cmp);cout<<allStuNum<<endl;for(int i=1;i<=allStuNum;i++){stu s = allStu[i];int rankTmp = get(s);int rankPlaceTmp = getRankPlace(s, s.place);cout<<s.stuNum <<" " <<rankTmp <<" " <<s.place <<" " <<rankPlaceTmp <<endl;}return 0;
}
總結(jié)
以上是生活随笔為你收集整理的EOJ_1057_排名汇总的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: EOJ_1039_最长连续公共子序列
- 下一篇: EOJ_1049_三元组稀疏矩阵相加