zoukankan      html  css  js  c++  java
  • Codeforces 535C

    535C - Tavas and Karafs

    思路:对于满足条件的r,max(h,hl+1 ,hl+2 ,......,hr )<=t(也就是hr<=t)且∑hi<=t*m。所以通过这个条件二分找出最大的r。

    二分的下界为1,上界为使得hi等于t的i(hi=t    ==>    a+(i-1)*b=t    ==>    i=(t-a)/b+1)

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define pb push_back
    #define mem(a,b) memset((a),(b),sizeof(a))
    const int N=1e6+5;
    int a,b,n;
    int l,t,m;
    ll cal(int i){return (ll)a+(ll)(i-1)*b;}
    
    bool check(ll r)
    {
        if((cal(l)+cal(r))*(r-l+1)/2>(ll)m*t)return false;
        return true;
    }
    
    int main()
    {
        
        scanf("%d%d%d",&a,&b,&n);
        
        while(n--)
        {
            scanf("%d%d%d",&l,&t,&m);
            if(cal(l)>t)printf("-1
    ");
            else
            {
                ll L=l,R=(t-a)/b+1,m=(L+R)>>1;
                while(L<=R)
                {
                    if(check(m))L=m+1;
                    else R=m-1;
                    m=(L+R)>>1;
                }
                printf("%d
    ",m); 
            }
        }
        return 0;
    }
  • 相关阅读:
    存储过程
    .Net经典面试题
    《锋利的Jquery》
    WPF-1
    ios-5-类别和协议
    ios-4-创建单例模式
    ios-3-简单内存管理
    ios-2
    ios -1
    <<ASP.NET MVC4 Web编程>>笔记
  • 原文地址:https://www.cnblogs.com/widsom/p/7357000.html
Copyright © 2011-2022 走看看