博客
关于我
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/

    你可能感兴趣的文章
    setup facatory9.0打包详细教程(含静默安装和卸载)
    查看>>
    java.security.InvalidKeyException: Illegal key size
    查看>>
    Linux kernel pwn --- CSAW2015 StringIPC
    查看>>
    编译android源代码(aosp)
    查看>>
    IDEA 找不到 Persistence窗口解决办法
    查看>>
    C++ Primer Plus读书笔记:循环读取(错误处理)
    查看>>
    伴随矩阵和逆矩阵的关系证明
    查看>>
    Form窗体属性
    查看>>
    解决Eclipse加载图片或网页出现404错误
    查看>>
    vue 错误收集
    查看>>
    Java选择排序算法实现
    查看>>
    00010.02最基础客户信息管理软件(意义类的小项目,练习基础,不涉及数据库)
    查看>>
    00013.05 字符串比较
    查看>>
    IEDA全局搜索快捷键 Ctrl+shift+F无效的原因、 eclipse:Ctrl + h 进行全局搜索
    查看>>
    LeetCode: 138. 复制带随机指针的链表(中等)[DFS, 迭代]
    查看>>
    Effective Java 读书笔记
    查看>>
    SpringBoot使用@Email报错误
    查看>>
    Rabbitmq的内存磁盘监控
    查看>>
    访问servlet时弹出文件下载框解决方法
    查看>>
    IDEA-@Slf4j和log标签&@Data(Lombok)无效
    查看>>