Description

题库链接

给你四个数 \(N,K,M,P\) ,让你生成一段长度为 \(K\) 严格单调递增序列,并且满足:

  1. 第一位可以为任意元素;
  2. 相邻两位的差值不超过 \(M\) ;
  3. 序列中元素大小不超过 \(N\) 。

求满足上述要求不同的生成序列有多少个,对 \(P\) 取模。

\(1\leq N\leq 10^{18},1\leq K,M,P\leq 10^9\)

Solution

其实容易发现,我们可以生成长度为 \(K\) 以增量为元素的序列 \(A\) 。

等价的变成了:

  1. 第一位可以为任意元素;
  2. 其余元素 \(\in [1,M]\) ;
  3. \(\sum\limits_{i=1}^K A_i\leq N\) 。

我们先不考虑第一位元素的选取情况。其余 \(K-1\) 个元素选取情况为 \(M^{K-1}\) 。那么对于每种生成序列 \(A\) ,它第一位可以选的元素 \(\in\left[1,N-\sum\limits_{i=2}^KA_i\right]\) 。

容易发现,每种 \([2,K]\) 位生成序列第一位的情况有 \(N-\sum\limits_{i=2}^KA_i\) 种。记所有 \(2\sim K\) 位生成排列的集合为 \(\mathbb{S}\) 我们枚举生成的排列。那么答案为:\[\sum_{s\in\mathbb{S}}\left(N-\sum\limits_{i=2}^KA_i\right)\]

等价变形为: \[\begin{aligned}&NM^{K-1}-\sum_{s\in\mathbb{S}}\sum\limits_{i=2}^KA_i\\=&NM^{K-1}-(K-1)\frac{1+2+\cdots+M}{2}M^{K-2}\\=&NM^{K-1}-(K-1)\frac{(M+1)M}{2}M^{K-2}\end{aligned}\]

直接求解即可。

Code

//It is made by Awson on 2018.3.10
#include <bits/stdc++.h>
#define LL long long
#define dob complex<double>
#define Abs(a) ((a) < 0 ? (-(a)) : (a))
#define Max(a, b) ((a) > (b) ? (a) : (b))
#define Min(a, b) ((a) < (b) ? (a) : (b))
#define Swap(a, b) ((a) ^= (b), (b) ^= (a), (a) ^= (b))
#define writeln(x) (write(x), putchar('\n'))
#define lowbit(x) ((x)&(-(x)))
using namespace std;
void read(LL &x) {
char ch; bool flag = 0;
for (ch = getchar(); !isdigit(ch) && ((flag |= (ch == '-')) || 1); ch = getchar());
for (x = 0; isdigit(ch); x = (x<<1)+(x<<3)+ch-48, ch = getchar());
x *= 1-2*flag;
}
void print(LL x) {if (x > 9) print(x/10); putchar(x%10+48); }
void write(LL x) {if (x < 0) putchar('-'); print(Abs(x)); } LL n, k, m, p, ans, t; LL quick_pow(LL a, LL b) {
LL ans = 1;
while (b) {
if (b&1) ans = ans*a%p;
a = a*a%p, b >>= 1;
}
return ans;
}
void work() {
read(n), read(k), read(m), read(p); n %= p;
ans = n*quick_pow(m, k-1);
if (m&1) t = (m+1)/2*m%p; else t = m/2*(m+1)%p;
ans = (ans-(k-1)*t%p*quick_pow(m, k-2)%p)%p;
writeln((ans+p)%p);
}
int main() {
work(); return 0;
}

[HNOI 2013]数列的更多相关文章

  1. 图论(网络流):[HNOI 2013]切糕

    [HNOI 2013]切糕 第三题:切糕(程序文件名:cake.exe)100 分,运行时限:5s 经过千辛万苦小A 得到了一块切糕,切糕的形状是长方体,小A 打算拦腰将切糕切成两半分给小B.出于美观 ...

  2. [HNOI 2013]切糕

    COGS 2398. [HNOI 2013]切糕 http://www.cogs.pro/cogs/problem/problem.php?pid=2398 ★★★☆   输入文件:nutcake.i ...

  3. [BZOJ 3144][HNOI 2013] 切糕

    题目大意 切糕是 (p times q times r) 的长方体,每个点有一个违和感 (v_{x, y, z}).先要水平切开切糕(即对于每个纵轴,切面与其有且只有一个交点),要求水平上相邻两点的切 ...

  4. 「HNOI 2013」数列

    题目链接 戳我 \(Solution\) 这道题貌似并不难的样子\(QAQ\) 我们发现这个因为有首项的关系所以有点不太好弄.所以我们要将这个首项对答案的影响给去掉. 我们可以构建一个差分数组,我们令 ...

  5. [HNOI 2013] 旅行 (数学)

    感觉此题难啊,数学还是太渣了,看了半天的题解才算明白了点儿. 题目大意 给一个长度为n且仅由1和-1组成的序列ai, i = 1, 2, ..., n,每个位置都有另一个值vi,要求用某种方案将序列划 ...

  6. [HNOI 2013] 消毒 (搜索,二分图匹配)

    题目大意 一个a * b * c(a * b * c <= 5000)大小的长方体中有一些点需要被覆盖,每次可以选择任意大小的长方体,覆盖其中的点,产生的代价为这个长方体长宽高中最小的那个的长度 ...

  7. [HNOI 2013]游走

    Description 题库链接 一个无向连通图,顶点从 \(1\) 编号到 \(N\) ,边从 \(1\) 编号到 \(M\) . 小Z在该图上进行随机游走,初始时小Z在 \(1\) 号顶点,每一步 ...

  8. [HNOI 2013]比赛

    Description 沫沫非常喜欢看足球赛,但因为沉迷于射箭游戏,错过了最近的一次足球联赛.此次联 赛共N支球队参加,比赛规则如下: (1) 每两支球队之间踢一场比赛. (2) 若平局,两支球队各得 ...

  9. 解题:HNOI 2013 Cards

    题面 除了不洗牌以外,每种洗牌方式的每个循环里的颜色必须一样,然后大力背包一下就好了.最后记得把不洗牌的方案也算进去 #include<cstdio> #include<cstrin ...

随机推荐

  1. 走进webpack(3)-- 小结

    写这一系列的文章,本意是想要梳理一下自己凌乱的webpack知识,只是使用过vue-cli,修改过其中的一部分代码,但是对于一个简单项目从0开始搭建webpack的流程和其中的依赖并不是十分清楚.所以 ...

  2. 软工实践项目需求分析(团队)修改版get√-黄紫仪

    日常前言:随笔距离文档大体完成已经过去了2天+(因为中间插了一波结对作业),所以目测感受没有那时候清晰(那时候烦的想打人了都--)需求分析那边去百度找了模板.emmmm好多东西感觉听都没听说过QAQ, ...

  3. 第十一条:谨慎的覆盖clone()方法

    一个类要想实现克隆,需要实现Cloneable接口,表明这个类的对象具有克隆的功能. Cloneable接口是一个mixin接口,它里面并没有任何的抽象方法,类似的接口有Serializable接口, ...

  4. V7000数据恢复(存储文件系统损坏)案例_北亚数据恢复

    我们今天介绍的数据恢复案例是一起 v7000存储文件系统损坏导致的数据丢失,首先简单介绍一下设备基本情况:发生文件系统损坏的是一台挂载在Windows2003服务器上的v7000存储,划分了一个容量为 ...

  5. AngularJS1.X学习笔记13-路由

    ThinkPHP框架有路由的概念,看起来路由更多的是后端的事情,Angular怎么也会跑出个路由呢?事实上,Angular是着眼于单页应用的,他的一个应用一般来说是一个页面,你所看到的页面内容的改变, ...

  6. c# BinaryWriter 和 BinaryReader

    string path = @"C:\Users\Administrator\Desktop\1.txt"; using (FileStream ws = new FileStre ...

  7. Web Api 接收图片

    public async Task<HttpResponseMessage> Upload() { if (!Request.Content.IsMimeMultipartContent( ...

  8. node请求下载接口时乱码

    先说下问题 之前做的一个项目,三端同时开发(PC.WEB.APP),由于架构方面的原因,服务均不对外开放,接口地址自然也就不对外暴露了,所有请求都要经过node转发,此为背景.... 网站有个扫描二维 ...

  9. Ubuntu下安装最新sublime

    1. Install the GPG key: wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key ...

  10. Trensient的使用介绍

    1. transient的作用及使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过 ...