zoukankan      html  css  js  c++  java
  • P3817 小A的糖果题解

    题目传递门
    首先我们可以把这几个糖果盒分对来讨论; 先从第一个糖果盒和第二个开始; 如果一个糖果盒的数量就超限了,我们当然至少要把它吃到剩下(x)个; 然后如果单论两个都没有超限,但加起来超限了怎么办呢? 首先第一个糖果盒是只有一个分组的(和第二个), 而第二个糖果盒却有两个分组(和第(1)个/和第(3)个); 所以如果我们吃掉第一个里的,只会减少一个分组的量,而如果吃掉第二个里的,可以减少(2)个分组的量。所以我们要尽量吃掉第二个里的糖果。 处理好第一个分组后,来看第二个,因为第一个分组已经被处理好了,所以可以无视它,然后问题又变成了前一个问题。 以此类推就好了。

    #include <bits/stdc++.h>
    
    using namespace std;
    typedef long long LL;
    //题解:都要吃最后的,这样才最少。
    const int N = 100010;
    int a[N];
    
    LL ans = 0; //因为是累加和,注意小心是long long
    int n, x;   //糖果盒的个数 n,给定的参数 x(不能超过x)
    
    int main() {
        cin >> n >> x;
        for (int i = 1; i <= n; i++) cin >> a[i];
    
        for (int i = 1; i < n; i++) {
            if (a[i] + a[i + 1] > x) { //两个长度的滑动窗口
                ans += a[i + 1] + a[i] - x; //吃掉的糖数量
                a[i + 1] = x - a[i];        //a[i+1]剩余的数量。这个差,要在后面那个盒子里出,这样才最有效。
            }
        }
        cout << ans << endl;
        return 0;
    }
    
    
  • 相关阅读:
    stl rope
    vijos1574 摇钱树
    图论 Dijkstra+堆优化
    c++输入优化
    Vijos1579 宿命的PSS 最小生成树
    快速求n阶多项式乘积
    c++stl map
    C#函数式程序设计之惰性列表工具——迭代器
    C#函数式程序设计之泛型(下)
    C#函数式程序设计之泛型(上)
  • 原文地址:https://www.cnblogs.com/littlehb/p/15034953.html
Copyright © 2011-2022 走看看