2B.处女座与cf(C++)
處女座與cf(C++)
點擊做題網站鏈接
題目描述
眾所周知,處女座經常通過打cf來調節自己的心情。今天處女座又參加了一場cf的比賽,他知道了所有的提交記錄,他想知道自己的得分和排在第幾名。你知道處女座的cf賬號是cnz
Codeforces規則如下:
在第0分鐘完成某一題可以得到全部的分數,每過一分鐘每題的分值會衰減1/250,比如在第3分鐘完成A題,能夠得到500-2*3=494分
處女座又了解到一些信息:
本場比賽沒有任何選手hack別人,并且沒有任何的提交fst(即只要是某題的最后一次提交通過,就視為通過這道題)
輸入描述:
第一行兩個整數n和m,n為報名比賽的人數,m為提交的個數
接下來n行,每行一個字符串,表示報名比賽的人的昵稱。(字符串只包含小寫字母,且長度小于20)
接下來m行,每行的格式為Time,Submiter,Problem,Verdict。
Time為提交的時間,是1到120中的一個正整數(包含1和120),保證Time按順序給出
Submiter為提交者昵稱
Problem為題目名稱,是’A’,’B’,’C’,’D’,’E’中的一個字母。
Verdict為返回的結果,為”AC”,”WA”,”TLE”,”CE”中的一個。
2<=n<=500
1<=m<=10000
輸出描述:
如果處女座參加了比賽,輸出兩行:
第一行為處女座的得分
第二行格式x/y,其中x為處女座的排名,y為參加比賽的總人數。如果分數相同那么排名并列。
如果處女座沒有參加比賽,輸出”-1”
示例1
輸入
3 7
cnz
cuber
moon
3 cnz A AC
5 cuber A AC
6 cnz B CE
10 cuber C AC
20 cnz B AC
30 cuber D TLE
100 cnz E AC
輸出
2914
1/2
解題代碼:
#include <iostream> #include <algorithm> #include <map> using namespace std; map<string,int> p;//下標為參賽昵稱,內部存儲 int a[505][6];//錯誤提交的次數 int b[505][6];//每個人每道題分數 int r[6]={500,1000,1500,2000,2500};//儲存每道題目的分數 int mark[505];//每個人總分 bool vis[505];//是否參加比賽 int n,m,t;//n為報名比賽的人數,m為提交的個數,t為提交時間 int main() {ios::sync_with_stdio(0);//加速cin >> n >> m;string name,ans;//提交者昵稱,返回的結果char id;//題目名稱for(int i=0;i<n;++i){cin >> name;p[name] = i;}for(int i=0;i<m;++i){cin >> t >> name >> id >> ans;int x = p[name];vis[x] = 1;//參加比賽記位1if(ans=="CE") b[x][id-'A']=0;//無效的提交得不到分else if(ans=="AC")//有效提交“AC”{b[x][id-'A'] = max(r[id-'A']*3/10,r[id-'A']-t*(r[id-'A']/250)-50*a[x][id-'A'] );a[x][id-'A']++;//你每進行一次提交,對于這一題之前的有效提交(AC,WA,TLE)都視為錯誤的提交。}else//“WA”“TLE”{a[x][id-'A']++;b[x][id-'A']=0;}}for(int i=0;i<n;++i){mark[i]=0;for(int j=0;j<5;j++)mark[i] += b[i][j];}int y=0,x=1;//分母,分子for(int i=0;i<n;++i)if(vis[i]==1)y++;for(int i=0;i<n;++i)if(mark[p["cnz"]]<mark[i])x++;if( vis[p["cnz"]]==1 ){cout << mark[p["cnz"]] << endl;cout << x << "/" << y;}else cout << "-1" << endl;}轉載于:https://www.cnblogs.com/yuzilan/p/10626083.html
總結
以上是生活随笔為你收集整理的2B.处女座与cf(C++)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 获取二维数组中的值
- 下一篇: css3 奇技淫巧 - 如何给小汽车换个