Fair Distribution(2021 ZJCPC F)

传送门

题目大意

t组询问,每组询问有n个机器人和m块能量棒,定义合理分配当且仅当mn的倍数。现在你有两种操作:1使n的大小减少12使m的大小增加1。每次操作都要消耗1元,问达到合理分配的最小花费是多少。(1t1000,1n,m108)

思路

这道题一眼看过去想到的是BFS,但是数据范围太大了,即使不MLE也会T,于是只好换个方向入手。首先很容易发现的是当mn是答案就是nm,然后我们看一下把n减小a(0a<n)的情况,这时候m就需要增加到mna(na),即m需要增加mna(na)m,现在令i=na(1in),于是m就需要增加mi(i)m,我们把上取整转化为下取整,m的增加量就变成了m+i1iim=(m1i+1)im。于是总花费就是(m1i+1)im+ni=m1iim+n,而nm是一个定值,所以我们只需要知道m1ii的最小值即可,而这个可以用整除分块来做,于是问题就被解决了。

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int _;
    scanf("%d",&_);
    while(_--)
    {
        int n,m;
        scanf("%d%d",&n,&m);
        if(n>=m){printf("%d\n",n-m);continue;}
        int minn=1000000000;
        for(int i=1;i<=n;i++)
        {
            minn=min(minn,(m-1)/i*i);
            i=(m-1)/((m-1)/i);
        }
        printf("%d\n",n-m+minn);
    }
    return 0;
}

__EOF__

本文作者Jerry-Black
本文链接https://www.cnblogs.com/Jerry-Black/p/15948675.html
关于博主:小蒟蒻一只( ̄^ ̄)ゞ
版权声明:转载请注明来源哟~ QAQ
声援博主:UP UP UP !!!
posted @   Jerry_Black  阅读(95)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示