CF1792B题解

题目传送门

思路

显然,当 a1=0a_1=0 时,输出 11(因为 a2,a3,a4a_2,a_3,a_4 连续的无论怎么取都只能取 11 个)。

如果 a1≠0a_1\not=0,因为题目说:

type 1: both Alice and Bob like them;

翻译过来就是第 11 种笑话,两个人都喜欢,所以讲第 11 种笑话是有益的。

所以,ansans 加上 a1a_1。

接着我们发现题目又说:

type 2: Alice likes them, but Bob doesn't;
type 3: Bob likes them, but Alice doesn't;

所以,讲一个第二种再讲一个第三种不会改编两人的辛勤。

这样,就把 ansans 加上第二种和第三种的最小值再乘 22,既 2×min⁡(a2,a3)2\times\min(a_2,a_3)。

现在,后三种的笑话还剩 a2+a3+a4−2×min⁡(a2,a3)a_2+a_3+a_4-2\times\min(a_2,a_3) 个,而两人的心情值为 a1a_1。

所以,最后结束是要么讲了 a1+1a_1+1 个后三种的笑话,两个人的心情值至少有一个人小于 00;要么是讲完了后三种笑话,结束表演。

则,ansans 加上 min⁡(a1+1,a2+a3+a4−2×min⁡(a2,a3))\min(a_1+1,a_2+a_3+a_4-2\times\min(a_2,a_3))。最后,输出 ansans。

代码

#include<bits/stdc++.h>
using namespace std;
int t,a1,a2,a3,a4;
int main(){
	scanf("%d",&t);
	while(t--){
		scanf("%d%d%d%d",&a1,&a2,&a3,&a4);
		if(a1==0){
			printf("1\n");
			continue;
		}
		int ans=a1;
		ans+=2*min(a2,a3);
		ans+=min(a1+1,a2+a3+a4-2*min(a2,a3));
		printf("%d\n",ans);
	} 
	return 0;
}
posted @ 2023-01-31 15:26  fengxiaoyi  阅读(30)  评论(0)    收藏  举报  来源