CF1650B Solution

  1. 1. Solution

Solution

显然在范围区间内变化大的是右边的 (为什么?)。

但也会出现 变化的情况。那么,最大值就有两种情况了(即两个大幅度的变化区间,下见图片):

  1. 在小于等于 的数中除以 的余数最大。

那么,若存在情况 1,则取最大值。若不存在,直接取情况 2 即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<bits/stdc++.h>
using namespace std;

int main()
{
int t;
cin>>t;
while(t--)
{
int l,r,a;
cin>>l>>r>>a;
int x=r/a*a-1;
if(x>=l) cout<<max(x%a+x/a,r%a+r/a)<<endl;
else cout<<r%a+r/a<<endl;
}
return 0;
}