見出し画像

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;
}

まとめ

・数学(?)なのに解いてて楽しい!!ってなった
・こういう問題をスラスラ解けるようになりたい

引き続き、のんびり精進します。

#備忘録 #AtCoder #ABC #競技プログラミング #競プロ #C言語

この記事が気に入ったらサポートをしてみませんか?