首页 > 其他分享 >CF844D Boxes And Balls

CF844D Boxes And Balls

时间:2024-08-10 13:28:52浏览次数:12  
标签:箱子 Balls int while long i64 Boxes CF844D

题意

有 \(n\) 个箱子、\(n\) 种颜色的球,第 \(i\) 种颜色的球有 \(w_i\) 个,最开始时都在第 \(1\) 个箱子中。

每次可以从有球的一个箱子中拿出所有球,并随意分割为 2 部分或 3 部分,并放入箱子,需要的代价为球的总数。

问将每种颜色的球都放在对应的一个箱子中需要的代价最少是多少。

思路

我们把拆分的过程倒过来想,这个过程就像哈夫曼树的合并操作。

如果优先队列中有 3 个元素,必定选择 3 个数字进行合并,但是为了避免讨论,我们可以人为加入元素个数达到每次合并都有 3 个颜色的目的。

加入元素的过程参考我的博客:P2168 [NOI2015] 荷马史诗

代码

#include <bits/stdc++.h>

using namespace std;
using i64 = long long;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    priority_queue<i64, vector<i64>, greater<i64> > q;

    cin >> n;
    for (int i = 1; i <= n; i++) {
        int x;
        cin >> x;
        q.push(x);
    }

    while (n % 2 != 1) {
        n++;
        q.push(0);
    }

    i64 ans = 0;
    while (q.size() > 1) {
        i64 sum = 0;
        for (int i = 1; i <= 3; i++) {
            i64 x = q.top();
            q.pop();
            sum += x;
        }
        ans += sum;
        q.push(sum);
    }
    cout << ans << '\n';
    return 0;
}

标签:箱子,Balls,int,while,long,i64,Boxes,CF844D
From: https://www.cnblogs.com/Yuan-Jiawei/p/18352196

相关文章

  • I Love Balls
    转换对象,考虑每个球能被A/B拿到的概率是多少(注意对于每个特殊球/非特殊球来说,能被某一人拿到的概率是相同的)然后就可以看这篇题解这篇题解的正确性在于我们不用关注当前拿球的人是谁,对于一整局游戏,无论最后球是按什么顺序拿的,概率都是相等的;这也就是说,每一局游戏的概率与“随机......
  • CF1983E I Love Balls
    题意\(n\)个小球,有\(k\)个特殊小球,两个人轮流随机拿,每个小球有权值,如果拿到特殊球就再拿一个,问两个人的期望得分。题解关键1如果没有特殊小球,那么每个球是等价的,计算期望的时候可以直接用平均值作为一个小球的权值,把每个小球的权值都看成平均值关键2把拿取操作看成一个序......
  • CF1983E I Love Balls
    Problem-E-Codeforces爱丽丝和鲍勃玩摸球游戏。有\(n\)个球,其中\(k\)个是特殊球。每个球都有其价值。他们轮流且不放回地摸球,每回合随机摸一个球并获得该球的价值。特别地,如果摸到了特殊球(且至少还有一个球)则这名玩家继续摸球。如果摸到的是普通球,则换人摸球。这样轮流......
  • C. Tenzing and Balls
    链接:https://codeforces.com/problemset/problem/1842/Corhttps://www.luogu.com.cn/problem/CF1842C大概的思路就是利用dp[i]记录前i个数据最多消掉的数字个数,然后对∀j:a[i]==a[j]&&j<i进行dp[i]=dp[j-1]+i-j+1的递推优化:代码:#define_CRT_SECURE_NO_WARNI......
  • C - Merge the balls
    C-Mergetheballshttps://atcoder.jp/contests/abc351/tasks/abc351_c 思路使用stack记录序列路径对栈顶两个元素尝试做缩减处理。 Codehttps://atcoder.jp/contests/abc351/submissions/52873456intn;stack<longlong>sq;intmain(){cin>>n;......
  • Colored Balls
    这道题目的模型倒是可以记住我们发现这个配对很像摩尔投票,所以考虑原数列是否有主元素对于一个集合,我们选出其中最大的\(a_i\),假设剩余的\(a\)的和小于等于\(a_i\)(此时有主元素),那么比较显而易见的就是最终会分出\(a_i\)个组;否则的话,我们考虑下界\(\lceil\frac{\suma}{2}\rcei......
  • CodeForces 1951G Clacking Balls
    洛谷传送门CF传送门考虑用相邻两个球之间的距离来描述一个状态。设距离序列为\(a_1,a_2,\ldots,a_k\)(忽略\(0\))。考虑鞅与停时定理,设一个状态的势能为\(\sum\limits_{i=1}^kf(a_i)\),一次操作能使得势能期望减少\(1\)。那么:\[1=\frac{1}{n}\sum\limits_{i=1}^k......
  • D. Colored Balls
    D.ColoredBallsThereareballsof$n$differentcolors;thenumberofballsofthe$i$-thcoloris$a_i$.Theballscanbecombinedintogroups.Eachgroupshouldcontainatmost$2$balls,andnomorethan$1$ballofeachcolor.Considerall$2^n$set......
  • 14 CodeTON Round 5 (Div. 1 + Div. 2, Rated, Prizes!)C. Tenzing and Balls(dp+前缀
    思路:dp还是挺明显的,思路可以参考最长上升子序列有点dp的感觉\(f[i]\)表示考虑前\(i\)个数,的最大值当前数有两种删或不删不删:\(f[i]=f[i-1]\);删:\(f[i]=max{f[j-1]+i-j+1}\)这个转移是\(O(n^2)\)的显然时间上来不及考虑优化,第一层循环一定是省不了的考虑优化掉第二层循环......
  • [AGC037B] RGB Balls
    题意有\(n\)个人,\(3\timesn\)个球,球有三种颜色,每种颜色恰好\(n\)个。给每个人每种颜色的球各一个,按照在原序列的顺序分别设为\(p1,p2,p3\)。试求使得\(\sump_3-p_1\)最小的方案数。Sol其实直接考虑就行了,没必要想那么复杂。假设当前的球的颜色为\(R\),之前......