[BZOJ3142][HNOI2013]数列(组合)

题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3142

分析:

考虑差值序列a1,a2,...,ak-1

那么对于一个确定的差值序列,对答案的贡献是n-a1-a2-...-ak-1

所以然后只要考虑所有确定的差值序列的和就行了。

差值序列的总的种类数一共有m^(k-1)种

对于a1,一共出现了m^(k-2)次,而a1的取值是1~m

所以对于a1来说总和就是(1+2+...+m)*m^(k-2)

a2,a3,...,ak-1同理

于是ans=n*m^(k-1)-(k-1)*(1+2+...+m)*m^(k-2)

时间: 2024-10-10 01:28:41

[BZOJ3142][HNOI2013]数列(组合)的相关文章

bzoj千题计划293:bzoj3142: [Hnoi2013]数列

http://www.lydsy.com/JudgeOnline/problem.php?id=3142 如果已知数列的差分数列a[1]~a[k-1] 那么这种差分方式对答案的贡献为 N-Σ a[i],i∈[1,k-1] 差分数列一共有多少种? M^(k-1) 种 所以ans=Σ  (N-Σa[i]) = M^(k-1) * N - Σ Σ a[i] = M^(k-1) *N-(k-1)*M^(k-1) /M * (M+1)*M/2 后面是因为一共 M个数 出现(k-1)*M^(k-1) 次,每

BZOJ3142 [Hnoi2013]数列

首先我们对每天的股票价格做差分,得到差分序列$a[1], a[2] ... a[k - 1]$ 则对已一个给定的序列,满足这个差分序列的答案共有$n - \sum_{i = 1} ^{k - 1} a[i]$ 故总的答案$ans = \sum (n - \sum_{i = 1} ^{k - 1} a[i])$ 把n提出来,有$ans = n * m ^ {k - 1} - \sum (\sum_{i = 1} ^{k - 1} a[i])$ 我们来看这个东西$A = \sum (\sum_{i

搜索专讲

搜索专讲 Tags:搜索 https://www.zybuluo.com/xzyxzy/note/1058215 前言 做一个专题肯定是要花点时间的 但是哇,搜索怎么这么多内容?!WTF?! 好吧慢慢刷,待四五月份左右出pdf或ppt的讲义吧 先把题目放上,大家愿意的和我一起做吧 题目 李老师给了一个包 广搜 [x] ?POJ1426-Find The Multiple https://vjudge.net/problem/POJ-1426 [x] POJ2251-Dungeon Master

[BZOJ1005]Prufer数列+排列组合

一棵树的Prufer数列 每次在剩下的树中找到标号最小的叶子节点(对于无根树而言即是度数为1的节点),删去. 同时将其父节点(即与其相连的唯一点)加入Prufer数列当中. 一个Prufer数列所对应的树 G集合开始为空集 设当前处理到Prufer数列的第i项,找到G集合中未出现且在Prufer[i..n-2]未出现过的标号最小的节点,设其为u. 将u加入集合G中,并将u与Prufer[i]连一条边. 最后将在G集合中仍未出现的两个点之间连一条边(其中必定有一个是n). 来思考一下为何可以还原成

python 题目:斐波那契数列计算;题目:站队顺序输出;题目:合法括号组合的生成;题目:用户登录(三次机会)

斐波那契数列计算 B 描述 斐波那契数列如下: F(0) = 0, F(1) = 1 F(n) = F(n-1) + F(n-2) 编写一个计算斐波那契数列的函数,采用递归方式,输出不超过n的所有斐波那契数列元素 调用上述函数,完成如下功能: 用户输入一个整数n,输出所有不超过n的斐波那契数列元素.输出数列的元素和及平均数,输出按照顺序,用英文逗号和空格分割 此题目为自动评阅,请严格按照要求规范输入和输出. def jebona(n): if n==0: return 0 elif n == 1

dfs算法中求数列的组合

/* 从13个书中挑选5个值,他们的组合可能是 什么, 如下代码 dfs深度遍历, 和全排列是一种方法,但是思路不同 */ public class Main { static int count = 0; static int a[] = new int[6]; public static void main(String[] args) { boolean visit[] = new boolean[13]; dfs(a,visit,1); System.out.println(count)

Fibonacci数列性质的组合证明

数列 1, 1, 2, 3, 5, 8, 13, 21, 34, … 叫做 Fibonacci 数列.这个数列有很多神奇的性质,其中一个性质是,每一个 Fibonacci 数的平方与它前后两个 Fibonacci 数的乘积相比一定正好相差 1 .具体地说,如果把第 n 个 Fibonacci 数记做 Fn ,那么有: Fn+1 · Fn+1 - Fn · Fn+2 = (-1)n Fibonacci 数有很多组合数学上的意义.比如说,用 1 × 1 和 1 × 2 的积木覆盖一个 1 × n 的

编程求解,输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m。要求将所有的可能组合列出来

import java.util.LinkedList; import java.util.Scanner; public class Main { private static LinkedList<Integer> list = new LinkedList<>(); public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext(

C++求连续数列之和为S的数组里面所有组合(根据公式S=(x+y)*n/2优美实现)

//博主mingliang37的思想,我后来想明白了,整理了一下. #include <iostream> using namespace std; //输出所有和为S的连续整正数序列. //x.......y(这是一个连续序列) //x+.....+y=S; //还记得小时候老师要我们做的一道题吗?求1+2+3+...+100=? //(1+100).100/2=5050. //所以我们假设这个连续正整数序列是从x开始到y结束,总共有n个数字 //那么S=(x+y)*n/2,且y-x=n-1