https://vijos.org/p/1067

 
就..挺普通的一道题..自己学一下怎么推式子就可以...细节不多但是我还是日常爆细节..比如说循环写成从负数开始...
 
只求ac不求美观的丑陋的代码....
 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
const int maxn=;
const double eps=1e-;
const long long modn=;
int n,m;
long long f[]={};
struct mat{
long long e[][];
};
mat pro(mat x,mat y){
mat z;
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
z.e[i][j]=;
for(int w=;w<=n;w++){
z.e[i][j]+=x.e[i][w]*y.e[w][j];
z.e[i][j]%=modn;
}
}
}
return z;
}
mat pow(mat x,int k){
mat z;
bool f=;
while(k){
if(k%==){
if(f){
z=x;f=;
}
else{
z=pro(x,z);
}
}
k/=;
x=pro(x,x);
}
return z;
}
int main(){
while(~scanf("%d%d",&n,&m)){
f[]=;
for(int i=;i<=n;i++){
f[i]=;
for(int j=;j<i;j++){
f[i]+=f[j];
}
f[i]%=modn;
}
if(m>n){
mat a;
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
a.e[i][j]=;
}
}
for(int i=;i<n;i++){
a.e[i][i+]=;
a.e[n][i]=;
}a.e[n][n]=;
a=pow(a,m-n+);
long long ans=;
for(int i=;i<=n;i++){
ans+=a.e[n][i]*f[i-];
ans%=modn;
}
printf("%lld\n",ans);
}
else{
cout<<f[m]<<endl;
}
}
return ;
}

最新文章

  1. 使用PhoneGap开启移动开发之旅
  2. Linux(centos)的常用基本命令
  3. escape()、encodeURI()、encodeURIComponent() difference
  4. IOS 中的KVO模式 观察者模式
  5. 关于ThreadLocal
  6. sql2012安装过程中出现个一个问题
  7. bzoj1706
  8. (step7.2.3)hdu 2554(N对数的排列问题——简单数论)
  9. How to change from default to alternative Python version on Debian Linux
  10. CSS---内外边距
  11. DjangoRestFramework学习二之序列化组件、视图组件 serializer modelserializer
  12. Jenkins部署net core小记
  13. JAVA 获取指定网址的IP地址 实例
  14. asp.net mvc cshtml (VIEWS)中怎么提供URL参数:
  15. 通过impala更改Kudu表属性
  16. [转]Ubuntu18.04搜狗拼音输入法候选栏乱码解决方法
  17. SQL SERVER2008判断文件夹是否存在并创建文件夹
  18. WPS, 破解WPA/WPA2密钥的捷径
  19. python之模块chunk,了解即可
  20. Android Studio 换主题(Material Theme..)

热门文章

  1. 【洛谷 P2764】 最小路径覆盖问题(最大流)
  2. 实现字符串检索strstr函数、字符串长度strlen函数、字符串拷贝strcpy函数
  3. 天梯赛 L2-009 抢红包
  4. PHP数据库类
  5. 75.VS2013和opencv3.1.0开发环境配置
  6. MySQL删除数据几种情况以及是否释放磁盘空间【转】
  7. 大数据系列之Kafka安装
  8. Django 1.10文档中文版Part1
  9. Django自定义UserModel并实现认证和登录
  10. Linux 不常用命令总结