美食家 80 pts 球条

WA的是TEST 1 和 2

题目描述

时间: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≤�≤104 1≤t≤104

0≤�1,�2,�3,�4≤1080≤a1​,a2​,a3​,a4​≤108

�1+�2+�3+�4≥1a1​+a2​+a3​+a4​≥1

#include <bits/stdc++.h>
using namespace std;
int t,a,b,c,d,ans,e,f,k1,k2;
int main(){
  cin>>t;
  while(t--){
    cin>>a>>b>>c>>d;
    if(a==0){
      cout<<1<<endl;
      continue;
    }
    k1=a,k2=a,ans=a;
    int da=min(b,c);
    b-=da;
    c-=da;
    ans+=2*da;
    if(b>k1){
      ans+=k1;
      k1=0;
    }else{
      ans+=b;
      k1-=b;
    }
    if(c>k2){
      ans+=k2;
      k2=0;
    }else{
      ans+=c;
      k2-=c;
    }
    if(min(k1,k2)>d){
      cout<<ans+d<<endl;
    }else{
      cout<<ans+min(k1,k2)+1<<endl;
    }
  }
  
  return 0;
}
1 个赞

ans=a+2*b+min(a+1,c-b+d);

谢谢老师