列表

详情


XM28. 厨艺大赛奖金

描述

小米食堂每年都会举办一次厨艺大赛,假设参赛的厨师一共有n位(n < 1000),比赛结束后没有公布评分,但是站在领奖台上的一排厨师中每位厨师都能看到与自己相邻的厨师(左或者右)里评分比自己低(看不到比自己分数高的人的分数)的评分。比赛结束之后要发奖金,以1K为单位,每位厨师至少会发1K的奖金,另外,如果一个厨师发现自己的奖金没有高于比自己评分低的厨师的奖金,就会不满意,作为比赛组织方,小米食堂至少需要发放多少奖金才能让所有厨师满意。

输入描述

每组数据为n+1个正整数单空格分割,其中第一个数为参赛厨师的人数,后面n个数为每位厨师的得分(0-100)

输出描述

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

示例1

输入:

10 60 76 66 76 85 55 61 71 84 62

输出:

20

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2020-09-06

#include <stdio.h>

int buf[1000]={0};
int vbuf[1000]={0};
int main(void){
   
    int i;
    int sum=0;
    int *p=buf;
    int temp;
    while(scanf("%d",p)!=EOF){
        p++;
      
    }
    
    for(i=0;i<buf[0]-1;i++){        //从左往右比较
        if( buf[i+2]>buf[i+1]){
            vbuf[i+2]=vbuf[i+1]+1;
        }
    }
   for(i=buf[0];i>1;i--){        //从右往左比较
        if( buf[i-1]>buf[i]){
            temp=vbuf[i]+1;
            if(vbuf[i-1]<temp){
                vbuf[i-1]=temp;
            }
        }
    }
    for(i=0;i<buf[0];i++){
        sum+=vbuf[i+1];
    }
    sum+=buf[0];
    printf("%d",sum);
}

C 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2020-07-28

#include<stdio.h>
int max(int a,int b){
    if(a>=b){return a;}
    else {return b;}
}
int main(){
    int a[1000];
    int j,count[1000]={0},counter=0;
    int n;
    scanf("%d ",&n);
    for(j=0;j<n;j++){
        scanf("%d ",&a[j]);
        count[j]++;
    }
    for(j=0;j<n;j++){   
        if(a[j]<a[j+1]){
            count[j+1]=count[j]+1;
        }
    }
    for(j=n-1;j>=0;j--){
        if(a[j]<a[j-1]){
            count[j-1]=max(count[j]+1,count[j-1]);
        }
    }
    for(j=0;j<n;j++){
        counter += count[j];
    }
    printf("%d",counter);
    return 0;
}

上一题