IOI 排名

神 MY 参加了 IOI,赛后他想了解关于自己排名的信息。

题目描述
MY 共参加了 TT 次 IOI,每次有 nn 场考试,mm 个人参加。他不知道自己的总分数,但知道每场考试的名次。

MY 迫切地想知道自己成绩的范围,于是他找到了你。

现在告诉你 MY 每次的排名,请你计算出他最好和最差的可能名次。

让我们假设IOI分数没有上限
不必考虑并列情况
输入格式
第一行1个正整数 TT,表示 MY 参加 IOI 的次数。

接下来 T\times2T×2 行,表示 TT 次IOI的信息。

每组数据中:

第 11 行2个正整数 nn,mm,表示第 ii 次 IOI 的考试场数与参加人数;

第 22 行 nn 个正整数 rank_1rank
1

,…,rank_nrank
n

,表示第 ii 次 IOI 中 nn 场考试 MY 的名次。

输出格式
TT 行,第 ii 行2个正整数 ll,rr,表示 MY 第 ii 次 IOI 的最好排名与最差排名。
》》
4
5 5
1 1 1 1 1
2 3
1 2
1 3
2
5 5
1 2 2 2 3
《《
1 1
1 2
2 2
1 5

https://www.luogu.com.cn/problem/T119274?contestId=28471
对于最好排名,显然,只要有一次排名比别人好,就可以算作总排名比他好。(最理想的状态,反正分数没定,可以假设分数特别高)并且,尽量每次超过不同的人,这样排名当然最好。

如此,得到总共超过的人数(当然,要保证在排名范围内)便可以算出最好排名。

对于最差排名,就恰好相反,只要一次被别人甩,就假设总排名也不如别人了。思路与操作皆类似。

至于代码相信都会写吧。

#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<queue>
#include<map> 
#include<bitset>
using namespace std;
#define re register int
int t,n,m,a,b,x;
signed main(){
    cin>>t;
    while(t--){
        cin>>n>>m;a=b=0;
        for(re i=1;i<=n;i++){
            cin>>x;a+=x-1;b+=m-x;
        }
        a=min(a,m-1);b=min(b,m-1);
                cout<<m-b<<" "<<a+1<<endl;
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值