博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[NOI2012]随机数生成器
阅读量:5055 次
发布时间:2019-06-12

本文共 970 字,大约阅读时间需要 3 分钟。

题解:

很显然是一道矩阵优化dp

然而表示我很智障地把式子一个个带入

然后就发现了为什么会有那些部分分(大概用扩欧是70吧)

注意用矩阵计算的时候要用快速乘(当然想写高精那也随便,时间无限宽裕)

代码:

#include 
using namespace std;#define ll long longll m,aa,c,x,n,g,mo1;struct re{ ll jz[3][3];}a;ll ksc(ll x,ll y){ if (y==0) return(0); if (y==1) return(x); ll tmp=ksc(x,y/2); tmp=(tmp*2)%mo1; if (y%2==1) tmp=(tmp+x)%mo1; return(tmp);}re XX(re x,re y){ re tmp; memset(tmp.jz,0,sizeof(tmp.jz)); for (ll i=1;i<=2;i++) for (ll j=1;j<=2;j++) for (ll k=1;k<=2;k++) tmp.jz[i][k]+=ksc(x.jz[i][j],y.jz[j][k]), tmp.jz[i][k]%=mo1; return(tmp);}re fast_pow(ll x){ if (x==1) return(a); re b=fast_pow(x/2); b=XX(b,b); if (x%2) b=XX(b,a); return(b);}int main(){ cin>>mo1>>aa>>c>>x>>n>>g; a.jz[1][1]=aa; a.jz[1][2]=c; a.jz[2][1]=0; a.jz[2][2]=1; re cc=fast_pow(n); ll ans=((ksc(cc.jz[1][1],x)+cc.jz[1][2])%mo1)%g; cout<

 

转载于:https://www.cnblogs.com/yinwuxiao/p/8573039.html

你可能感兴趣的文章
自定义tabbar(纯代码)
查看>>
小程序底部导航栏
查看>>
ibatis学习笔记
查看>>
18-ES6(1)
查看>>
poj1611 简单并查集
查看>>
Ubuntu 14.04下安装CUDA8.0
查看>>
跨平台开发 -- C# 使用 C/C++ 生成的动态链接库
查看>>
C# BS消息推送 SignalR介绍(一)
查看>>
WPF星空效果
查看>>
WPF Layout 系统概述——Arrange
查看>>
PIGOSS
查看>>
几款Http小服务器
查看>>
iOS 数组排序
查看>>
第三节
查看>>
PHP结合MYSQL记录结果分页呈现(比较实用)
查看>>
Mysql支持的数据类型
查看>>
openSuse beginner
查看>>
Codeforces 620E(线段树+dfs序+状态压缩)
查看>>
Windows7中双击py文件运行程序
查看>>
Market entry case
查看>>