[HNOI 2013]数列
Description
给你四个数 \(N,K,M,P\) ,让你生成一段长度为 \(K\) 严格单调递增序列,并且满足:
- 第一位可以为任意元素;
- 相邻两位的差值不超过 \(M\) ;
- 序列中元素大小不超过 \(N\) 。
求满足上述要求不同的生成序列有多少个,对 \(P\) 取模。
\(1\leq N\leq 10^{18},1\leq K,M,P\leq 10^9\)
Solution
其实容易发现,我们可以生成长度为 \(K\) 以增量为元素的序列 \(A\) 。
等价的变成了:
- 第一位可以为任意元素;
- 其余元素 \(\in [1,M]\) ;
- \(\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]数列的更多相关文章
- 图论(网络流):[HNOI 2013]切糕
[HNOI 2013]切糕 第三题:切糕(程序文件名:cake.exe)100 分,运行时限:5s 经过千辛万苦小A 得到了一块切糕,切糕的形状是长方体,小A 打算拦腰将切糕切成两半分给小B.出于美观 ...
- [HNOI 2013]切糕
COGS 2398. [HNOI 2013]切糕 http://www.cogs.pro/cogs/problem/problem.php?pid=2398 ★★★☆ 输入文件:nutcake.i ...
- [BZOJ 3144][HNOI 2013] 切糕
题目大意 切糕是 (p times q times r) 的长方体,每个点有一个违和感 (v_{x, y, z}).先要水平切开切糕(即对于每个纵轴,切面与其有且只有一个交点),要求水平上相邻两点的切 ...
- 「HNOI 2013」数列
题目链接 戳我 \(Solution\) 这道题貌似并不难的样子\(QAQ\) 我们发现这个因为有首项的关系所以有点不太好弄.所以我们要将这个首项对答案的影响给去掉. 我们可以构建一个差分数组,我们令 ...
- [HNOI 2013] 旅行 (数学)
感觉此题难啊,数学还是太渣了,看了半天的题解才算明白了点儿. 题目大意 给一个长度为n且仅由1和-1组成的序列ai, i = 1, 2, ..., n,每个位置都有另一个值vi,要求用某种方案将序列划 ...
- [HNOI 2013] 消毒 (搜索,二分图匹配)
题目大意 一个a * b * c(a * b * c <= 5000)大小的长方体中有一些点需要被覆盖,每次可以选择任意大小的长方体,覆盖其中的点,产生的代价为这个长方体长宽高中最小的那个的长度 ...
- [HNOI 2013]游走
Description 题库链接 一个无向连通图,顶点从 \(1\) 编号到 \(N\) ,边从 \(1\) 编号到 \(M\) . 小Z在该图上进行随机游走,初始时小Z在 \(1\) 号顶点,每一步 ...
- [HNOI 2013]比赛
Description 沫沫非常喜欢看足球赛,但因为沉迷于射箭游戏,错过了最近的一次足球联赛.此次联 赛共N支球队参加,比赛规则如下: (1) 每两支球队之间踢一场比赛. (2) 若平局,两支球队各得 ...
- 解题:HNOI 2013 Cards
题面 除了不洗牌以外,每种洗牌方式的每个循环里的颜色必须一样,然后大力背包一下就好了.最后记得把不洗牌的方案也算进去 #include<cstdio> #include<cstrin ...
随机推荐
- C语言程序设计(基础)- 第2周作业
1.阅读提问的智慧,要求仔细阅读链接内容,用自己的话描述你的收获,并举例子说明应该如何提问. 2.所有同学请在自己电脑上配置git.编译器(win10 系统的话就Dev-C++).翻译软件,十一回校后 ...
- 冲刺No.3
Alpha冲刺第三天 站立式会议 项目进展 今日团队对CSS与JS的基础知识进行了应用,并对网站的UI设计进行了讨论,对数据库设计进行了进一步的探讨,基本确立了各个表单的结构和内容.分割出项目基本模块 ...
- Linux进程间通信--信号量
信号量绝对不同于信号,一定要分清,关于信号,上一篇博客中已经说过,如有疑问,请移驾! 信号量 一.是什么 信号量的本质是一种数据操作锁,它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件 ...
- 20145237 《Java程序设计》第九周学习总结
20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...
- Django 个性化管理员站点
from django.contrib import admin # Register your models here. from .models import Moment class Momen ...
- 【iOS】Swift if let 和 if var
if let unwrappedOptional = postDict { print("The optional has a value! It's \(unwrappedOptional ...
- OpenGL中怎么把世界坐标系变成屏幕坐标系
对这个3D坐标手动进行OpenGL的四个变换,得到的结果就是屏幕上的像素坐标.前三个变换(Model, View, Projection)都是4x4矩阵,操作对象是四维向量,所以需要把(100, 10 ...
- JAVA_SE基础——13.选择结构语句
if选择结构 语法: if(条件){ 代码块 } public class Test{ public static void main(String[] args){ int a = 5; if(a ...
- Python内置函数(34)——filter
英文文档: filter(function, iterable) Construct an iterator from those elements of iterable for which fun ...
- Python内置函数(11)——complex
英文文档: class complex([real[, imag]]) Return a complex number with the value real + imag*1j or convert ...