[codeforces 1371C] A Cookie for You 烦人的if,else

Codeforces Round #654 (Div. 2)   参与排名人数14349   本场比赛主要心思放在观摩高手如何打比赛,发现初中生真的很厉害。

[codeforces 1371C]    A Cookie for You   烦人的if,else

总目录详见https://blog.csdn.net/mrcrack/article/details/103564004

在线测评地址http://codeforces.com/contest/1371/problem/C

Problem Lang Verdict Time Memory
C - A Cookie for You GNU C++17 Accepted 31 ms 200 KB

题目大意:给a块vanilla cookies,b块chocolate cookies,n个第一类客人,m个第二类客人,

若:轮到第一类客人时,若a>b,客人吃vanilla cookies,若a<=b,客人吃chocolate cookies.

轮到第二类客人时,若a>b,客人吃chocolate cookies,若a<=b,客人吃vanilla cookies.

若轮到客人没有相应cookies吃时,要生气。

问怎么安排客人吃cookies的顺序时,使客人都能吃上,输出Yes,若怎么安排,客人都吃不上,输出No.

样例模拟如下:

发现,需先处理成a==b,之后,第一类人可以交替消耗a,b,而第二类人,只能消耗b.故先安排第二类人吃,再安排第一类人吃。

2 2 1 2
Yes

a b n m
2 2 1 2
因a==b,先处理m,处理之后
a b n m
2 0 1 0
再处理n,处理之后
a b n m
1 0 0 0
输出Yes


0 100 0 1
No


a b   n m
0 100 0 1
因a

AC代码如下:

#include 
#define LL long long
int main(){
	int t;
	LL a,b,n,m,c;
	scanf("%d",&t);
	while(t--){
		scanf("%lld%lld%lld%lld",&a,&b,&n,&m);
		if(a>b){//先消耗多的a
			c=a-b;//争取处理成a==b
			if(n>=c)n-=c,a=b;
			else n=0,a-=n;//nb){//处理后,还是a>b
				if(b>=m)printf("Yes\n");
				else printf("No\n");
			}else if(a==b){
				b-=m;//先处理第二类人
				if(b<0){printf("No\n");continue;}
				n-=a+b;//再处理第一类人
				if(n>0)printf("No\n");
				else printf("Yes\n");
			}
			
		}else if(a=c)n-=c,b=a;
			else n=0,b-=n;//n=m)printf("Yes\n");
				else printf("No\n");
			}else if(a==b){
				b-=m;//先处理第二类人
				if(b<0){printf("No\n");continue;}
				n-=a+b;//再处理第一类人
				if(n>0)printf("No\n");
				else printf("Yes\n");
			}
		}else if(a==b){
			b-=m;//先处理第二类人
			if(b<0){printf("No\n");continue;}
			n-=a+b;//再处理第一类人
			if(n>0)printf("No\n");
			else printf("Yes\n");
		}
	}
	return 0;
}

总结,明知此题考察if,else,但是编写过程中,考虑情况颇多,头皮发麻。

你可能感兴趣的:(codeforces)