zoukankan      html  css  js  c++  java
  • 洛谷 P3817 小A的糖果

                         洛谷 P3817 小A的糖果

    题目描述

    小A有N个糖果盒,第i个盒中有a[i]颗糖果。

    小A每次可以从其中一盒糖果中吃掉一颗,他想知道,要让任意两个相邻的盒子中加起来都只有x颗或以下的糖果,至少得吃掉几颗糖。

    输入输出格式

    输入格式:

    第一行输入N和x。

    第二行N个整数,为a[i]。

    输出格式:

    至少要吃掉的糖果数量。

    输入输出样例

    输入样例#1: 复制
    3 3
    2 2 2
    输出样例#1: 复制
    1
    
    
    输入样例#2: 复制
    6 1
    1 6 1 2 0 4
    输出样例#2: 复制
    11
    输入样例#3: 复制
    5 9
    3 1 4 1 5
    输出样例#3: 复制
    0
    

    说明

    样例解释1

    吃掉第二盒中的糖果。

    样例解释2

    第二盒吃掉6颗,第四盒吃掉2颗,第六盒吃掉3颗。

    30%的测试数据,2<=N<=20,0<=a[i], x<=100

    70%的测试数据,2<=N<=1000,0<=a[i], x<=10^5

    100%的测试数据,2<=N<=10^5,0<=a[i], x<=10^9

    这个题好像是个模拟来着,年代比较久远了  qwq

    难度:普及-

    #include<algorithm>
    #include<iostream>
    #include<cstdio>
    using namespace std;
    int n, m;
    int sum;
    int a[100005];
    int main() {
        scanf("%d%d", &n, &m);
        for(int i = 1; i <= n; i++)
            scanf("%d", &a[i]);
        for(int i = 1; i < n; i++) {
            if(a[i]+a[i+1] > m) {
                int y = a[i]+a[i+1]-m;
                sum += y;
                a[i+1] -= y;
            }
        }
        printf("%d", sum);
        return 0;
    }
    80 分代码,不知道为啥WA了两个点,请大佬指出
    #include<cstdio>
    using namespace std;
    int n, x, k;
    long long ans;
    int a[100001];
    int main()
    {
        scanf("%d%d", &n, &x);
        for(int i = 1; i <= n; i++)
            scanf("%d", &a[i]);
        for(int i = 2; i <= n; i++)
            if(a[i]+a[i-1] > x) {
                k = a[i]+a[i-1]-x;
                if(a[i] >= k)
                    a[i] -= k;
                else a[i] = 0;
                ans += k;
            }
        printf("%lld", ans);
        return 0;
    }
    AC了的代码
    #include <iostream>
    #include <vector>
    int main() {
      unsigned long long N, x;
      std::cin >> N >> x;
      std::vector<unsigned long long> a(N);
      for (unsigned i = 0; i < N; ++i) { std::cin >> a[i]; }
      unsigned long long ans = 0ull;
      for (unsigned i = 1; i < N; ++i) {
        if (a[i - 1] + a[i] > x) {
          if (a[i - 1] < x) {
            ans += a[i] + a[i - 1] - x;
            a[i] -= a[i] + a[i - 1] - x;
          } else {
            ans += a[i];
            a[i] = 0;
            ans += a[i - 1] - x;
          }
        }
      }
      std::cout << ans;
      return 0;
    }
    题目自带的标程
  • 相关阅读:
    你是老鸟吗?但是有些你可能目前都不知道的东西
    工具类合集
    也谈Flash mmorpg地图问题【转】
    大量实用工具类、开源包,该帖绝对值得你收藏!
    如何设计产品【页游】
    网络游戏中,玩家常常询问什么时候开新服,其中的本质需求是什么?
    大将军UE分析
    天天连萌UE分析
    selenium IDE 回放报错
    jenkins配置
  • 原文地址:https://www.cnblogs.com/v-vip/p/8588219.html
Copyright © 2011-2022 走看看