Codeforces Round #570 (Div. 3) C. Computer Game(二分)

https://codeforces.com/contest/1183/problem/C

题目大意:

给定k的总时间,必须玩n局,每一局正常消耗a时间,插电玩消耗b时间

问我们在能>0的剩余时间内玩完这n局下的可以最大消耗a时间的局数是多少?

注意:剩余时间>0并且玩完了这n局才算整整意义上赢了。否则输出-1。
input 
6
15 5 3 2
15 5 4 3
15 5 2 1
15 5 5 1
16 7 5 2
20 5 7 3
output 
4
-1
5
2
0
1
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;
const LL MAXN=1e18;
const LL N=200200,M=2002;
LL k,n,a,b,ans=0;
bool check(LL x)
{
    //不能超过n次,也不能低于0次
    if((x*a+(n-x)*b)<k) return true;
    else return false;
}
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    LL T=1;
    cin>>T;
    while(T--)
    {
        ans=0;
        cin>>k>>n>>a>>b;
        if(n*b>=k) cout<<"-1"<<endl;
        //else if(n*a<k) cout<<n<<endl;
        else
        {
            LL l=0,r=n;//最大的次数就是r这么多
            while(l<=r)
            {
                LL mid=(l+r)/2;
                //cout<<mid<<endl;

                if(check(mid)==true)//满足条件,往大了找
                {
                    ans=max(ans,mid);
                    l=mid+1;
                }
                else r=mid-1;//不满足,往小了找
            }
            cout<<ans<<endl;
        }
    }
    return 0;
}
posted @ 2022-10-07 20:33  Vijurria  阅读(13)  评论(0编辑  收藏  举报