编程挑战高校俱乐部分配糖果答案

题目详情

有n个小朋友站成一排(编号从0到n-1),每个小朋友有一个rating值,存放在ratings数组中。老师需要给他们分配糖果,每个小朋友至少需要一颗糖果,对于任意相邻的两个小朋友i和i+1,rating值大的必须比rating值小的分配的糖果多(rating相同的没必要分配一样多的糖果)。

请计算最少需要多少颗糖果,才能完成上述分配。

输入格式:

多组数据,每组数据第一行是一个正整数n。

接下来n行,每行有1个正整数,表示每个小朋友的rating值。所有整数都不超过100000。

输出格式:

每组数据一行,包括一个正整数,表示做少需要的糖果数。

答题说明

输入样例

3

1

2

2

输出样例:

4

挑战成功,代码如下:

import java.util.Scanner;

public class Children {

    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);

        int n = 0;
        int sweetCount = 0;
        while (cin.hasNext()) {
            sweetCount = 0;
            n = cin.nextInt();
            int[] ratings = new int[n];
            for (int i = 0; i < n; i++) {
                ratings[i] = cin.nextInt();
            }

            int[] sweets = new int[n];
            sweets[n - 1] = 1;
            for (int i = n - 1; i > 0; i--) {
                int j = i;
                if (ratings[j] < ratings[j - 1]) {
                    sweets[j - 1] = sweets[j] + 1;
                }
                else if (ratings[j] == ratings[j - 1]) {
                    sweets[j - 1] = 1;
                }
                else {
                    if (sweets[j] == 1) {
                        for (int k = j; k < n; k++) {
                            sweets[k]++;
                            if (k == n - 1 || ratings[k] >= ratings[k + 1]
                                || (ratings[k] < ratings[k + 1] && sweets[k] < sweets[k + 1]))
                                break;
                        }
                    }
                    sweets[j - 1] = 1;
                }
            }

            for (int i : sweets) {
                sweetCount += i;
            }
            System.out.println(sweetCount);

        }
        cin.close();
    }
}
时间: 2024-08-01 23:15:25

编程挑战高校俱乐部分配糖果答案的相关文章

编程挑战高校俱乐部数字游戏答案

题目详情 两个人玩一个数字游戏,给定两个正整数A,B,两个人轮流从一个数中减去另外一个数的正数倍,要保证结果非负,首先得到0的人获胜.比如:30 8经过一步操作能够变为22 8 或者14 8 或者 6 8. 两个人都足够聪明. 输入格式: 多组数据,每组数据占一行是两个空格分隔的正整数(在32位整书范围内) 输出格式: 每组数据一行,输出是第一个人赢,还是第二个人赢. 答题说明 输入例子 3 5 4 5 输出例子: 1 2 代码例如以下 import java.util.ArrayList; i

欢乐暑假-高校俱乐部暑期线上编程竞赛奖励机制

1. 评奖规则 -        四道月赛题目全部参与,并成功通过三道及以上比赛指定题目: -        线上题目参与总数超过40,且通过率高于50%: 排名规则按照通过比赛题目的先后顺序和排名,比赛题目共4道,比赛总得分=第一题通过排名数+第二题通过排名数+第三题通过排名数+第四题通过排名数.若比赛总得分并列,则按照总通过率排名.若比赛得分.总通过率均并列,则根据比赛题目代码运行时间总和的长短排名. 比赛指定题目将于7.9.7.16.8.6.8.13日17:00发布. 举例说明: 学生A.

(csdn高校俱乐部编程挑战)2的补码

题目详情 在计算机中,整数是以2的补码的形式给出的. 给出整数A和B,假设计算机是32位机,求从A到B之间的所有二进制数中,一共用了多少个1. 输入格式: 多组数据,每组数据一行,由两个整数A,B, -2147483648<=A<=B<=2147483647 输出格式: 每组输出一行,从A到B使用的1的个数. 答题说明 输入样例 -2 0 0 0 0 1 输出样例: 63 0 1 刚开始觉得这个题灰常简单,可是代码写完提交上去挑战失败,看了半天也没搞懂问题出在哪里了~~ 我的理解是因为有

(csdn高校俱乐部编程挑战)绝对值最小

题目详情 给你一个数组A[n],请你计算出ans=min(|A[i]+A[j]|)(0<=i,j<n). 例如:A={1, 4, -3}, 则: |A[0] + A[0]| = |1 + 1| = 2. |A[0] + A[1]| = |1 + 4| = 5. |A[0] + A[2]| = |1 + (-3)| = 2. |A[1] + A[1]| = |4 + 4| = 8. |A[1] + A[2]| = |4 + (-3)| = 1. |A[2] + A[2]| = |(-3) + (

欢乐暑假线上编程比赛第四题:分配糖果

在csdn上看到这么个题目,与友友们一起分享下,如果有别的做法,也希望能拿出来交流交流. 题目详情 有n个小朋友站成一排(编号从0到n-1),每个小朋友有一个rating值,存放在ratings数组中.老师需要给他们分 配糖果,每个小朋友至少需要一颗糖果,对于任意相邻的两个小朋友i和i+1,rating值大的必须比rating值小的分 配的糖果多(rating相同的没必要分配一样多的糖果). 请计算最少需要多少颗糖果,才能完成上述分配. 输入格式: 多组数据,每组数据第一行是一个正整数n. 接下

编程挑战系统的输入和输出详细说明

在高校俱乐部线上编程挑战中,一道题目的所有测试数据是放在一个文本文件中,选手将一道题目的程序提交给评判系统运行,程序从该文件中读取测试数据,再把运行结果输出到另一个文本文件中.系统把输出文件与标准答案比对,来评判程序编写得正确与否. 本系统采用标准的输入输出,输入结束有文件末尾标识(EOF),这可以用于确定输入结束. 一.四种基本输入形式 1.      一组输入数据 示例:整数求和 描述 给定两个整数,求它们之和. 输入 两个整数A,B. 输出 两个整数的和. 样例输入 1 2 样例输出 3

2014年秋季学期CSDN高校俱乐部全国高校巡讲讲师招募

CSDN高校俱乐部(以下简称"俱乐部")是由全球最大中文IT技术社区CSDN发起的,由全国各高校在校生代表自发加入的IT技术学习型组织.CSDN由此搭建起行业与校园之间的桥梁,公益为各俱乐部提供行业资讯.技术学习.专家交流.技术竞赛等学习服务.俱乐部成立于2009年,至今已收到数百所高校的成立申请,已在全国70所高校中建立分站,各站分别命名为"XX大学CSDN高校俱乐部".已开通高校俱乐部的地区有:北京.福建.广东.河北.河南.黑龙江.湖北.湖南.江苏.江西.辽宁.

CSDN编程挑战——《高斯公式》

高斯公式 题目详情: 高斯在上小学时发明了等差数列求和公式:1+2+..+100=5050.现在问题在于给你一个正整数n,问你他可以表示为多少种连续正整数之和?(自身也算). 输入格式: 多组数据,每组数据一行,一个正整数n. 0<n<2000000000 输出格式: 每组数据一行,包含一个正整数,表示结果. 答题说明: 输入样例 5 120 输出样例: 2 4 解释: 5=2+3=5 120=1+2+...+15=22+23+24+25+26=39+40+41=120 初稿代码: /* 3:

2014-04-19编程之美初赛题目及答案解析

第一题: 描写叙述 一般来说,我们採用针孔相机模型,也就是觉得它用到的是小孔成像原理. 在相机坐标系下,一般来说,我们用到的单位长度,不是"米"这种国际单位,而是相邻像素的长度.而焦距在相机坐标系中的大小,是在图像处理领域的一个很重要的物理量. 如果我们已经依据相机參数,得到镜头的物理焦距大小(focal length),和相机胶片的宽度(CCD width),以及照片的横向分辨率(image width),则详细计算公式为: Focal length in pixels = (ima