Fair Distribution
题目链接
题意 :
梦想王国里有n个机器人和m个能量棒。国王DreamGrid正试图对能量条进行公平分配。当且仅当能量条的数量是机器人数量的倍数时,才存在公平分配。
梦网拥有的唯一工具是一把强大的激光枪。每次他打开激光枪时,他正好可以做两件事中的一件。
创造一个新的能量条。
摧毁一个机器人。
为了避免机器人的灭绝,禁止摧毁所有的N个机器人。开启一次激光枪需要一美元。要求你找出进行公平分配的最小成本。
输入
有多个测试案例。输入的第一行包含一个整数T(1≤T≤1000),表示测试案例的数量。对于每个测试用例。
唯一一行包含两个整数n和m(1≤n,m≤108),表示机器人和能量条的初始数量。
输出
对于每个测试案例输出一行,包含一个整数,表示获得公平分配的最小成本。
思路 :
对于n>m的情况,答案显然为n − m(因为m%n == m,只能把m加到跟n一样大才行)
对于m<n的情况
AC代码 :
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int main(){
int T; cin>>T;
while(T--){
LL n, m; cin>>n>>m;
if(n > m)cout<<n-m<<"\n";
else{
LL ans = 1e9+10;
for(LL l = 1, r; l <= n; l = r+1){
r = min(n, (m-1)/((m-1)/l));
ans = min(ans, (m-1)/l*l);
}
cout<<ans+n-m<<"\n";
}
}
return 0;
}