【FJSC2012】足球
我们当中有很多热爱中国足球的同学,我们都知道中超(中国足球超级联赛)的规则:
一场比赛中,若获胜则获得3的积分,若打平则获得1分,若失败获得0积分。
这个问题很简单,假设N轮比赛中你一共攻入S个球,丢掉T个球,那么你可能获得的最大得分和最小得分是多少
刷数论题的时候刷到这个了……
这真的能叫数论题吗?不就是个裸的贪心
考虑把最大得分和最小得分分开讨论:
最大得分
- 进球数还没有总场次多
显然应该把所有的进球平摊到每一场使自己胜场尽量多
即让所有丢球集中到同一天
答案=进球数3+(剩下的场数-1)1
需要注意一点,如果没有丢球,答案需要加一,因为不会存在负场
- 进球数多于胜场
考虑两种方案:
一种是把丢球全部安排到同一天
另一种是进球数可以做到全胜,那就全胜
同样的,如果最后一局不会负,那就平局,加一分
最小得分
- 如果进球数已经多余了丢球数
因为至少都肯定会赢一局,所以干脆把所有进球集中到这一天,看有多少平局
否则,我们就比较一下赢了一局,剩下的全输或平局,以及全是平局的分数那个更低就好了
代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll s,t,n;
int main()
{
while(scanf("%lld%lld%lld",&s,&t,&n)!=EOF)
{
ll ans1=0,ans2=0;
if(s<n)
{
ans1=3*s+n-s-1;
if(!t) ans1++;
}
else
{
ans1=3*max(n-1,min(n,s-t));
if(n-s+t==1) ans1++;
}
if(s>t) ans2=3+max(0LL,n-t-1);
else ans2=min(3+max(0LL,n-t-1),max(n-t+s,0LL));
printf("%lld %lld\n",ans1,ans2);
}
return 0;
}
$$\text{这里是tqr,联系我请加QQ735748368}$$