博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[NOI2013]矩阵游戏
阅读量:4543 次
发布时间:2019-06-08

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

Bzoj 3240

据学长的话来说

这是当年noi最简单的一道题

于是抱着试一试的心态做了一做
蒟蒻QAQ


如何实现?

这里写图片描述

由于矩阵乘法不会,只能数学必修的种数列知识推公式;
先横向推

(fx+k)=a(fx1+k)

展开就可以得到一个等比数列;
然后根据等比数列的性质可得:

fx=ax1f1+b(ax11)/(a1)

至此我们完成了将每行的最后一个用第一个表示

再根据第三个条件,同理可得:

fi+1=am1cfi+bc(am11)/(a1)+d

这里我们可以得到每一列的第i个如何用第i-1表示;

那么再将这个公式的系数看成一个整体,又是一个等比数列

直接再用第一个公式算出f(n,m);

f(n,m


注意事项

因为主人公婷婷是十分残暴的,数据范围很扎心;

那么我们知道

          

am=ammodφ(p)

所以在读入的时候我们需要处理一对用于乘法的n,m和一对用于幂的n,m;

 φ(mod)=mod1

最后再啰嗦一句,就是逆元处理

#include 
#include
#include
#include
#define LL long long #define mod 1000000007using namespace std;struct node{ LL mul,pow;}n,m;LL a,b,c,d,aa,bb,ans;LL xx,yy;void read(node &x){ char ch=getchar(); while(ch>'9'||ch<'0')ch=getchar(); while(ch<='9'&&ch>='0'){ x.mul=(x.mul*10+ch-'0')%mod; x.pow=(x.pow*10+ch-'0')%(mod-1); ch=getchar(); }}LL ksm(LL x,LL y){ LL rtn=1; while(y){ if(y&1)rtn=(rtn*x)%mod; x=(x*x)%mod; y>>=1; } return rtn; }void getinv(LL a,LL b){ if(!b){xx=1,yy=0;return;} getinv(b,a%b); LL tmp=xx; xx=yy; yy=tmp-(a/b)*yy;}int main(){#ifdef YSW freopen("In.txt","r",stdin);#endif read(n);read(m); scanf("%d%d%d%d",&a,&b,&c,&d); aa=a,bb=b; if(a==1){ a=c; b=((m.mul-1)*b%mod*c%mod+d)%mod; } else{ getinv(a-1,mod); LL k=(b*(xx%mod+mod)%mod)%mod; LL t=ksm(a,(m.pow-1+mod-1)%(mod-1)); a=t*c%mod; b=(k*(t-1)%mod*c%mod+d)%mod; } if(a==1){ a=1; b=b*(n.mul-1)%mod; } else{ getinv(a-1,mod); LL k=(b*(xx+mod)%mod)%mod; LL t=ksm(a,(n.pow-1+mod-1)%(mod-1)); a=t; b=k*(t-1)%mod; } LL f1=(a+b)%mod; if(aa==1){ ans=(f1+(m.mul-1)*bb%mod)%mod; } else{ getinv(aa-1,mod); LL k=(bb*(xx+mod)%mod)%mod; LL t=ksm(aa,(m.pow-1+mod-1)%(mod-1)); aa=t; bb=k*(t-1)%mod; LL tmp=aa*f1%mod; ans=(tmp+bb)%mod; } printf("%lld",ans); return 0; }

 

转载于:https://www.cnblogs.com/DexterYsw/p/7136254.html

你可能感兴趣的文章
mvc中使用uploadify批量上传的应用
查看>>
Kibana查询说明
查看>>
[AHOI 2009]chess 中国象棋
查看>>
UVA 11990 ”Dynamic“ Inversion(线段树+树状数组)
查看>>
Hibernate学习四----------Blob
查看>>
CTF-练习平台-Misc之 中国菜刀,不再web里?
查看>>
Mac系统配置JDK环境变量
查看>>
多项式累加
查看>>
剑指offer(18)二叉搜索树的后续遍历
查看>>
微信小程序一笔记账开发进度四
查看>>
bzoj 1070 费用流
查看>>
201671010139 徐楠 第四周总结
查看>>
JAVA链表简单实现
查看>>
[转载]T-SQL(MSSQL)语句查询执行顺序
查看>>
SignalR 行实时通信最大连接数
查看>>
开发进度6
查看>>
php方法重载
查看>>
三次握手和四次挥手(二)
查看>>
MySQL中的索引
查看>>
Android开发之手势滑动(滑动手势监听)详解
查看>>