[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

ProblemLangVerdictTimeMemory
C - A Cookie for You GNU C++17Accepted31 ms200 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<b先处理大的(b),n处理之后
a b   n m
0 100 0 1
再处理m,处理之后
a  b   n m
-1 100 0 0
输出No

12 13 25 1
No

a  b  n  m
12 13 25 1
因a<b先处理大的(b),n处理之后
a  b  n  m
12 12 24 1
再处理m,处理之后
a  b  n  m
11 12 24 0
再处理n,处理之后
a  b  n  m
11 11 23 0
a  b  n  m
11 10 22 0
a  b  n  m
10 10 21 0
a  b  n  m
10 9 20 0
a  b  n  m
9  9 19 0
......
a  b n  m
0  0 1 0
n未处理干净,输出No

AC代码如下:

#include <stdio.h>
#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;//n<c
			
			if(a>b){//处理后,还是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<b){//先消耗多的b
			c=b-a;
			if(n>=c)n-=c,b=a;
			else n=0,b-=n;//n<c
			
			if(a<b){//处理后,还是a<b
				if(a>=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,但是编写过程中,考虑情况颇多,头皮发麻。

"educational codeforces round 103 (rated for div. 2)"是一个Codeforces平台上的教育性比赛,专为2级选手设计评级。以下是有关该比赛的回答。 "educational codeforces round 103 (rated for div. 2)"是一场Codeforces平台上的教育性比赛。Codeforces是一个为程序员提供竞赛和评级的在线平台。这场比赛是专为2级选手设计的,这意味着它适合那些在算法和数据结构方面已经积累了一定经验的选手参与。 与其他Codeforces比赛一样,这场比赛将由多个问题组成,选手需要根据给定的问题描述和测试用例,编写程序来解决这些问题。比赛的时限通常有两到三个小时,选手需要在规定的时间内提交他们的解答。他们的程序将在Codeforces的在线评测系统上运行,并根据程序的正确性和效率进行评分。 该比赛被称为"educational",意味着比赛的目的是教育性的,而不是针对专业的竞争性。这种教育性比赛为选手提供了一个学习和提高他们编程技能的机会。即使选手没有在比赛中获得很高的排名,他们也可以从其他选手的解决方案中学习,并通过参与讨论获得更多的知识。 参加"educational codeforces round 103 (rated for div. 2)"对于2级选手来说是很有意义的。他们可以通过解决难度适中的问题来测试和巩固他们的算法和编程技巧。另外,这种比赛对于提高解决问题能力,锻炼思维和提高团队合作能力也是非常有帮助的。 总的来说,"educational codeforces round 103 (rated for div. 2)"是一场为2级选手设计的教育性比赛,旨在提高他们的编程技能和算法能力。参与这样的比赛可以为选手提供学习和进步的机会,同时也促进了编程社区的交流与合作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值