数组切分——十三届蓝桥杯

试题 G: 数组切分

时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分

【问题描述】 已知一个长度为 N 的数组:A1, A2, A3, ...AN 恰好是 1 ∼ N 的一个排列。现 在要求你将 A 数组切分成若干个 (最少一个,最多 N 个) 连续的子数组,并且 每个子数组中包含的整数恰好可以组成一段连续的自然数。 例如对于 A = {1, 3, 2, 4}, 一共有 5 种切分方法: {1}{3}{2}{4}:每个单独的数显然是 (长度为 1 的) 一段连续的自然数。 {1}{3, 2}{4}:{3, 2} 包含 2 到 3,是 一段连续的自然数,另外 {1} 和 {4} 显然 也是。 {1}{3, 2, 4}:{3, 2, 4} 包含 2 到 4,是 一段连续的自然数,另外 {1} 显然也是。 {1, 3, 2}{4}:{1, 3, 2} 包含 1 到 3,是 一段连续的自然数,另外 {4} 显然也是。 {1, 3, 2, 4}:只有一个子数组,包含 1 到 4,是 一段连续的自然数。

【输入格式】 第一行包含一个整数 N。第二行包含 N 个整数,代表 A 数组。

【输出格式】 输出一个整数表示答案。由于答案可能很大,所以输出其对 1000000007 取 模后的值

【样例输入】 4 1 3 2 4

【样例输出】 5

【评测用例规模与约定】 对于 30% 评测用例,1 ≤ N ≤ 20. 对于 100% 评测用例,1 ≤ N ≤ 10000.

 做题思想:

主要是判断每一段分割的数组是否是连续的,即判断该段数组的最大值减最小值是否等于该段数组的长度-1;

import java.util.Scanner;

public class G {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
       int[] arr=new int[100001];
        int sum=1;//每个单独的数为一种存法如{1}{3}{2}{4};
        for (int i=1;i<=n;i++){
           arr[i]=sc.nextInt();
        }
        for (int i=1;inum[k])min=num[k];
                    if (max
谨以此文章纪念该题没有将类名改为Main。
写该文章只为抒情,因为目前还没有答案,所以并不保证做对。

你可能感兴趣的:(java,蓝桥杯,java)