有三种难度的题目分别为Easy/Medium/Hard,现在你总共有E+EM+M+MH+H道题,各个字符串的含义如下:
- E表示有E道题目难度为Easy
- EM表示有EM道题目难度为Easy或者Medium
- M表示有M道题目难度为Medium
- MH表示有MH道题目难度为Medium或者Hard
- H表示有H道题目难度为Hard
你要用这些题目出尽量多的模拟赛,为了保证题目质量且含有一定的区分量,每场模拟赛需要包含Easy Medium Hard三种难度的题目各一道,求你最多能出多少场模拟赛
输入描述
- 一行五个整数,E,EM,M,MH,H
- 0 <= E+EM+M+MH+H <= 10^18
输出描述
- 输出你最多能出多少场模拟赛
示例1
输入
- 2 2 1 2 2
输出
- 3
说明
- 三组分别是
- E + EM + H
- E + MH + H
- EM + M + MH
解法
#include <bits/stdc++.h> using namespace std; typedef long long ll; int judge(ll E, ll EM, ll M,ll EH,ll H,ll mid) { if (H < mid) { EH -= (mid - H); if(EH < 0) return 0; } if (E < mid) { EM -= (mid - E); if(EM < 0) return 0; } if (EM + EH + M < mid) return 0; return 1; } int main() { ll E, EM, M, EH, H, l, r, mid, ans; cin >> E >> EM >> M >> EH >> H; l = 0, r = (E + EM + M + EH + H); ans = min(E, min(M, H)); while(l <= r) { mid = (l + r) >> 1LL; if(judge(E, EM, M, EH, H, mid)){ ans = max(ans, mid); l = mid + 1; } else r = mid-1; } cout << ans << endl; return 0;}
全部评论
(3) 回帖