21.10.10模拟 排名

一共有n 道题,有m 个人来参加考试,已知我每道题在所有参赛选手中的排名,问n 道题加起来计算总分的排名最小可能值与最大可能值。

显然(一点也不显然)
总分A比总分B高当且仅当A的每道题都比B高
于是我们统计每场最多有多少人至少一场比我高,最多有多少人一场比我低即可

const int N = 1e3 + 79;
const int M = 1e4 + 79;
int rank[N];
int n, m;

int main() {
	freopen("rank.in","r",stdin);
	freopen("rank.out","w",stdout);
	read(n);
	read(m);
	rep(i, 1, n) {
		read(rank[i]);
	}
	int tot(0);
	rep(i,1,n){
		tot+=m-rank[i];//比我高的人的人数  
	}
	out(m-min(m-1,tot),'
');
	
	tot=0;
	rep(i,1,n){
		tot+=rank[i]-1;
	}
	out(1+min(m-1,tot),'
');
	return 0;
}

对于求最小的排名,我们假设我每个题都考1-eps分,总分就是n-eps,如果某人的某题分数比我小,那么就当他爆0(0+eps),那么这个人的总分肯定小于我(n-eps)。就相当于比我大的看做1分,比我小的当做0分.

本文来自博客园,作者:{2519},转载请注明原文链接:https://www.cnblogs.com/QQ2519/p/15392120.html

原文地址:https://www.cnblogs.com/QQ2519/p/15392120.html