YTU:我们是冠军

YTU:我们是冠军(小白的代码)
题目描述
在这里插入图片描述
众所周知,IG 在 S8 总决赛中拿下了……不对, 众所周知, 在今年的 ACM 省赛中,我校"伊丽莎白(xyx, zudikn, clx)"队伍力克山大拿到了冠军,ACM 赛制的比赛是非常有趣的,在这种赛制下,排名是按照以下标准执行的(如上图所示):
解题数越多越靠前 在解题数相同的情况下,罚时越少越靠前
如果某道题目未通过, 则不管提交多少次,都不计算罚时 对于罚时的定义:一道题的罚时是由两部分组成, 一部分是提交错误次数 × 20 min× 20 min

,另一部分是这道题目通过的时间。

例如,"伊丽莎白"队伍 E 题通过的时间是 114 min,提交 3 次通过说明前两次都错误了,则这道题他们的总罚时是 114+2×20=154 min114+2×20=154 min

现在,我们有一场比赛 n个队伍的数据, 你能帮我们计算出他们的排名吗?
输入输入的第一行包含两个正整数 n,kn,k

(1≤n≤1000,1≤k≤13)(1≤n≤1000,1≤k≤13)

,表示共有 n 支队伍,每只队伍的编号为 1…n1…n

,该场比赛共有 k道题目。

接下来有 n行输入,其中第 i 行表示第 i 支队伍的数据。每一行, 有 kk

对数分别表示通过每道题的时间(0≤PenaltyTime≤3000≤PenaltyTime≤300)和提交次数(0≤SubmitCount≤5000≤SubmitCount≤500), 如果通过的时间为 0 或者提交次数为 0,则说明该题未通过。
我们保证不会有两支队伍排名相同。
输出输出只有一行为 1…n1…n
的一个排列, 表示这 n 支队伍的排名。
样例输入
2 3
13 1 16 1 14 2
13 1 16 1 32 1
样例输出
2 1
提示
样例 1,有 22 支队伍,33 道题, 第 11 支队伍通过了 33 题,总罚时为 13+16+14+(1×20)=6313+16+14+(1×20)=63,第 22 支队伍通过了 33 题,总罚时为 13+16+32=6113+16+32=61,所以第 22 支队伍排在第 11 支前面。

题目分析
因为这道题中的输入变量比较多,通过构造结构题定义一个队伍,将它的题数与时间保存。
最后再将这个做对了的总题数与时间保存进结构体。
排序,因为本人比较懒,所以用最简单的冒泡排序先按题数由大到小排,再按时间由小到大

#include<iostream>
#include<cstdio>
using namespace std;
typedef struct time
{
 int p;
 int a[14];
 int b[14];
 int tt;
 int sum;
}Time;//创建一个结构体
int main()
{
 int n,m,i,j;
 Time t[1005],temp;
 scanf("%d %d",&n,&m);
 for(i=0;i<n;i++)
 {
  t[i].p=i+1;
  t[i].sum=0;
  t[i].tt=0; 
  for(j=0;j<m;j++)
  {
    scanf("%d %d",&t[i].a[j],&t[i].b[j]);//输入题目时间 几次通过或者没过
    if(t[i].a[j]>0)
    {
    t[i].sum+=(t[i].a[j]+(t[i].b[j]-1)*20);
       t[i].tt+=1;
    }
     }
 }
 for(i=0;i<n;i++)
 {
  for(j=1;j<n-i;j++)
  {
   if(t[j-1].tt<t[j].tt)//题目数量排序
   {
    temp=t[j-1];
    t[j-1]=t[j];
    t[j]=temp;
   }
   if(t[j-1].tt==t[j].tt)
   {
    if(t[j-1].sum>t[j].sum)//相同题目数量,时间排序
    {
     temp=t[j-1];
     t[j-1]=t[j];
     t[j]=temp;
    }
   }
  }
 }
 for(i=0;i<n;i++)
 printf("%d ",t[i].p);
 return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值