发奖金

来源:互联网 发布:c语言静态变量定义 编辑:程序博客网 时间:2024/04/29 08:33

题目描述

狐进行了一次黑客马拉松大赛,全公司一共分为了N个组,每组一个房间排成一排开始比赛,比赛结束后没有公布成绩,但是每个组能够看到自己相邻的两个组里比自己成绩低的组的成绩,比赛结束之后要发奖金,以1w为单位,每个组都至少会发1w的奖金,另外,如果一个组发现自己的奖金没有高于比自己成绩低的组发的奖金,就会不满意,作为比赛的组织方,根据成绩计算出至少需要发多少奖金才能让所有的组满意。

输入描述:

每组数据先输入N,然后N行输入N个正整数,每个数表示每个组的比赛成绩。

输出描述:

输出至少需要多少w的奖金

输入例子:

10
20
32
12
32
45
11
10
31
41
33

输出例子:

18
这道题的思路是先从头到尾理一遍奖金,然后从尾到头理一遍奖金,从头到尾是为了这组能看到左边一组的分数并确定自己的奖金应该为1w还是比左边一组奖金高,从尾到头是为了这组能看到右边一组的分数并确定自己的奖金应该保持不变还是比右边一组的奖金高。

我的代码如下:

import java.util.*;public class 发奖金 {    public static void main(String[] args){        Scanner sc=new Scanner(System.in);        while(sc.hasNext()){        int n=Integer.parseInt(sc.nextLine());        int[] a=new int[n];        for(int i=0;i<n;i++){            a[i]=Integer.parseInt(sc.nextLine());        }        int[] b=new int[n];        b[0]=1;        for(int i=1;i<n;i++){            if(a[i]>a[i-1]){                b[i]=b[i-1]+1;            }            else            {                b[i]=1;            }        }        for(int i=n-1;i>=1;i--){            if(a[i-1]>a[i]&&b[i-1]<=b[i])                b[i-1]=b[i]+1;        }        int sum=0;        for(int i=0;i<n;i++)            sum+=b[i];        System.out.println(sum);    }    }}
0 0