[18无验证]派分糖果-美丽联合2018秋

1.题目描述

有 N 个孩子站成一排,每个孩子有一个分值。给这些孩子派发糖果,需要满足如下需求:
1、每个孩子至少分到一个糖果
2、分值更高的孩子比他相邻位的孩子获得更多的糖果
求至少需要分发多少糖果?

  • 输入描述:
    0,1,0
    
  • 输出描述:
    4
    
  • 输入示例:
    5,4,1,1
    
  • 输出示例:
    7
    

2.题目解析

注意顺序不能变。
本题关键在于分析并实现程序逻辑。派分糖果主要存在以下几种情况。
一般规则:

  1. 当前分值与前一分值相等,分到糖果数也与前一相邻位的孩子相同。
  2. 当前分值大于前一分值,分到糖果数比前一相邻位的孩子多1颗。
  3. 当前分值小于前一分值,分到糖果数比前一相邻位的孩子少1颗。
    潜在规则:
    当前分值小于前一分值,分到糖果数比前一相邻位的孩子少1颗,但是糖果不能少于1颗,当少于1颗时,前面的要增加糖果数量。
    例如:6,5,5,5,4,1,1

3.参考答案

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n = 5;
    // int nums[n] = {1,2,3,5,2,1};
    // int nums[n] = {1,2,3,5,2,2,1,2};
    // int nums[n] = {1,2,3,5,4,3,2,2,1,2};
    // int nums[n] = {5,4,3,2,1};
    // int nums[n] = {5,5,5,5,5};
    // int nums[n] = {1,2,3,4,5};
    // int nums[n] = {1,2,4,9,15};
    int sugers[n];
    sugers[0] = 1;
    for(int i=1;i<n;++i){
        if(nums[i-1] == nums[i]){ // 相邻孩子分值相等
            sugers[i] = sugers[i-1];
        }else if(nums[i-1] < nums[i]){ // 后一个孩子分值大于前一个孩子
            sugers[i] = sugers[i-1] + 1;
        }else{// 后一个孩子分值小于前一个孩子
            sugers[i] = 1;
            int now = i;
            int pre = now - 1;
            //  后一个孩子分值小于前一个孩子,不发糖果
            while(pre >=0 && nums[pre] >= nums[now] && sugers[pre] <= sugers[now]){
                ++sugers[pre];
                --now;
                --pre;
            }
        }
    }
    int res = 0;
    for(int i=0;i<n;++i){
        res += sugers[i];
    }
    printf("\n%d\n",res);
}
#include <bits/stdc++.h>
using namespace std;
int solve(int* nums,int n){
  int counts[n]; // 存放每个小孩分配糖果数
  fill_n(counts,n,0); // 结果清零
  counts[0] = 1;

  for(int i=1;i!=n;++i){// 遍历所有分值
    if (nums[i] == nums[i-1]){ // 分值相等糖果相等
      counts[i] = counts[i-1];
    } else if (nums[i] > nums[i-1]){ // 当前学生比前一个学生分值高,多分1个糖果
      counts[i] = counts[i-1]+1;
    } else { // 当前学生比前一个学生分值低
      if(counts[i-1]>1){ // 前一个学生糖果数多于1
        counts[i] = counts[i-1]-1; // 当前学生比前一个学生糖果数少1
      }else{ // 如果前一个学生糖果数为1
        counts[i] = 1;// 当前学生糖果数为1
        for(int j = i;j>=1;--j){// 把前面连续高分数的学生糖果都加1
          if(nums[j-1] < nums[j]) break; // 直到遇到分数低的学生为止
          if(nums[j-1] >= nums[j]) ++counts[j-1];
        }
      }
    }

    // 用于查看过程
    // for_each(counts,counts+n,[](int n){cout<<n<<" ";});
    // cout << endl;
  }
  // 统计所有的糖果
  return accumulate(counts,counts+n,0);
}
int main(){
  vector<int> nums;
  int num = 0;
  while(cin>>num){
    nums.push_back(num);
    char c = cin.peek(); // 获取下个字符
    if('\n' == c) break; // 回车表示输入结束
    cin.ignore(1,','); // 除去逗号分割符
  }
  printf("%d\n",solve(nums.data(),nums.size()));
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

  • 1、volley引发的NetworkDispatcher 加入!!!!那句话解决 2、Volley StringR...
    suniney阅读 220评论 0 0
  • #田生万物# 创业日记第10天 亲爱的们,今天请让我向大家说一声抱歉——接总部通知,期盼已久的蜜橘停售。 说实在的...
    珊瑚_54b6阅读 182评论 0 0
  • 每天睡觉之前,你在做什么?抛出这个问题的时候,我顿了顿,因为脑子里又冒出来了别的问题。我每天几点睡觉啊? 你每天晚...
    赧然一笑阅读 268评论 0 0