zoukankan      html  css  js  c++  java
  • 3.23 每日一题题解

    小明爱玩牌

    题目链接:

    涉及知识点:

    • 思维/二分

    solution:

    • 假设x就是我们要求的答案,我们知道我们一定可以组合出x - 1套牌,那么x + 1 套牌我们是组合不出来的

    • 假如 我们组合出 x 套牌,那么如果 x > m 的话,那么我们就首先把 m 个万能牌用到,如果x < m 的话,我们最多需要用到x张万能牌,所以ans = min(x,m)

    • 所以,假如我们能组合出x套牌,那么if(a[i] > x),我们就不需要把万能牌用到a[i] > x上,if(a[i] < x),那么我们就需要用到x - a[i]张万能牌,当然我们的ans -= x - a[i]

    • 显然,如果到最后我们的ans大于0,则表示我们的万能牌还有剩余,或者是万能牌的个数恰好为0,则我们可以组成x套牌

    • 由于本题没有题目链接,大家可以找雒东月要数据,数据的截止日期4月1日

    std:

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 1e5+10;
    
    int n,m;
    int a[N];
    int l = 0;
    int r = 1e9;
    bool check(int x)
    {
        int ans = min(m,x);
        
        for (int i = 1; i <= n; i ++ )
        {
            if(a[i] < x)
            {
               ans -= x - a[i];
            }
            if(ans < 0)
            {
                return false;
            }
        }
        return true;
    }
    
    int main()
    {
        int res = 0;
    //    freopen("in.txt", "r", stdin);
        scanf("%d%d",&n,&m);
        for (int i = 1 ; i <= n ; i ++ ) scanf("%d",&a[i]);
        while(l <= r)
        {
            int mid = (l+r)/2;
            if(check(mid))
            {
                res = mid;
                l = mid+1;
            }
            else r = mid-1;
        }
        
        cout << res << endl;
        
        return 0;
    }
    
  • 相关阅读:
    DOM 与BOM
    尝试json文件导入数据
    js事件监听简介
    js事件简介
    js中的for语句简介
    作业练习正则表达式
    简单总结-BOM
    web前端第三次作业em,fr,rem,px简单解释及颜色表
    web第二次作业练习grid
    web前端课程第一次作业----注册页面代码(2018-9-14)
  • 原文地址:https://www.cnblogs.com/QFNU-ACM/p/12552211.html
Copyright © 2011-2022 走看看