DIV + MOD-Codeforces
投稿日: 更新日:
問題
以下の関数を考えます。
は定数では以上以下の時が最大となるを求めてください。
解法
場合分けをして考えます。
の場合
の範囲での値は変化しないのでの取りうる最大の値を求めればよいです。その値はとなります。
の場合
をからへと変化させるとき、からへと変わる瞬間があります。この変化の直前にとなり最大値の候補の1つが得られます。
もう1つの候補はの時でが最大となる時なのでこの2つの候補を比較すれば良いです。
実装
#include <bits/stdc++.h>
using namespace std;
void solve(){
int l, r, a;
cin >> l >> r >> a;
if(l/a == r/a){
cout << r/a + r%a << endl;
}else{
int ans = max(r/a - 1 + a-1, r/a + r%a);
cout << ans << endl;
}
}
int main(){
int t;
cin >> t;
while(t--){
solve();
}
return 0;
}