题目描述
## 题目描述
33dai举办了一个趣味的编程比赛,趣味编程比赛的规则是组队制的。TooY0ung帮助33dai制定了奖项的分配规则: 关于获金、银、铜奖队伍具体数量的计算方法 设有效参赛队伍数为 A 支,则: 获金(goldgold)奖队伍数为:J = (A10%)结果上取整; 获银(silversilver)奖队伍数为:Y = (A30%)结果上取整 – J; 获铜(bronzebronze)奖队伍数为:T = (A*60%)结果上取整 – Y - J; 有效参赛队伍定义为至少提交通过 1 个题目的正式参赛队伍,非正式参赛队伍为打星队伍,其标志为队伍名最后一个字符为 * 现在你想知道一场比赛的获奖情况 排名细则 所有正式参赛的参赛队按照解题数多少进行排名,解题数多的排名在前;若解题数相同,再比较总用时,总用时少的排名在前。
输入格式
第一行两个整数 nn。表示参赛队伍数量 下面 nn 行,每行包含两个字符串 school(学校)、team(队伍名),除打星队伍外,所有参赛队伍最后一个字符均不为∗)school(学校)、team(队伍名),除打星队伍外,所有参赛队伍最后一个字符均不为∗),两个整数 solved(通过题目数),time(总用时)solved(通过题目数),time(总用时), 保证 school,teamschool,team 中只出现小写英文字母以及 * 。保证 timetime 各不相同。 最后一行包括一个字符串ss表示查看金牌或者银牌或者铜牌的获奖情况,ss只有gold、silver、bronzegold、silver、bronze三种情况
输出格式
第一行输出获得ss奖的总人数xx 接下来xx行输出获得ss奖的队伍以及队伍信息(学校、队伍名、通过题目数、总用时)。
输入1:
15
nanjingdaxue chuochuorangchuochuobie 9 1148
qinghuadaxue sangedinglia 11 1340
beijingdaxue nishizi 10 780
qinghuadaxue miaomiaomiaomiaomiaomiaomiao 10 1126
xianjiaotongdaxue chabuduodele 10 1211
nanjingyoudiandaxue Cirtrus 10 1361
zhejiangdaxue SolitaryDream 8 788
tengxun tengxundaibiaodui* 8 842
kuangshi kuangshidaibiaodui* 8 1251
changchunligongdaxue dlrowollehstup 3 324
beijingdaxue chongshengzhiwoshicaigou 12 1036
beijingdaxue daidainiao 12 1230
qinghuadaxue sangedingxiang 12 2030
beijingdaxue chongshengcaigou 11 1523
beijingligongdaxue ddlzhanshen 10 1623
gold
输出1:
2
beijingdaxue chongshengzhiwoshicaigou 12 1036
beijingdaxue daidainiao 12 1230
数据规模与约定
对于 100%100% 的数据,1≤n≤2∗1051≤n≤2∗105, 1≤∣school∣,∣team∣≤301≤∣school∣,∣team∣≤30,∣school∣表示字符串长度∣school∣表示字符串长度 0≤solved≤13,0≤time≤231−10≤solved≤13,0≤time≤231−1
- 子任务 1(30 分):所有的队伍保证解题数不相同且按照解题数从大到小给出。
- 子任务 2(30 分):保证字符串ss是goldgold
- 子任务 3(40 分):没有特殊限制
样例输入content_copy
样例输出content_copy
提示/说明
#include<bits/stdc++.h>
using namespace std;
struct c{
string school,team;
int solved,time;
};
c cc[200010];
bool cmp(c u,c v){
if(u.solved==v.solved)return u.time<v.time;
return u.solved>v.solved;
}
int main (){
int n=0,s,t,cnt1=0,f1,f2,n1;
string s1,s2,d;
scanf("%d",&n1);
for(int i=1;i<=n1;i++){
cin>>s1>>s2;
scanf("%d",&s);
scanf("%d",&t);
if(s2[s2.size()-1]!='*'&&s!=0){
cnt1++;
cc[cnt1].school=s1;
cc[cnt1].team=s2;
cc[cnt1].solved=s;
cc[cnt1].time=t;
n++;
}
}
cin>>d;
int gold=n*10/100;
if(n*10%100!=0)gold++;
int silver=n*30/100;
if(n*30%100!=0)silver++;
silver-=gold;
int bronze=n*60/100;
if(n*60%100!=0)bronze++;
bronze-=silver+gold;
sort(cc+1,cc+cnt1+1,cmp);
if(d=="gold"){
cout<<gold<<endl;
f1=1;
f2=gold;
}else if(d=="silver"){
cout<<silver<<endl;
f1=gold+1;
f2=gold+silver;
}else {
cout<<bronze<<endl;
f1=gold+silver+1;
f2=gold+silver+bronze;
}
for(int i=f1;i<=f2;i++)
{
cout<<cc[i].school<<" "<<cc[i].team<<" "<<cc[i].solved<<" "<<cc[i].time<<endl;
}
return 0;
}