日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

PAT甲级1025 PAT Ranking:[C++题解]排序、结构体、排名

發布時間:2025/4/5 c/c++ 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PAT甲级1025 PAT Ranking:[C++题解]排序、结构体、排名 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 題目分析
    • 題目鏈接

題目分析

一個區域排名和一個總排名。啟發我們每個同學的數據存兩份,一個存在區域數組中,另一個存在整體數組中。

有序列表中排名怎么求呢?
比如序列

得分:99 98 98 97 97 90 排名:1 2 2 4 5 6

思路如下:如果該數和它前面的數不一樣,則它的排名就是它前面的數的個數+1,比如98分排名第2;如果該數和它前面的數相等,該數的排名和前面數的排名一致,比如98分排名第2.

ac代碼

#include<bits/stdc++.h> using namespace std; const int N =110;struct Student{string id;int grade;int location_number ,local_rank ,final_rank;bool operator <(const Student& a) const{ //重載小于號,可以理解成滿足什么條件的人排到前面if(grade!=a.grade) return grade>a.grade; //成績高的排在前面return id<a.id; //若成績相等,則id小的排在前面} };vector<Student> grades[N];//區域成績,二維數組 vector<Student> all;//全國總成績int main(){int n;cin>>n;for(int i=1;i<=n;i++){ //遍歷每一個區域:編號從1到nint k;cin>>k; //區域人數while(k--){string id;int grade;cin>> id>>grade;grades[i].push_back({id, grade,i}); //區域i的學生壓入}auto & g=grades[i]; //引用sort(g.begin(),g.end()); //區域排序for(int m=0;m<g.size();m++){ //區域排名if(!m || g[m].grade!=g[m-1].grade) //如果是第一個 或者是和前面的人成績不一樣g[m].local_rank=m+1;else g[m].local_rank = g[m-1].local_rank;all.push_back(g[m]); //區域排好名后壓入全國數組中}}sort(all.begin(),all.end()); //全國排序for(int i=0;i<all.size();i++){ //全國排名if(!i || all[i].grade!=all[i-1].grade)all[i].final_rank=i+1;else all[i].final_rank=all[i-1].final_rank;}cout<<all.size()<<endl;for(auto& s:all)cout<<s.id<<" "<<s.final_rank<<" "<<s.location_number<<" "<<s.local_rank<<endl; }

第二遍代碼
沒用引用,寫起來使用二維數組。

#include<bits/stdc++.h> using namespace std; const int N = 110;struct Student{string id;int grade;int location_number;int final_rank,local_rank;bool operator<(const Student& t) const{if(grade != t.grade) return grade>t.grade;return id<t.id;} }; vector<Student> q[N]; vector<Student> all; int main(){int n;cin>>n;for(int i=1;i<=n;i++){ //區域號iint k;cin>>k;while(k--){string id;int grade;cin>> id>>grade;q[i].push_back({id,grade,i});}sort(q[i].begin(),q[i].end()); //遍歷區域內的每個學生for(int j=0;j<q[i].size();j++){if(!j || q[i][j].grade != q[i][j-1].grade) q[i][j].local_rank=j+1;else q[i][j].local_rank = q[i][j-1].local_rank;all.push_back(q[i][j]);} }sort(all.begin(),all.end());cout<<all.size()<<endl;for(int i=0;i<all.size();i++){if(!i || all[i].grade != all[i-1].grade)all[i].final_rank=i+1;else all[i].final_rank=all[i-1].final_rank;}for(auto &c: all)cout<< c.id<<" "<<c.final_rank<<" "<<c.location_number<<" "<<c.local_rank<<endl;}

題目鏈接

PAT甲級1025 PAT Ranking

總結

以上是生活随笔為你收集整理的PAT甲级1025 PAT Ranking:[C++题解]排序、结构体、排名的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。