首页 > 求大佬解释网易这道题二分法如何理解
头像
主理想整环
编辑于 2020-08-10 11:04
+ 关注

求大佬解释网易这道题二分法如何理解

有三种难度的题目分别为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) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐