7. 美食家 Time Limit Exceeded 60 分

题目描述

时间:1s 空间:256M

题目描述

老六和老七都是有名的美食家,你则是有名的大厨,你的任务是想办法让他们尽可能地多吃你做的菜。

一开始,老六和老七的开心度为0,如果某位美食家喜欢这道菜,那他的开心度+1,如果不喜欢,那他的开心度-1.

你一道道地上菜,你上一盘,老六和老七尝一盘,一旦有某个美食家开心度 < 0,那你就不能继续上菜了。

你提前准备好了 a + b + c + d 盘菜,代表:

  • 老六喜欢,老七也喜欢的菜有a盘;
  • 老六喜欢,老七不喜欢的菜有b盘;
  • 老六不喜欢,老七喜欢的菜有c盘;
  • 老六不喜欢,老七不喜欢的菜有d盘;

可以知道上菜顺序不一样,最终吃的盘数也可能不一样。请输出在最优的安排下你最多能上几盘菜。

输入格式

第一行一个整数 t 表示数据组数。

对于每组数据,一行四个整数 a b c d。

输出格式

对于每组数据一个整数表示你最多能上几盘菜。

样例输入

4
5 0 0 0
0 0 0 5
2 5 10 6
3 0 0 7

样例输出

5
1
15
7

约定

1≤𝑡≤10^4

0≤𝑎1,𝑎2,𝑎3,𝑎4≤10^8

𝑎1+𝑎2+𝑎3+𝑎4≥1

错误代码:
#include<bits/stdc++.h>
using namespace std;
int m;
int main(){
cin>>m;
while(m–){
int a,b,c,d,cn=0,l,q;
cin>>a>>b>>c>>d;
cn=a;
l=a;
q=a;
while(1){
if(q&&b){
b–;
l++;
q–;
cn++;
}else if(l&&c){
c–;
l–;
q++;
cn++;
}else{
break;
}
}
while(l>=0&&q>=0&&d){
cn++;
l–;
q–;
d–;
}
if((q>=0&&b)||(l>=0&&c)){
cn++;
}
cout<<cn<<endl;
}
return 0;
}

更好的观感

#include<bits/stdc++.h>
using namespace std;
int m;
int main(){
	cin>>m;
	while(m--){
		int a,b,c,d,cn=0,l,q;
		cin>>a>>b>>c>>d;
		cn=a;
		l=a;
		q=a;
		while(1){
			if(q&&b){
				b--;
				l++;
				q--;
				cn++;
			}else if(l&&c){
				c--;
				l--;
				q++;
				cn++;
			}else{
				break;
			}
		}
		while(l>=0&&q>=0&&d){
			cn++;
			l--;
			q--;
			d--;
		}
		if((q>=0&&b)||(l>=0&&c)){
			cn++;
		}
		cout<<cn<<endl;
	}
	return 0;
}
``·