基础方法の思路分析

糖糖别胡说,我真的不是签到题目

http://www.nowcoder.com/questionTerminal/9d5b203a30bc4e7b85f1838d60cf2236

私の初始思路:
1.对每个点往前搜,满足条件的被消灭,这是个n方的算法。
2.用delta数组维护发功会增加的部分,思路是对的但是可以观察区间的特征来描述
为什么不好?
应为最常见的模拟思路是把时间看做变量,把每个时间上发生的事情都原本重复。

解题思路:(发现数学规律消除时间的影响,不要重复操作)
1.这里发功的维护有一个特点就是左端点是固定的,所以可以录入sum[i]表示第i秒时,进行了发功,对sum做了一次前缀和之后,sum[i]代表第i秒时一共加了sum[i]次,任意一个点在i秒时加了几次都可以算出来
例如对于点2,就用sum[i]-sum[1]来表示,末尾的i就代表现在是第几秒。
下面论证在过程中被消灭和最后被消灭没有区别,
b[j]+sum[j]−sum[j−1]>b[i]+sum[j]−sum[i−1],第j秒时想要删掉不同组的i要满足如上条件,
化简b[j]−sum[j−1]>b[i]−sum[i−1]
很明显这和时间已经没有关系了,所以只要最后处理一次就好了。

算出最终时刻每个点的d[i]=b[i]-sum[i-1]然后删一次就好

全部评论

相关推荐

11-11 17:45
门头沟学院 Java
扶老蟑螂过马路被无证...:1. 技术栈那里把数据结构删了,小中厂用不上,大厂手撕能难死你,linux那里可以考虑删掉,还不如换个git团队协作开发 2.不要使用一些项目不匹配的技术,例如分库分表和你上边的ddd,真正使用ddd的都是【超】大规模,大部分都仍然使用多模块聚合mvc,这样虽然看起来高大上,但是新增了前期协定需求跟后期维护的成本,因为开发中都是选择最适合当起版本的开发方式跟中间件,这样反而会体现你为了学而学(因为可能面试官都不完全熟悉ddd,然后问你你也回答不出深度) 3.项目写了很多的redis使用,为什么技术栈不写上redis 4.项目技术栈跟业务需求高度重合,完全可以整合成一个,然后再去弄一个感兴趣的其他业务或者轮子,或者把上面的一个换下包装 5.奖项自己编一点奖学金,加个四六级,删掉蓝桥杯
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务