1 条题解
-
1
我叶梓楣也要成为duck大魔王!!!(完)
题意
Eve 准备了 a1+a2+a3+a4a1+a2+a3+a4 个笑话,按类型分组如下:
- 类型 1:Alice 和 Bob 都喜欢;
- 类型 2:Alice 喜欢,但 Bob 不喜欢;
- 类型 3:Bob 喜欢,但 Alice 不喜欢;
- 类型 4:Alice 和 Bob 都不喜欢。
给了四种类型的数量 如果心情小于0 那么就有人走 问有人离开之前 最多能说多少场
思路:
- 先讲完所有类型 1 的笑话,此时 Alice 与 Bob 的心情值都提升到 **
a1,计入答案 `ans = a1 - 类型 2 与类型 3 可以成对出现(顺序选好即可),互相抵消对心情的影响,每对贡献 2 个笑话:
pair = min(a2, a3),答案加2 * pair,讲完后两人心情仍是a1。 - 余下的只会是单边喜欢的笑话 **
diff = |a2 - a3|(只会影响其中一人)和都不喜欢的类型 4(同时影响两人)。- 无论是这一剩余的单边笑话还是类型 4,都会让“较弱”的那位心情减 1。
- 由于此时两人的可用“缓冲”正好是
a1,因此还能再承受至多a1次这样的削弱保持心情非负,再多一次(第a1 + 1次)会让那位心情变成-1,也计数但演出结束。 - 所以这一阶段最多还能讲 **
a1 + 1个笑话,而可供使用的笑话总数是diff + a4。取二者较小并加入答案。
- 特殊情况:若
a1 == 0,无法先建立缓冲,无论讲哪种笑话都会立刻让某人心情为负,因此答案恒为 1(至少能讲出一则)。
#include<bits/stdc++.h> using namespace std; #define int long long #define endl '\n' #define EPS 1e-8 #define lowbit(x) x&(-x) const int inf = 0x3f3f3f3f; typedef pair<int,int> pii; void solve() { int a,b,c,d; cin>>a>>b>>c>>d; if(a==0) { cout<<1<<endl; return ; } int ans=0; ans+=a; ans+=2*min(b,c); ans+=min(a+1,abs(b-c)+d); cout<<ans<<endl; } signed main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int t=1; cin>>t; while(t--) { solve(); } return 0; }
- 1
信息
- ID
- 1219
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 135
- 已通过
- 28
- 上传者