Solution
显然在范围区间内变化大的是右边的 (为什么?)。
但也会出现 变化的情况。那么,最大值就有两种情况了(即两个大幅度的变化区间,下见图片):
- 在小于等于 的数中除以 的余数最大。
- 数 。
那么,若存在情况 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; }
|