题解:ABC165 D
Posted tlx-blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解:ABC165 D相关的知识,希望对你有一定的参考价值。
前两题太水,不写了(其实都 (WA) 了一次)。
很多人打表找规律,可我好懒啊,只能尝试证明一下了。
题意:求当 (xleq N) 时,(leftlfloordfrac{Ax}{B} ight floor-Aleftlfloordfrac{x}{B} ight floor) 的最小值。
比赛的时候理解错题意了......
先设:(x<B)。
考虑:
[leftlfloordfrac{Ax}{B}
ight
floor=leftlfloor A(dfrac{x}{B}-leftlfloordfrac{x}{B}
ight
floor)
ight
floor+Aleftlfloordfrac{x}{B}
ight
floor
]
至于为什么,您去想吧......
理解起来很简单。
那么我们要求的式子即为:
[leftlfloor A(dfrac{x}{B}-leftlfloordfrac{x}{B}
ight
floor)
ight
floor
]
的最小值。
显然最大化
[dfrac{x}{B}-leftlfloordfrac{x}{B}
ight
floor
]
即可。
那么当 (x) 最大时最大。
那么当 (x<(k+1)B) 时同理,由于整数部分在 (dfrac{x}{B}-leftlfloordfrac{x}{B} ight floor) 是被抵消的。
那么当 (x<B) 是,带入 (x) 即可,否则直接取 (b-1) 即可。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<stack>
#include<queue>
using namespace std;
#define read(x) scanf("%d",&x)
#define readl(x) scanf("%lld",&x)
#define ll long long
#define ull unsigned long long
ll a,b,n;
ll x;
int main()
{
cin>>a>>b>>n;
if(n<b) x=n;
else x=b-1;
cout<<floor((double)a*(double(x)/b-floor(double(x)/b)))<<endl;
return 0;
}
以上是关于题解:ABC165 D的主要内容,如果未能解决你的问题,请参考以下文章