首页 > 其他分享 >CF1859F Fancy Arrays

CF1859F Fancy Arrays

时间:2023-12-16 09:03:01浏览次数:41  
标签:min Arrays Fancy leq 差分 dp CF1859F

Fancy Arrays - 洛谷

  • 我们先找这题看起来有点奇怪的部分:

    • \(x\leq 40\)

    • \(|a_i-a_{i-1}|\leq k\)

  • 我们先考虑第二个条件怎么用。我们发现 \(\min a_i \in [0,x+k)\),而原数组相邻两数之差的条件肯定要考虑成差分来处理

  • 可以发现,一个差分数组和 \(\min a_i\) 与一个 \(a_i\) 序列唯一对应。因为我们可以把差分求前缀和,然后找到里面的最小值,再整体加偏移量的方式得到 \(a_i\)

  • 对于 \(\min a_i \in [x,x+k)\) 的情况自然不需要考虑,因为他们构造出来的一定都满足条件。而对于 \(\min a_i \in [0,x)\) 的情况,不满足条件当且仅当 \(\max a_i \in [0,x)\),我们可以考虑容斥。

  • 总方案:\((2k+1)^{n-1} \times (x+k)\);现在我们即要求满足 \(a_i \in [0,x)\) 的 \(a_i\) 的方案数。我们可以 \(dp\) 来处理这个问题

  • 设 \(dp_{i,j}\) 表示前 \(i\) 个数已经填好,第 \(i\) 个数填 \(j\) 的方案数。转移是 \(O(nk^2)\) 的,前缀和可以优化掉一个 \(k\)

  • 发现 \(x \leq 40\),于是矩阵快速幂优化 \(dp\)

  • 最终复杂度 \(O(Tx^3\log n)\)

标签:min,Arrays,Fancy,leq,差分,dp,CF1859F
From: https://www.cnblogs.com/fox-konata/p/17904485.html

相关文章

  • C1. Good Subarrays (Easy Version)
    思路:我们枚举每一个左端点,对于每一个左端点,寻找最长的满足条件的区间,这个区间长度就是左端点对答案的贡献,可以发现具有单调性,右端点只会前进不会倒退。所以我们两个指针各扫一遍区间就可以。#include<bits/stdc++.h>#definelsp<<1#definersp<<1|1#definePIIpair<int,......
  • C1. Good Subarrays (Easy Version)(推公式找性质)
    思路:\[能想到平方是比较特殊的,因为x*x一定是x的倍数也就是说\sqrt[2]{x*x}={x}\]\[所以需要考虑平法之间的数手模一下样例可以发现[x^2,(x+1)^2)之间是x倍数的有x^2\]\[x*(x+1),x*(x+2)这三个,所以可以知道平方之间有三个,只要讨论一下出来整个区间边界还有多少个\]这里可......
  • 【JavaSE】一些常见API(Object、Objects、Math、System、BigDecimal、包装类、Arrays)
    Object类Object类介绍toString方法直接println(对象名),默认会自动调用(对象名.toString),而.toString默认是返回地址信息->全类名(包名+类名)@地址的十六进制哈希值,因此如果println(对象名)控制台没有输出地址值,说明该类一定重写了Object类的toString方法,比如String类和Arr......
  • Arrays类
    数组的工具类java.util.Arrays由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本操作查看jdk帮助文档Arrays类中的方法都是static修饰符的静态方法,在使用的时候可以直接使用类名进行调用,而不用使用对象来调用(......
  • Arrays类
    packagearray;importjava.util.Arrays;publicclassArrayDemo06{publicstaticvoidmain(String[]args){int[]a={1,2,3,4,9090,31231,543,21,3,23};int[]b={1,2,3,4,5,6,7,8,9,10,11};System.out.println(a);//[I@1b6d358......
  • 7-1896C - Matching Arrays
    题意:两个数组\(a和b\),对\(b\)任意排序,使得\(a[i]>b[i]的个数为x\),要求输出能满足的数列。思路:一个任意排序,相当于两个任意排序,都升序,发现规律,\(让排序后的b数组,循环右移x位置\),满足条件则输出,否则一定不满足。代码:点击查看代码#include<bits/stdc++.h>#defineintlong......
  • [LeetCode] 1630. Arithmetic Subarrays
    Asequenceofnumbersiscalledarithmeticifitconsistsofatleasttwoelements,andthedifferencebetweeneverytwoconsecutiveelementsisthesame.Moreformally,asequencesisarithmeticifandonlyifs[i+1]-s[i]==s[1]-s[0]forallvalid......
  • Chapter 3.1 复合类型-Arrays,Slices
    数组Arrays数组在Go中很少被直接使用,因为数组的长度被作为类型的一部分被使用[3]int[5]int是不同的类型这个数组和C语言的数组很不一样,C的数组变量就是指向数组的指针,但是offset是0你不能使用一个变量代表数组的长度,类型不是在运行时确定的,它必须在编译时确定,这......
  • 无涯教程-D语言 - 数组(Arrays)
    D编程语言提供了一种名为arrays的数据结构,该数据结构存储相同类型元素的固定大小的顺序集合,数组用于存储数据集合。声明数组要使用D编程语言声明数组,程序员可以指定元素的类型和数组所需的元素数量,如下所示:typearrayName[arraySize];这称为一维数组,arraySize必须是......
  • 重写Java中Arrays数组工具类提供的sort()排序函数中的比较器类Comparator的compare()
    排序方法是我们日常开发或者写功能函数,或者实现算法时,常调用的方法。有时甚至,开发人员自己还要写一写排序算法。今天,我们来修改Java官方提供的Arrays工具类中的静态排序sort()方法。反问一下,为什么要重写呢?官方提供的还不够你用?回答:确实不够用,官方默认是对数字,特别是sort比较的......