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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1012 The Best Rank (25 分)【难度: 中 / 知识点: 排序 前缀和】

發布時間:2025/3/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1012 The Best Rank (25 分)【难度: 中 / 知识点: 排序 前缀和】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


https://pintia.cn/problem-sets/994805342720868352/problems/994805502658068480
解析: 這里的每一項排名有一個坑的點,就是 100 100 95 這種 100并列第一 95為第三
題目說實話有點含糊不全。
那么如何處理這種并列情況呢? 用前綴和,求[(當前分數+1)-100]這一段區間有幾個人 代表你的前面有多少人。你的排名就是區間人數+1

#include<bits/stdc++.h> using namespace std; const int N=1e3*3+10; struct node {string name;int a[4];//A,C,M,Eint index;//排名int ans;//答案是哪一項 }Node[N]; int n,m; char c[5]={'A','C','M','E'}; map<string,node>mp;//查詢 map<string,int>hush;//判斷是否有這個人 int ve[5][105]; bool cmp(int a,int b) {return a>b;} void f1(int d)//將所選的成績,求前綴和 {int s=0;for(int i=0;i<=100;i++) ve[d][i]=s+ve[d][i],s=ve[d][i]; } node f2(node x) {int b[10];x.index=1e9;for(int i=0;i<4;i++)//枚舉4個成績 找到最小的排名{b[i]=ve[i][100]-ve[i][x.a[i]]+1;}for(int i=0;i<4;i++) if(x.index>b[i]) x.index=b[i],x.ans=i;return x; } int main(void) {cin>>n>>m;for(int i=0;i<n;i++) {cin>>Node[i].name>>Node[i].a[1]>>Node[i].a[2]>>Node[i].a[3];Node[i].a[0]=(Node[i].a[1]+Node[i].a[2]+Node[i].a[3])/3.0+0.5;Node[i].index=1e9;ve[0][Node[i].a[0]]++;ve[1][Node[i].a[1]]++;ve[2][Node[i].a[2]]++;ve[3][Node[i].a[3]]++;}f1(0),f1(1),f1(2),f1(3);//求前綴和for(int i=0;i<n;i++)//枚舉每一個學生{Node[i]=f2(Node[i]);//找到最佳排名mp[Node[i].name]=Node[i];hush[Node[i].name]=1;//標記有這個學生}while(m--){string s; cin>>s;if(hush[s]) cout<<mp[s].index<<" "<<c[mp[s].ans]<<endl;else puts("N/A");}return 0; }

總結

以上是生活随笔為你收集整理的1012 The Best Rank (25 分)【难度: 中 / 知识点: 排序 前缀和】的全部內容,希望文章能夠幫你解決所遇到的問題。

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