博客
关于我
Educational Codeforces Round 98B——Toy Blocks
阅读量:646 次
发布时间:2019-03-15

本文共 1549 字,大约阅读时间需要 5 分钟。

为了解决这个问题,我们需要找到最小的额外木块数,使得无论选择哪一个盒子进行操作,剩下的n-1个盒子的木块数量都相等。

方法一:直接计算

我们可以通过以下步骤来解决这个问题:

  • 计算总数和最大值:首先计算所有盒子的木块总数sum和当前最大值MAX。
  • 计算所需每个盒子的最小数量:为了确保无论选择哪个盒子进行操作,剩下的n-1个盒子的数量都相等,我们需要找到一个数cnt,使得当加上cnt后,所有盒子的总数可以被n-1整除,并且这个数量至少不小于MAX。
  • 计算最小的额外木块数:使用公式 cnt = max(ceil(sum / (n-1)), MAX) * (n-1) - sum,其中 ceil(sum / (n-1)) 是将总数sum分配到n-1个盒子中的最小平均值,而MAX则是当前的最大值,确保分配后的数量至少不小于最大值。
  • 方法二:二分枚举

    我们可以通过二分枚举的方法来解决这个问题:

  • 定义枚举范围:从当前最大值MAX开始,设定一个较高的上界。
  • 二分查找最小值:在枚举范围内找到最小的mid,使得 mid * (n-1) >= sum
  • 计算结果:当找到满足条件的mid时,计算所需的额外木块数为 mid * (n-1) - sum
  • 代码

    #include 
    #include
    #include
    using namespace std;int main() { const int INF = 1e9; int T; scanf("%d", &T); while (T--) { int n; scanf("%d", &n); vector
    a(n); ll sum = 0; for (int i = 0; i < n; ++i) { ll x; scanf("%lld", &x); sum += x; } ll MAX = *max_element(a.begin(), a.end()); // 方法一 ll cnt = (sum + n - 2) / (n - 1); cnt = max(cnt, MAX) * (n - 1) - sum; cout << cnt << endl; // 方法二 ll l = MAX; ll r = 2 * INF; ll ans = l; while (l <= r) { ll mid = (l + r) >> 1; if (mid * (n - 1) >= sum) { ans = mid; r = mid - 1; } else { l = mid + 1; } } cout << (ans * (n - 1)) - sum << endl; }}

    解释

    • 方法一:通过直接计算满足条件的最小额外数量,确保结果是可直接获取的。
    • 方法二:通过二分查找来确定最小的可行值,确保在较大数据规模下依然高效。

    这两种方法各具特色,适用于不同的场景,但都能有效解决问题。

    转载地址:http://tffmz.baihongyu.com/

    你可能感兴趣的文章
    Hadoop学习笔记—Yarn
    查看>>
    Jenkins - 部署在Tomcat容器里的Jenkins,提示“反向代理设置有误”
    查看>>
    wxWidgets源码分析(3) - 消息映射表
    查看>>
    wxWidgets源码分析(5) - 窗口管理
    查看>>
    wxWidgets源码分析(8) - MVC架构
    查看>>
    wxWidgets源码分析(9) - wxString
    查看>>
    [梁山好汉说IT] 梁山好汉和抢劫银行
    查看>>
    [源码解析] 消息队列 Kombu 之 基本架构
    查看>>
    [源码分析] 消息队列 Kombu 之 启动过程
    查看>>
    wx.NET CLI wrapper for wxWidgets
    查看>>
    Silverlight for linux 和 DLR(Dynamic Language Runtime)
    查看>>
    ASP.NET MVC Action Filters
    查看>>
    Powershell中禁止执行脚本解决办法
    查看>>
    OO_Unit2 多线程电梯总结
    查看>>
    git clone 出现fatal: unable to access ‘https://github 错误解决方法
    查看>>
    04_Mysql配置文件(重要参数)
    查看>>
    python 加密算法及其相关模块的学习(hashlib,RSA,random,string,math)
    查看>>
    JavaSE总结
    查看>>
    手动造轮子——基于.NetCore的RPC框架DotNetCoreRpc
    查看>>
    Python IO编程
    查看>>