链接
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4164
题解
手动尝试一下,就发现
时,梦之队只能当第一
我们试图构造一种梦之队赢得次数最多,但是分数却很低的情况
如果让它赢一局,其它都赢零局的话,手算一下发现这样梦之队不仅不会排名靠后,而且会始终排第一
原因在于,如果其他队伍都赢0局,就意味着除了梦之队获胜的那一场,其它的比赛都是平局
这样再其它队伍得到1分的时候,梦之队也得到了1分,而么梦之队因为一开始得了3分,所以总分始终是最高的
那么就让梦之队不要打平局呗?让他赢一场,其它的都输掉,这样总分只有3分。
但是这样也不行,因为梦之队输的时候,和他比赛的那个队伍就赢了,这样就无法保证梦之队赢的次数最多了
那就让梦之队赢2局,其他的都赢1局?
这时,对于梦之队,得分为
对于被赢的队伍,得分为
对于其它的队伍,得分为
由
得
,由
得
也就是说当
时,直接输出
即可
那么当
时,手动尝试一下,就发现梦之队只能排在第一的位置
当
时,由上述构造方法得到梦之队可以排在第二得位置,而无论我增加或者减少梦之队得胜利局数,都不能得到更优得解,所以梦之队得最靠后位置是
综上所述
代码
//贪心、构造
#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;
}