题解: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的主要内容,如果未能解决你的问题,请参考以下文章

解题报告: ABC 165C

题解Atcoder ABC295 A-G

ABC291题解(D-G)

abc252_d Distinct Trio 题解

LeetCode 165. 比较版本号c++/java详细题解

AT_abc106_d [ABC106D] AtCoder Express 2 题解