CF 535C Tavas and Karafs

题目大意:给你一个无限长的等差数列,每次给一个起点L,可以吃T轮,每可以把M个数吃一口(-1),问最大的R使得区间[L,R]被吃完

思路:显然给定一个区间[L,R]后很容易贪心出能不能被吃完,并且发现该性质有单调性也就是如果[L,R]可以吃完,那[L,R-1]也可以,且存在最大的R使得[L,R+1]不满足条件,于是二分一下就可以了

 1 #include<iostream>
 2 #include<cstdio>
 3 #define ll long long
 4 using namespace std;
 5 ll a,b,n,l,t,m,rr,lr;
 6 int check(ll k)
 7 {
 8     ll f = a + (l - 1) * b,rrr = a + (k - 1) * b,su=((f+rrr)*(k-l+1))>>1;
 9     if(t*m<su || rrr > t)return 0;
10     else return 1;
11 }
12 int main()
13 {
14     cin>>a>>b>>n;
15     for(int i=1;i<=n;i++)
16     {
17         cin>>l>>t>>m;
18         if(a+b*(l-1) > t)
19         {
20             puts("-1");
21             continue;
22         }
23         lr = l;
24         rr = l + t+10;
25         while(lr<rr)
26         {
27             int mid = (lr + rr+ 1) >> 1;
28             if(check(mid))lr=mid;else rr=mid-1;
29         }
30         cout<<lr<<endl;
31     }
32     return 0;
33 }
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-07-08
  • 2021-07-18
  • 2022-03-06
  • 2021-04-13
  • 2021-10-15
  • 2022-01-07
猜你喜欢
  • 2022-01-07
  • 2022-02-07
  • 2021-12-20
  • 2022-12-23
  • 2021-11-20
  • 2021-12-30
  • 2021-07-27
相关资源
相似解决方案