洛谷 P1326 足球

题目链接

比较明显的分类讨论题

考虑最大的得分

首先我们尽量要多赢,所以干脆一场里把输掉的球全部输掉,其他场就只赢一球,这样显然最优

然后注意三点

  1. 我们的赢球数够不够每场都赢一球
  2. 如果赢球数有多,有没有可能每局都赢
  3. 有没有可能输球数为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
",3+max(n-1-t,0ll));
		}else{
		    printf("%lld
",min(3+max(n-1-t,0ll),max(0ll,n-t+s)));
		}
	}
    return 0;
}

原文地址:https://www.cnblogs.com/zzhzzh123/p/12235480.html