UVA1418 WonderTeam

链接

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4164

题解

手动尝试一下,就发现 n2 n ≤ 2 时,梦之队只能当第一
我们试图构造一种梦之队赢得次数最多,但是分数却很低的情况
如果让它赢一局,其它都赢零局的话,手算一下发现这样梦之队不仅不会排名靠后,而且会始终排第一
原因在于,如果其他队伍都赢0局,就意味着除了梦之队获胜的那一场,其它的比赛都是平局
这样再其它队伍得到1分的时候,梦之队也得到了1分,而么梦之队因为一开始得了3分,所以总分始终是最高的
那么就让梦之队不要打平局呗?让他赢一场,其它的都输掉,这样总分只有3分。
但是这样也不行,因为梦之队输的时候,和他比赛的那个队伍就赢了,这样就无法保证梦之队赢的次数最多了
那就让梦之队赢2局,其他的都赢1局?
这时,对于梦之队,得分为 3×2+1×(n3)+0×(n1)=n+3 3 × 2 + 1 × ( n − 3 ) + 0 × ( n − 1 ) = n + 3
对于被赢的队伍,得分为 0+3+(2n4)=2n1 0 + 3 + ( 2 n − 4 ) = 2 n − 1
对于其它的队伍,得分为 3+(2n3)=2n 3 + ( 2 n − 3 ) = 2 n
2n>n+3 2 n > n + 3 n>3 n > 3 ,由 2n1>n+3 2 n − 1 > n + 3 n>4 n > 4
也就是说当 5n 5 ≤ n 时,直接输出 n n 即可
那么当n=3时,手动尝试一下,就发现梦之队只能排在第一的位置
n=4 n = 4 时,由上述构造方法得到梦之队可以排在第二得位置,而无论我增加或者减少梦之队得胜利局数,都不能得到更优得解,所以梦之队得最靠后位置是 2 2
综上所述

ans={1n32n=4n5n

代码

//贪心、构造
#include <cstdio>
int main()
{
    int n;
    for(scanf("%d",&n);n;scanf("%d",&n))
    {
        if(n<=3)printf("1\n");
        else if(n==4)printf("2\n");
        else printf("%d\n",n);
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值