ABC165-D 備忘録 p.30
itsukiです。
AtCoderの過去問を解いた様子です。解説記事ではありません。
考察の流れ
f ( A * x / B ) - A * f ( x / B ) なので、
x が B 未満なら、" - A * f ( x / B )" がゼロになる
x が B 以上だと、" - A * f ( x / B )" が効いてしまう
いくら x を大きくして左側の項 " f ( A * x / B ) " を大きくしても、
x を B 以上にするのは逆効果
B 未満で最大の x を探す
#include <stdio.h>
#define MIN(x,y) ((x)<(y)?(x):(y))
typedef long long ll;
int main(){
ll a,b,n,x;
scanf("%lld%lld%lld",&a,&b,&n);
x = MIN(b-1, n);
printf("%lld\n", (ll)(a*x/b)-a*(ll)(x/b));
return 0;
}
まとめ
・数学(?)なのに解いてて楽しい!!ってなった
・こういう問題をスラスラ解けるようになりたい
引き続き、のんびり精進します。
この記事が気に入ったらサポートをしてみませんか?