type
status
date
slug
summary
tags
category
icon
password
链接:‣
题目描述
阿宁认为一个数组是漂亮数组,该数组需要存在一个总和是的倍数的子数组。
现在阿宁有一个长度为的数组,阿宁想要将数组分割出若干个数组,分割出的数组需要满足,按照分割顺序合并可以得到原数组。
阿宁想知道将数组分割,最多可以获得多少个漂亮数组?
输入描述:
第一行输入两个整数,。
第二行输入个整数。
输出描述:
输出一个整数。
示例1
输入
输出
说明
分割成[1,1,4],[5,1],[4],其中[1,1,4],[5,1]两个数组是漂亮数组。
题解
首先,对于一个给定的数组,如果第个以前和第个以后的都可以构成漂亮数组,那么我们来考虑一下将第个数字放在前面还是后面。答案是后面,因为往前面这个数组里面再加入数字是没有意义的,不如留给下一个数组,这也就构成了我们这道题的思路:贪心。
接下看究竟什么样的数组才是漂亮数组。按题意,有两种情况:
第一种为数组的某一个子数组的和为的倍数。这是我们将数组分为两部分,由前面的贪心思想可知,前一部分为无关项,后一部分为相关项,即前半部分的和为,,后半部分和为,考虑到sum的结果可能超过long long的范围,所以我们考虑取余,并且可以通过前缀和来减少时间消耗。即当前缀和%k的余数之前已经出现过的时候,组成一最小的漂亮数组。
第二种是该数组的和恰好是的倍数,即前缀和%k的值为0。
下面是完整代码:
- Author:Serendipity
- URL:https://serendipity565.netlify.app//article/%E6%BC%82%E4%BA%AE%E6%95%B0%E7%BB%84
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!