http://uoj.ac/problem/124

矩阵乘法。

十进制快速幂。

刚开始还傻傻地写二进制快速幂,然后陈老师一语点醒梦中人......

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<fstream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<utility>
#include<set>
#include<bitset>
#include<vector>
#include<functional>
#include<deque>
#include<cctype>
#include<climits>
#include<complex>
//#include<bits/stdc++.h>适用于CF,UOJ,但不适用于pojusing namespace std;typedef long long LL;
typedef double DB;
typedef pair<int,int> PII;
typedef complex<DB> CP;#define mmst(a,v) memset(a,v,sizeof(a))
#define mmcy(a,b) memcpy(a,b,sizeof(a))
#define re(i,a,b)  for(i=a;i<=b;i++)
#define red(i,a,b) for(i=a;i>=b;i--)
#define fi first
#define se second
#define m_p(a,b) make_pair(a,b)
#define SF scanf
#define PF printf
#define two(k) (1<<(k))template<class T>inline T sqr(T x){return x*x;}
template<class T>inline void upmin(T &t,T tmp){if(t>tmp)t=tmp;}
template<class T>inline void upmax(T &t,T tmp){if(t<tmp)t=tmp;}const DB EPS=1e-9;
inline int sgn(DB x){if(abs(x)<EPS)return 0;return(x>0)?1:-1;}
const DB Pi=acos(-1.0);inline void clear(vector<int> *A,int a,int b){int i,j;A->clear();re(i,0,a)re(j,0,b)A[i].push_back(0);}inline int gint(){int res=0;bool neg=0;char z;for(z=getchar();z!=EOF && z!='-' && !isdigit(z);z=getchar());if(z==EOF)return 0;if(z=='-'){neg=1;z=getchar();}for(;z!=EOF && isdigit(z);res=res*10+z-'0',z=getchar());return (neg)?-res:res; }
inline LL gll(){LL res=0;bool neg=0;char z;for(z=getchar();z!=EOF && z!='-' && !isdigit(z);z=getchar());if(z==EOF)return 0;if(z=='-'){neg=1;z=getchar();}for(;z!=EOF && isdigit(z);res=res*10+z-'0',z=getchar());return (neg)?-res:res;}const LL Mod=1000000007;
const int maxlen=1000000;char N[maxlen+1000],M[maxlen+100];
LL a,b,c,d;struct Tmatrix{LL v[3][3];inline void clear(){mmst(v,0);}inline friend Tmatrix operator *(const Tmatrix &a,const Tmatrix &b){Tmatrix c;c.v[1][1]=(a.v[1][1]*b.v[1][1]+a.v[1][2]*b.v[2][1])%Mod;c.v[1][2]=(a.v[1][1]*b.v[1][2]+a.v[1][2]*b.v[2][2])%Mod;c.v[2][1]=(a.v[2][1]*b.v[1][1]+a.v[2][2]*b.v[2][1])%Mod;c.v[2][2]=(a.v[2][1]*b.v[1][2]+a.v[2][2]*b.v[2][2])%Mod;return c;}};inline void minus1(char *A){int i,t;for(t=1;A[t]=='0';t++);re(i,1,t-1)A[i]='9';A[t]--;}Tmatrix f1,f2,f1n,g;Tmatrix A[maxlen+100];
inline Tmatrix power2(Tmatrix a,int k){Tmatrix x,y=a;x.v[1][1]=1;x.v[1][2]=0;x.v[2][1]=0;x.v[2][2]=1;while(k!=0){if(k&1)x=x*y;y=y*y;k>>=1;}return x;}
inline Tmatrix power(Tmatrix a,char *K){int i,l=strlen(K+1);A[1]=a;re(i,2,l)A[i]=power2(A[i-1],10);Tmatrix x;x.v[1][1]=1;x.v[1][2]=0;x.v[2][1]=0;x.v[2][2]=1;re(i,1,l)x=x*power2(A[i],K[i]-'0');return x;}int main(){freopen("matrix.in","r",stdin);freopen("matrix.out","w",stdout);int i,l;SF("%s",N+1);l=strlen(N+1);re(i,1,l/2)swap(N[i],N[l-i+1]);SF("%s",M+1);l=strlen(M+1);re(i,1,l/2)swap(M[i],M[l-i+1]);a=gint();b=gint();c=gint();d=gint();f1.v[1][1]=a;f1.v[1][2]=b;f1.v[2][1]=0;f1.v[2][2]=1;f2.v[1][1]=c;f2.v[1][2]=d;f2.v[2][1]=0;f2.v[2][2]=1;minus1(M);minus1(N);f1n=power(f1,M);g=f2*f1n;g=power(g,N);g=f1n*g;cout<<(g.v[1][1]+g.v[1][2])%Mod<<endl;      }

View Code

转载于:https://www.cnblogs.com/maijing/p/4686947.html

NOI 2013 矩阵游戏相关推荐

  1. [ZJOI2007]棋盘制作 报表统计 矩阵游戏 时态同步

    好长时间了..简要除草. 棋盘制作:经典dp... 报表统计:明显数据结构,,,但我没想出来,第一问可以用堆,第二问用平衡树. 矩阵游戏:好吧.一眼二分图,匈牙利过. 时态同步:树形dp,貌似不难,( ...

  2. BZOJ 3240([Noi2013]矩阵游戏-费马小定理【矩阵推论】-%*s-快速读入)

    3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec   Memory Limit: 256 MB Submit: 123   Solved: 73 [ Submit][ St ...

  3. BZOJ 3240 [Noi2013] 矩阵游戏 题解

    转载请注明:http://blog.csdn.net/jiangshibiao/article/details/24594825 [原题] 3240: [Noi2013]矩阵游戏 Time Limit ...

  4. bzoj1059: [ZJOI2007]矩阵游戏

    1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 4748  Solved: 2264 [Submit][St ...

  5. [ZJOI2007]矩阵游戏

    来源:牛客网: 题目描述 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏--矩阵游戏.矩阵游戏在一个N *N黑白方阵进行(如同国际象棋一般,只是颜色是随意的). 每次可以对该矩阵 ...

  6. NOIP模拟测试13「矩阵游戏·跳房子·优美序列」

    矩阵游戏 考试时思路一度和正解一样,考试到最后还是打了80分思路,结果80分打炸了只得了40分暴力分 题解 算出来第一列的总值,每次通过加每两列之间的差值得出下一列的总值 算第一列我们只需要让当前点* ...

  7. 【BZOJ - 1059】矩阵游戏(二分图匹配,建图,最小边覆盖)

    题干: 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏--矩阵游戏.矩阵游戏在一个N *N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作:行交换 ...

  8. [bzoj1059]矩阵游戏

    虽然是一道水难题,但是我这种蒟蒻还是要讲一讲的. Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏--矩阵游戏.矩阵游戏在一个N *N黑白方阵进行(如同国际 ...

  9. 洛谷 P1129 [ZJOI2007]矩阵游戏 解题报告

    P1129 [ZJOI2007]矩阵游戏 题目描述 小\(Q\)是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏――矩阵游戏.矩阵游戏在一个\(N*N\)黑白方阵进行(如同国际象棋一般 ...

最新文章

  1. 6.ajax应用,ajax应用
  2. 网络:TCP粘包问题?如何解决?
  3. 【温故知新】CSS学习笔记(显示模式简介)
  4. nyoj 791 Color the fence(贪心)
  5. 17 FI配置-财务会计-定义雇员的容差组
  6. pytorch根据特征图训练LSTM Stacked AutoEncoder
  7. BioSPPy - Biosignal(生物信号处理库)
  8. Lync 小技巧-26-由于服务器连接问题,一些演示功能不可用
  9. weibinv matlab,利用MATLAB进行夫琅和费衍射
  10. T检验、F检验和统计学意义(P值或sig值)
  11. 电脑使用过程中“xx指令引用的xx内存。该内存不能为written或read”的解决方案!
  12. 修正半透明头发的渲染异常
  13. 软件需求分析的五个步骤_建立满足用户需求的云的5个步骤
  14. 声纹识别开源工具 ASV-Subtools
  15. PostgreSQL JIT(Just-In-Time Compilation)With LLVM 的实现原理
  16. CentOS-7安装Cinnamon Desktop
  17. 转:招聘就是战略,洞察面试三板斧
  18. java minma_Java Core.minMaxLoc方法代码示例
  19. 使用Wireshark抓包软件提示The NPF driver isn’t running解决办法
  20. ARM嵌入式开发板学习路线指引

热门文章

  1. 中国大气污染影响韩国?生态环境部这样反驳
  2. 图的单源最短路径,Floyd算法(数据结构c++)
  3. 关于arduino和zigbee串口16进制通信问题
  4. Atitit.js跨域解决方案attilax大总结 后台java php c#.net的CORS支持
  5. oc 自定义导航栏背景
  6. overflow:hidden;zoom:1 理解转__
  7. jquery 半透明遮罩效果 小结
  8. “二子乘舟”的故事很难讲
  9. mysql_connect() 不支持 请检查 mysql 模块是否正确加载
  10. Java实现自动生成Mysql数据库表实体类