#532. 排名

题目描述

9102年,wwh第二次参见NOIP,那一年,赛制发生了改变,已经不像现在的分数了,从原来的100分制变成了一分制,即用一个[0,1]的实数来表示。同时在赛制的影响下,保证两个人的分数一定不相同。

wwh在考场上电脑死机了,考完后,就在他万念俱灰的时候,他想起来一个事情:今年总共有n道题,有m个人来考试,现在他知道了每题他自己在m个人中的排名,为了估测自己可不可以拿到省一等奖,他想知道自己n题的总分的排名最小可能值与最大可能值。

输入描述

第一行两个正整数n,m,含义见题目表述。

接下来n行每行一个[1,m]间的正整数表示wwh每一题的得分的排名。

输出描述

一行一个正整数,共两行,分别表示wwh总分排名的最小值和最大值。

样例输入1

3 3
3
3
3

样例输出1

3
3

样例输入2

6 6
1
2
3
1
2
1

样例输出2

1
5

样例2提示

仔细观察wwh有3道题目是排在第一名的位置,利用枚举的思想,将总分抽象成为排名之和,暴力后可得无论如何安排人次,均不可能使得wwh排在第六名,只可以排在第五名。

同理,经过适当的名次安排后完全可以使得wwh排在第一。

最后的思考:在什么情况下,A的总成绩可以排在B前面?

答案:A只要有一门课比B高,A完全就有可能总成绩比B的成绩高。

继续思考样例2:

我们讨论一下排名最大值的情况。第一题没有人在wwh前面,第二题有一个人在前面,第三题有两个人,第四题没有人,第五题有一个人在前面,总共可以有4个人在wwh前面,所以wwh最坏排第5名

数据规模与约定

时间限制:1s

对于30%的数据,n<=2

另有20%的数据,m<=2

对于100%的数据,1<=n<=1000,1<=m<=10^4

 

 

 

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
using namespace std;
int n,m,a,b,c;
int read(){
	int a=0,b=1;
	char ch=getchar();
	while((ch<48||ch>57)&&ch!='-'){
		ch=getchar();
	}
	if(ch=='-'){
		b=-1;
		ch=getchar();
	}
	while(ch<48||ch>57){
		ch=getchar();
	}
	while(ch>47&&ch<58){
		a=a*10+ch-48;
		ch=getchar();
	}
	return a*b;
}
int main(){
	n=read(),m=read();
	a=m,c=0,b=1;
	int x;
	for(int i=1;i<=n;i++){
		x=read();
		a=min(a,x);
		b+=(x-1);
		c+=(m-x);
	}
	b=min(b,m);
	c-=(m-a);
	a=max(1,a-c);
	printf("%d\n%d",a,b);
	return 0;
}

  

转载于:https://www.cnblogs.com/xiongchongwen/p/11582058.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值