cf--1313--B. Different Rules

传送门

http://codeforces.com/contest/1313/problem/B

题意

有n位参赛者参加两轮比赛,小明同学获得的名次是x和y,其他人的名次是未知的,求小明在两次比赛中的最高排名和最低排名,排名要求是相当于第几名就扣多少分,最后扣分越少的参赛者排名越高,假设扣分相同,则所有人都排当前的最后一名。

思路

1.先来看看最差名次,最差名次很好想,尽量多构造和小明同学扣分数相同的参赛者,小明的最终扣分为x+y
1 x+y-1
2 x+y-2
… …
x y
… …
x+y-1 1
最终小明的排名为min(n,x+y-1);
2.再来看看最高名次,当x+y<n+1时,可以构造
1 n
2 n-1
… …
n 1
当然这时候小明就排到了第一名
当x+y>=n+1时,就可以先让扣分少的组合在一起
1 1
2 2
… …
x y
再把第一名去掉后的排名就是x-1+y-1;最后怎么来确定其排名
才是本题的关键,依次进行上一步骤 x-t+y-t=n-t时,这就先组合了t组排名高的,t=x+y-n,那么多个人,最后小明就排在t+1位,所有其最高名次为min(n,x+y-n+1)

AC代码
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int n,x,y;
		scanf("%d%d%d",&n,&x,&y);
		if(x>y)	swap(x,y);
		int ansx,ansi;//最差名次,最好名次 
		ansx=min(n,x+y-1);
		if(x+y<n+1)	ansi=1;
		else	ansi=min(n,x+y-n+1);
		printf("%d %d\n",ansi,ansx);
	}
	return 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星空皓月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值