loj2253 「SNOI2017」礼物
对于一个在位置 \(i\) 的数,他等于 \(i^k+sum_{1,k-1}\)。
二项式定理推 \(i^k\),矩阵快速幂即可。
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
int k, c[15][15];
ll n;
const int mod=1e9+7;
struct Matrix{
int num[15][15];
Matrix operator*(const Matrix &x)const{
Matrix re;
for(int i=0; i<=k+1; i++)
for(int j=0; j<=k+1; j++){
re.num[i][j] = 0;
for(int l=0; l<=k+1; l++)
re.num[i][j] = (re.num[i][j] + (ll)num[i][l]*x.num[l][j]) % mod;
}
return re;
}
}yua, zhu, dan;
Matrix ksm(ll b){
while(b){
if(b&1) dan = dan * zhu;
zhu = zhu * zhu;
b >>= 1;
}
return dan;
}
int main(){
cin>>n>>k;
for(int i=0; i<=k; i++)
yua.num[0][i] = dan.num[i][i] = 1;
c[0][0] = zhu.num[k][k+1] = dan.num[k+1][k+1] = 1;
for(int i=1; i<=k; i++){
c[i][0] = 1;
for(int j=1; j<=i; j++)
c[i][j] = (c[i-1][j] + c[i-1][j-1]) % mod;
}
for(int i=0; i<=k; i++)
for(int j=i; j<=k; j++)
zhu.num[i][j] = c[j][i];
zhu.num[k+1][k+1] = 2;
Matrix ans=yua*ksm(n-1);
cout<<(ans.num[0][k+1]+ans.num[0][k])%mod<<endl;
return 0;
}
loj2253 「SNOI2017」礼物的更多相关文章
- 「SNOI2017」礼物
题目链接:Click here Solution: 设\(f(x)\)代表第\(x\)个人送的礼物的数量,\(s(x)\)代表\(f(x)\)的前缀和,即: \[ f(x)=s(x-1)+x^k\\ ...
- AC日记——「HNOI2017」礼物 LiBreOJ 2020
#2020. 「HNOI2017」礼物 思路: A题进程: 一眼出式子->各种超时过不去->看题解明白还有fft这个东西->百度文库学习fft->学习dft->学习fft ...
- loj #2255. 「SNOI2017」炸弹
#2255. 「SNOI2017」炸弹 题目描述 在一条直线上有 NNN 个炸弹,每个炸弹的坐标是 XiX_iXi,爆炸半径是 RiR_iRi,当一个炸弹爆炸时,如果另一个炸弹所在位置 X ...
- loj #2254. 「SNOI2017」一个简单的询问
#2254. 「SNOI2017」一个简单的询问 题目描述 给你一个长度为 NNN 的序列 aia_iai,1≤i≤N1\leq i\leq N1≤i≤N,和 qqq 组询问,每组询问读入 l1 ...
- loj#2255. 「SNOI2017」炸弹 线段树优化建图,拓扑,缩点
loj#2255. 「SNOI2017」炸弹 线段树优化建图,拓扑,缩点 链接 loj 思路 用交错关系建出图来,发现可以直接缩点,拓扑统计. 完了吗,不,瓶颈在于边数太多了,线段树优化建图. 细节 ...
- 「SNOI2017」一个简单的询问
「SNOI2017」一个简单的询问 简单的解法 显然可以差分一下. \[get(l,r,x)\times get(l1,r1,x)=get(1,r,x) \times get(1,r1,x)-get( ...
- LOJ——#2256. 「SNOI2017」英雄联盟
https://loj.ac/problem/2256 题目描述 正在上大学的小皮球热爱英雄联盟这款游戏,而且打的很菜,被网友们戏称为「小学生」.现在,小皮球终于受不了网友们的嘲讽,决定变强了,他变强 ...
- 「Poetize9」礼物运送
3055: 礼物运送 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 18 Solved: 12[Submit][Status] Description ...
- LOJ2255. 「SNOI2017」炸弹 (线段树)
本文为线段树做法 (听说可以tarjan缩点+拓扑? 感觉差不多..而且这样看起来方便很多 找到左端点的过程可以看作 点 -> 区间内lowerbound最小的点 -> lowerboun ...
随机推荐
- Linux--NiaoGe-Service-08(路由)
路由 Linux系统下的路由表是由小到大排列的,即C类地址-->B类地址-->A类地址-->0.0.0.0(默认路由). Linux系统中使用route命令查看路由表 [root@w ...
- 本地连接远程Oracle数据库
由于项目开发测试,需要在本地连接远程的Oracle数据库 之前搭过环境,但是重装了系统,现在又重新装一遍 软件安装 连接远程Oracle需要两个软件: 一个Oracle客户端,instantclien ...
- public private protected 三种访问修饰符在c#中的区别
1. public 公有的可见性:在类自身内部可见: 可被子类继承: 类外部可见 2. protected 受保护的可见性:在类自身内部可见: 可被子类继承: 类外部不可见 3. private 私有 ...
- 一行JS搞定快速关机
一.在本地新建一个文件js文件 JS代码: (new ActiveXObject("Shell.Application")).ShutdownWindows(); 二.设置快捷键 ...
- vi 搜索
/ 向下搜索 ? 向上搜索 n 重复前一个搜索 N 反向重复前一个搜索
- ycsb安装和使用介绍
nosql性能测试工具ycsb0.1的使用 使用文档参考地址:https://www.cnblogs.com/SailorXiao/p/5808828.html ycsb地址:https://gith ...
- 在一个工程中同时使用Swift和Objective-C
Swift 与 Objective-C 的兼容能力使你可以在同一个工程中同时使用两种语言.你可以用这种叫做 mix and match 的特性来开发基于混合语言的应用,可以用 Swfit 的最新特性实 ...
- 什么是无符号段整数,什么又是有符号数,(c++与java语言里边的不同)
c++中:整型数分为有符号数和无符号数两种 unsigned int a;无符号整型变量a,意思是这个数最小值为0,最大值为2的32次方-1,因为一个整型数占四个字节,一个字节8位,共32位 int ...
- 文件读写FILE类
1. 新建一个文件: FILE *f = fopen("a.txt","w+"); (1)fopen()函数介绍fopen的原型是:FILE *fopen(co ...
- c++ 读取一行的2个数
#include <iostream> using namespace std; double harmonicMean(double x, double y); int main() { ...