测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A33782. 编程实现老师要奖励N名成绩优秀的同学,首先N名同学按随机顺序排成一排,且每名同学都对应一个成绩(成绩各不相同),然后按照如下规则进行奖励。规则:1)每名同学至少奖励1支铅笔;2)每一名同学拿到铅笔后,都会和左右相邻的同学作比较,如果相邻的同学成绩比自己高,那么铅笔数也一定比自己多,如果相邻的同学成绩比自己低,那么铅笔数一定比自己少。(注意每个人成绩都不同) 当给出要奖励的同学数N,及N名同学的成…

填空题 困难

题目描述

编程实现

老师要奖励N名成绩优秀的同学,首先N名同学按随机顺序排成一排,且每名同学都对应一个成绩(成绩各不相同),然后按照如下规则进行奖励。

规则:

1)每名同学至少奖励1支铅笔;

2)每一名同学拿到铅笔后,都会和左右相邻的同学作比较,如果相邻的同学成绩比自己高,那么铅笔数也一定比自己多,如果相邻的同学成绩比自己低,那么铅笔数一定比自己少。(注意每个人成绩都不同) 

当给出要奖励的同学数N,及N名同学的成绩及排序位置,请你按照规则帮助老师计算出最少需要奖励多少支铅笔。

例如:

当N=3,3名同学的成绩分别为:91,92,94

如果3名同学的排序为:91,94,92,最少需要奖励4支铅笔(成绩为91的同学1支,成绩为94的同学2支,成绩为92的同学1支);

如果3名同学的排序为:91,92,94,最少需要奖励6支铅笔(成绩为91的同学1支,成绩为92的同学2支,成绩为94的同学3支)。

输入描述

第一行输入一个正整数N,N表示要奖励的同学数

第二行输入N个正整数,每个正整数表示一名同学的成绩(成绩各不相同),正整数之间以一个英文逗号隔开,正整数的顺序即代表学生的排序 

输出描述

输出一个整数,表示N名同学最少需要奖励的铅笔数

样例输入

3

91,94,92

样例输出

4

参考答案

#参考答案1 N=int(input()) nums=input().split(',') nums=[int(num)for num in nums] pencil_list=[1 for _ in range(N)] for i in range(1,N): if nums[i-1]<nums[i]: pencil_list[i]=pencil_list[i-1]+1 for i in range(N-2,-1,-1): if nums[i]>nums[i+1]: pencil_list[i]=max(pencil_list[i],pencil_list[i+1]+1) print(sum(pencil_list))

答案解析

#参考答案2

n=int(input())

x=input().split(',')

for i in range(n):

    x[i]=int(x[i])

p=[0]*n

for i in range(n):

    px=1

    for j in range(n):

        if(i==j):

            continue

        if(x[j]<x[i]):

            px+=1

    p[i]=px

for i in range(n):

    for j in range(n):

        px=0

        if(j>0):

            if(p[j-1]<p[j]):

                px=p[j-1]

        if(j<n-1):

            if(p[j+1]<p[j]):

                px=max(px,p[j+1])

        p[j]=px+1

print(sum(p))

上一题 下一题