吞噬算法

本文介绍了吞噬算法,用于解决给定序列循环移动后满足任意前缀和非负的优秀移动个数。通过实例和基础思路,阐述了如何用栈实现这一算法,以及其时间复杂度为O(kn),其中k在[2,3)范围内。" 89855835,5771843,Python多线程多进程实战与 Locust 性能测试,"['Python', '多线程', '多进程', 'Locust', '性能测试']
摘要由CSDN通过智能技术生成

O(kn)
咳咳,这是“力量”同学乱搞搞出来的吞噬算法,其主旨就是吃。。。(话说多少算法不是乱搞搞出来的)

题目描述

【题目描述】
WZK 最近收到了一个任务。
给出一个 n 个数的序列,为 A0,A1,„„,An-1,循环移动 k 位之后,这个序列就变 成了 Ak,Ak+1,„„,An-1,A0,A1,„„,Ak-1。一种优秀的循环移动是,对于任意的 前 i(1<=i<=n)项和都满足不小于零。请给出这个序列优秀循环移动的个数。
这道题目当然是很简单啦,但是 WZK 忙着吃小浣熊干脆面,手上油油的写不了程序,于是就麻烦你啦!如果能做到满分,他就会考虑请你吃一包哦~
【输入格式】
第一行一个整数 n(1 <= n <= 10^6),表示有 n 个数。
第二行 n 个整数,Ai(-1000 <= Ai <= 1000)表示给出的第 i 个数。
【输出格式】 一行一个整数,表示优秀循环移动的个数。
【样例输入】
one:
3
2 2 1
two:
4
-3 5 1 2
【样例输出】
one:
3
two:
2
然后luogu出在了月赛题里
uim在公司里面当秘书,现在有n条消息要告知老板。每条消息有一个好坏度,这会影响老板的心情。告知完一条消息后,老板的心情等于之前老板的心情加上这条消息的好坏度。最开始老板的心情是0,一旦老板心情到了0以下就会勃然大怒,炒了uim的鱿鱼。
uim为了不被炒,知道了了这些消息(已经按时间的发生顺序进行了排列)的好坏度,希望研究如何不让老板发怒。
uim必须按照时间的发生顺序逐条将消息告知给老板。不过uim可以使用一种叫“倒叙”的手法,例如有n条消息,小a可以从k,k+1,k+2…n,1,2…k-1这种顺序通报。
他希望知道,有多少个k,从k开始通报到n然后从1通报到k-1可以让老板不发怒。

基础思路

简单看来这就是一个环,选能走下来的位数和一直不小于0的数。。。样例和没有没区别。然而环,单调队列神马的都太复杂了,现在请参考吞噬算法——
产生随机数 7,1&#x

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值