洛谷 P1326 足球
比较明显的分类讨论题
考虑最大的得分
首先我们尽量要多赢,所以干脆一场里把输掉的球全部输掉,其他场就只赢一球,这样显然最优
然后注意三点
- 我们的赢球数够不够每场都赢一球
- 如果赢球数有多,有没有可能每局都赢
- 有没有可能输球数为0,最后一场平局
考虑最小的得分
我们要尽量多输球,再不济也要平局
但是和之前不一样的是,平局较多是可以接受的,两场平局优于一胜一负
我们换思路讨论
当赢球数大于输球数时,我们要只赢一场,剩下的全部输掉或是平掉
反过来时,我们保留上一种情况,另考虑一局都不赢,只平局或输的情况,取最小值
[code]
#include<bits/stdc++.h>
using namespace std;
int read(){
int x=0; char c=getchar(); int flag=1;
while(!isdigit(c)) { if(c=='-') flag=-1; c=getchar(); }
while(isdigit(c)) { x=((x+(x<<2))<<1)+(c^48); c=getchar(); }
return x*flag;
}
long long s,t,n;
int work(int x,int y){
if(x>y) return 3;
if(x==y) return 1;
return 0;
}
signed main(){
while(scanf("%lld%lld%lld",&s,&t,&n)!=EOF){
if(s<n){
printf("%lld ",s*3+n-s-1+work(0,t));
}else{
printf("%lld ",(n-1)*3+work(s-n+1,t));
}
if(s>t){
printf("%lld\n",3+max(n-1-t,0ll));
}else{
printf("%lld\n",min(3+max(n-1-t,0ll),max(0ll,n-t+s)));
}
}
return 0;
}