Stand-up Comedian
题面翻译
题目背景
Eve 是个单口相声新手。她的第一场表演聚集了总计 2 2 2 个观众:Alice 和 Bob。
Eve 准备了 a 1 + a 2 + a 3 + a 4 a_1+a_2+a_3+a_4 a1+a2+a3+a4 个相声表演节目。 a i a_i ai 表示第 i i i 类相声的数目,每类的的特征如下:
-
Alice 和 Bob 都喜欢这类相声。
-
Alice 喜欢,Bob 不喜欢。
-
Bob 喜欢,Alice 不喜欢。
-
Alice 和 Bob 都不喜欢这类相声。
一开始,两位观众的心情都为 0 0 0。
当一位观众听到他喜欢的相声表演时心情会加 1 1 1,当听到的是自己不喜欢的相声时,心情减 1。
当某位观众心情严格小于 0 0 0 时,这位观众会离场。只要有一位这样的观众离场,Eve 会特别伤心并且结束整个表演。若演完了所有节目,也会结束表演。
求某种安排表演顺序的方式,使得 Eve 在结束表演前能表演的节目最多。输出最多能表演的节目数。
译者注:若演完某个节目有观众退场,这个节目也算在总数之中。
输入
第一行一个整数 t ( 1 ≤ t ≤ 1 0 4 ) t(1\le t\le 10^4) t(1≤t≤104) 表示数据组数。
对于每族数据,一行四个整数 a 1 , a 2 , a 3 , a 4 ( 0 ≤ a 1 , a 2 , a 3 , a 4 ; a 1 + a 2 + a 3 + a 4 ≥ 1 ) a_1,a_2,a_3,a_4(0\le a_1,a_2,a_3,a_4;a_1+a_2+a_3+a_4\ge 1) a1,a2,a3,a4(0≤a1,a2,a3,a4;a1+a2+a3+a4≥1),每类相声节目的数目。
输出
对于每组数据一个整数表示 Eve 在结束表演前最多能表演的节目数。
样例 #1
样例输入 #1
4
5 0 0 0
0 0 0 5
2 5 10 6
3 0 0 7
样例输出 #1
5
1
15
7
1.都加一
2.一个加一
3.一个减一
4.都减一
所以我们分析,第一种可以无脑加.23的情况会取最小然后乘以2因为相同的部分即小的部分会彼此抵消,第三部要看看a+1
和abs(b-c)+d
最小值
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
int a,b,c,d,t,num,x,y;
int main()
{
cin>>t;
while(t--){
num=0;
cin>>a>>b>>c>>d;//读入
if(a==0){//特判
cout<<1<<endl;
continue;
}
num+=a;//无脑加
num+=min(b,c)*2;//第二部分
num+=min(a+1,abs(b-c)+d);//第三部分
cout<<num<<endl;
}
return 0;
}