【题目大意】

若用F[i][j]来表示矩阵中第i行第j列的元素,则F[i][j]满足下面的递推式:
F[1][1]=1
F[i,j]=a*F[i][j-1]+b (j!=1)①
F[i,1]=c*F[i-1][m]+d (i!=1)②
递推式中a,b,c,d都是给定的常数。求F[n][m]。

【思路】

磨了一个早上,然而UOJ上的额外数据还没有过去..BZOJ上已AC先放上来,后续慢慢磨……

*还有一点,最后输出答案的时候要先+MOD再%MOD。

*MOD要勤快一点,不然会爆。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #define MOD 1000000007
  6. using namespace std;
  7. typedef long long ll;
  8. const int MAXN=+;
  9. struct node
  10. {
  11. ll uni,ord;//uni表示a≠1,ord表示a=1
  12. }n,m;
  13. ll a,b,c,d;
  14.  
  15. ll quick(ll x,ll p)
  16. {
  17. ll res=p,retu=,now=x;
  18. while (res>)
  19. {
  20. if (res&) retu=(retu*now) % MOD;
  21. now=(now*now) % MOD;
  22. res>>=;
  23. }
  24. return retu;
  25. }
  26.  
  27. ll ni(ll x)
  28. {
  29. return quick(x,MOD-);
  30. }
  31.  
  32. node get_value(char str[])
  33. {
  34. int len=strlen(str);
  35. node ret=(node){,};
  36. for (int i=;i<len;i++)
  37. {
  38. ret.uni=((ret.uni*)%(MOD-)+str[i]-'')%(MOD-);
  39. ret.ord=((ret.ord*)%MOD+str[i]-'')%MOD;
  40. }
  41. return ret;
  42. }
  43.  
  44. void init()
  45. {
  46. char strm[MAXN],strn[MAXN];
  47. scanf("%s%s",strn,strm);
  48. n=get_value(strn);
  49. m=get_value(strm);
  50. scanf("%lld%lld%lld%lld",&a,&b,&c,&d);
  51. }
  52.  
  53. void get_ans()
  54. {
  55. ll f;//=f[n+1][1]
  56. if (a==)
  57. {
  58. ll D=((((c*(m.ord-))%MOD)*b)%MOD+d)%MOD;
  59. if (c==) f=(+n.ord*D)%MOD;
  60. else
  61. {
  62. ll cn=quick(c,n.uni);
  63. f=(cn+(D*(cn-)*ni(c-)%MOD))%MOD;
  64. }
  65. }
  66. if (a!=)
  67. {
  68. ll am=quick(a,m.uni-);
  69. ll A=(am*c)%MOD;
  70. ll B=(((((b*c)%MOD*(am-))%MOD*ni(a-)))%MOD+d)%MOD;
  71. ll An=quick(A,n.uni);
  72. f=An+((B*(An-)%MOD)*ni(A-))%MOD;
  73. }
  74. printf("%lld",((f-d)*ni(c)%MOD+MOD)%MOD);
  75. }
  76.  
  77. int main()
  78. {
  79. init();
  80. get_ans();
  81. return ;
  82. }

【费马小定理+快速幂+逆元】BZOJ3240-[NOI2013]矩阵游戏的更多相关文章

  1. BZOJ_[HNOI2008]_Cards_(置换+Burnside引理+乘法逆元+费马小定理+快速幂)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1004 共n个卡片,染成r,b,g三种颜色,每种颜色的个数有规定.给出一些置换,可以由置换得到的 ...

  2. hdu1576-A/B-(同余定理+乘法逆元+费马小定理+快速幂)

    A/B Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  3. 数论 --- 费马小定理 + 快速幂 HDU 4704 Sum

    Sum Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=4704 Mean: 给定一个大整数N,求1到N中每个数的因式分解个数的 ...

  4. 2014多校第一场 I 题 || HDU 4869 Turn the pokers(费马小定理+快速幂模)

    题目链接 题意 : m张牌,可以翻n次,每次翻xi张牌,问最后能得到多少种形态. 思路 :0定义为反面,1定义为正面,(一开始都是反), 对于每次翻牌操作,我们定义两个边界lb,rb,代表每次中1最少 ...

  5. hdu_4869(费马小定理+快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4869 Turn the pokers Time Limit: 2000/1000 MS (Java/O ...

  6. hdu4549(费马小定理 + 快速幂)

    M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给出a, b, n,你能求出F[n ...

  7. HDU 4704 Sum(隔板原理+组合数求和公式+费马小定理+快速幂)

    题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=4704 Problem Description   Sample Input 2 Sample Outp ...

  8. 牛客训练四:Applese 涂颜色(费马小定理+快速幂)

    题目链接:传送门 思路: 考虑每一列有2种颜色,总共有n行,每一行的第一个格确定颜色,由于左右颜色不相同,后面的行就确定了. 所以总共有2^n中结果. 由于n太大,所以要用到费马小定理a^n%mod= ...

  9. hdu 4704 sum(费马小定理+快速幂)

    题意: 这题意看了很久.. s(k)表示的是把n分成k个正整数的和,有多少种分法. 例如: n=4时, s(1)=1     4 s(2)=3     1,3      3,1       2,2 s ...

随机推荐

  1. Codeforces Round #487 (Div. 2) A Mist of Florescence (暴力构造)

    C. A Mist of Florescence time limit per test 1 second memory limit per test 256 megabytes input stan ...

  2. 用@Component注解代替@Configuration注解,定义bean

    package com.timo.entity; import org.springframework.beans.factory.annotation.Value; import org.sprin ...

  3. mysql 存在update不存在insert

    如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE:如果不 ...

  4. MySQL主主搭建

    1.在MySQL主从的基础上修改: #master1上 [mysqld] server-id=101 log-bin = mysql-bin auto-increment-increment = 2 ...

  5. Linux 通过ssh传输文件

    一.scp是什么? scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响 ...

  6. python学习 - yield

    def myYield2(): for i in range(3): yield '2222 i am in myYield2', 'i = ', i def myYield(): for i in ...

  7. git应用基础配置

    1.注册github账号.注册的时候会要求输入用户名和email这是配置git必须的要素 2.在使用git的时候首先需要把注册时候配合的用户名和密码填在git仓库的配置文件里,如下 harvey@ha ...

  8. [ Openstack ] Openstack-Mitaka 高可用之 Rabbitmq-server 集群部署

    目录 Openstack-Mitaka 高可用之 概述    Openstack-Mitaka 高可用之 环境初始化    Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...

  9. vue + vue-router + vue-resource 基于vue-cli脚手架 --->笔记

    ps: 基于Vue2.0 npm的vue-cli脚手架 在vue-router中路由路径的简写代码: 点击打开项目 > build > webpack.base.conf.js 找到web ...

  10. hdu 1498(最小点覆盖集)

    50 years, 50 colors Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...