链接:https://ac.nowcoder.com/acm/contest/12636/C
来源:牛客网
题目描述
凡凡是一个上进的人,他的人生没有下坡路,他也讨厌带有”下坡路“的东西。
所以,对于凡凡来说,只有非降序的数组才是nice的(如:1,2,2,3,4,5,5);若数组元素个数为1,也满足非降序,也是nice的。
现在有一个长度为n的数组,凡凡想知道它的子数组中有多少个数组是nice的。
你能帮帮他吗?
对于子数组的定义,如果可以通过从开头和从结束分别删除若干个(可以为零或全部,前后删除个数不必相同)元素来从数组b获得数组a,则称数组a是数组b的子数组。(子数组包含原数组,但不包含空串)
输入描述:
第一行输入一个整数n(1≤n≤10^5),表示数组的长度。
第二行包含n个空格分隔的整数a1,a2,.,an(0≤ai≤10^9),为数组的元素。
输出描述:
输出给定数组的子数组中是nice数组的个数。(注意使用long long)

思路:
递增计数
递减结算,同时计数回归1
用到了等差数列求和公式 n(n+1)//2
不断累积次数最后输出
total_times = int(input())
arr = list(map(int, input().split()))
times = 1
for index, num in enumerate(arr):
if index != 0:
if num < arr[index - 1]: # decreasing
total_times += times * (times - 1) // 2
times = 1
else: # increasing
times += 1
total_times += times * (times - 1) // 2
print(total_times)
该博客介绍了一个编程问题,涉及数组处理和算法。题目要求计算给定数组的所有非降序子数组的数量。博主提供了使用递增计数和递减计数策略的解决方案,并利用等差数列求和公式来得出结果。该问题主要考察数组操作和条件判断的编程技巧。

4059

被折叠的 条评论
为什么被折叠?



