(VIJOS) VOJ 1067 Warcraft III 守望者的烦恼 矩阵快速幂
2024-08-27 21:31:04
就..挺普通的一道题..自己学一下怎么推式子就可以...细节不多但是我还是日常爆细节..比如说循环写成从负数开始...
只求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 ;
}
最新文章
- 使用PhoneGap开启移动开发之旅
- Linux(centos)的常用基本命令
- escape()、encodeURI()、encodeURIComponent() difference
- IOS 中的KVO模式 观察者模式
- 关于ThreadLocal
- sql2012安装过程中出现个一个问题
- bzoj1706
- (step7.2.3)hdu 2554(N对数的排列问题——简单数论)
- How to change from default to alternative Python version on Debian Linux
- CSS---内外边距
- DjangoRestFramework学习二之序列化组件、视图组件 serializer modelserializer
- Jenkins部署net core小记
- JAVA 获取指定网址的IP地址 实例
- asp.net mvc cshtml (VIEWS)中怎么提供URL参数:
- 通过impala更改Kudu表属性
- [转]Ubuntu18.04搜狗拼音输入法候选栏乱码解决方法
- SQL SERVER2008判断文件夹是否存在并创建文件夹
- WPS, 破解WPA/WPA2密钥的捷径
- python之模块chunk,了解即可
- Android Studio 换主题(Material Theme..)