zoukankan      html  css  js  c++  java
  • 【t083】买票

    这里写图片描述
    【题目链接】:http://noi.qz5z.com/viewtask.asp?id=t083

    【题解】

    可以看一下;
    钱数很小;
    最大才10000;
    即使每张票都是1元;
    最多也只能买10000张票;
    于是考虑二分最后连续的票数m;
    如果存在连续m张票的和小于等于f;
    就增大m;否则减小m;
    这里判断有没有m张票的和小于等于f需要趋近于O(N)的复杂度;
    所以最坏就是
    O(log2(f)*N)吧.
    实际情况更好一点吧。因为过了;

    【完整代码】

    #include <cstdio>
    #include <algorithm>
    
    using namespace std;
    
    #define rei(x) scanf("%d",&x)
    #define rep1(i,x,y) for (int i = x;i <= y;i++)
    
    const int MAXN = 1e6;
    
    int n,f;
    int a[MAXN],pre[MAXN];
    
    bool ok(int num)
    {
        for (int l = 1,r = num;r<=n;l++,r++)
        {
            int t = pre[r]-pre[l-1];
            if (t<=f)
                return true;
        }
        return false;
    }
    
    int main()
    {
        //freopen("F:\rush.txt","r",stdin);
        rei(n);rei(f);
        rep1(i,1,n)
        {
            rei(a[i]);
            pre[i] = pre[i-1]+a[i];
        }
        int l = 0,r = min(f,n),ans = 0;
        while (l <= r)
        {
            int m = (l+r)>>1;
            if (ok(m))
            {
                ans = m;
                l = m+1;
            }
            else
                r = m-1;
        }
        printf("%d
    ",ans);
        return 0;
    }
    
  • 相关阅读:
    工厂模式
    Bootstrap 日历
    处理乱码
    Eclipse常用快捷键
    C#_XML与Object转换
    jQuery选择函数
    Bootstrap如何正确引用字体图标
    js上拉加载、下拉刷新的插件
    js通用对象数组冒牌排序
    关于js跨域
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7626690.html
Copyright © 2011-2022 走看看