codeforce round622div2 bDifferent Rules

在这里插入图片描述
题目大意为,有一个新规则来进行排名,一共n个人参加两轮比赛,单次比赛名次不可重复,比较相加结果,问此人最高排名和最低排名。
首先分析最低的排名,也就是最大的排名,因为2轮比赛名次和的平均数是n如果这个x+y<=n就说明最低名次一定是低x+y-1名,因为他小于平均值n+1所以我们要让整个排名的平均值尽可能的低,就要想办法去除最大的组合尽可能让他排名靠前比如n==4时,我们让x+y是1和2那么首先第n名应该是两个4第三是两个三这是平均名次就是x+y了把前两名都看做第二即可得到答案。也就是说当他没有达到n+1时,最后一名一定两个n组成(因为如果有n入选就不可能<=n)
同理如果要求最小排名我们考虑如果答案小于n就一定是第一,如果大于等于n那也就是把最小组合排第一,然后平均值会上升直到x+y比平均值小一点答案就是x+y+1-n,因为每次降低的平均值一定是尽可能小的比如1 1所以减一次平均值会增大
核心代码只有一行

cout>>min(max(x+y+1-n,1)n)>>' '>>min(x+y-1,n)<<endl;
发布了48 篇原创文章 · 获赞 17 · 访问量 4457

猜你喜欢

转载自blog.csdn.net/weixin_45757507/article/details/104469159