题目传送门

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long ll;
  5. typedef vector<ll> Vec;
  6. typedef vector<Vec> Mat;
  7. const int N = 55;
  8. const int INF = 0x3f3f3f3f;
  9. const int MOD = 1e9 + 7;
  10. int n, m;
  11. int a[N];
  12. int dp[N][N];
  13.  
  14. bool judge(int x, int y) {
  15. char p[15], q[15];
  16. sprintf(p, "%d", x);
  17. sprintf(q, "%d", y);
  18. int lenp = strlen(p), lenq = strlen(q);
  19. for (int i=0; i<lenp; ++i) {
  20. int k = 0;
  21. while (i + k < lenp && k < lenq && p[i+k] == q[k]) k++;
  22. if (i + k == lenp && k >= 2) return true;
  23. }
  24. return false;
  25. }
  26.  
  27. void add_mod(ll &a, ll b) {
  28. a += b;
  29. if (a >= MOD) a -= MOD;
  30. }
  31.  
  32. Mat matrix_mul(const Mat &A, const Mat &B) {
  33. Mat ret(A.size(), Vec(B[0].size()));
  34. for (int i=0; i<A.size(); ++i)
  35. for (int j=0; j<A[0].size(); ++j) if (A[i][j])
  36. for (int k=0; k<B[0].size(); ++k) if (B[j][k])
  37. add_mod(ret[i][k], A[i][j]*B[j][k]%MOD);
  38. return ret;
  39. }
  40.  
  41. Mat matrix_pow(Mat X, int n) {
  42. Mat ret(X.size(), Vec(X.size()));
  43. for (int i=0; i<X.size(); ++i) ret[i][i] = 1;
  44. for (; n; n>>=1) {
  45. if (n & 1) ret = matrix_mul(ret, X);
  46. X = matrix_mul(X, X);
  47. }
  48. return ret;
  49. }
  50.  
  51. Mat get_base() {
  52. Mat ret(n, Vec(n));
  53. for (int i=0; i<n; ++i) {
  54. for (int j=0; j<n; ++j) {
  55. if (judge(a[i], a[j])) ret[i][j] = 1;
  56. }
  57. }
  58. return ret;
  59. }
  60.  
  61. int main() {
  62. int T;
  63. scanf("%d", &T);
  64. while (T--) {
  65. scanf("%d%d", &n, &m);
  66. for (int i=0; i<n; ++i) {
  67. scanf("%d", &a[i]);
  68. }
  69. sort(a, a+n);
  70. n = unique(a, a+n)-a;
  71. Mat base = get_base();
  72. Mat res = matrix_pow(base, m-1);
  73. ll ans = 0;
  74. for (int i=0; i<n; ++i) {
  75. for (int j=0; j<n; ++j) {
  76. add_mod(ans, res[i][j]);
  77. }
  78. }
  79. printf("%lld\n", ans);
  80. }
  81. return 0;
  82. }

  

DP+矩阵快速幂 HDOJ 5318 The Goddess Of The Moon的更多相关文章

  1. bnuoj 34985 Elegant String DP+矩阵快速幂

    题目链接:http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=34985 We define a kind of strings as elegant s ...

  2. HDU 5434 Peace small elephant 状压dp+矩阵快速幂

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5434 Peace small elephant  Accepts: 38  Submissions: ...

  3. 【BZOJ】2004: [Hnoi2010]Bus 公交线路 状压DP+矩阵快速幂

    [题意]n个点等距排列在长度为n-1的直线上,初始点1~k都有一辆公车,每辆公车都需要一些停靠点,每个点至多只能被一辆公车停靠,且每辆公车相邻两个停靠点的距离至多为p,所有公车最后会停在n-k+1~n ...

  4. 【BZOJ】4861: [Beijing2017]魔法咒语 AC自动机+DP+矩阵快速幂

    [题意]给定n个原串和m个禁忌串,要求用原串集合能拼出的不含禁忌串且长度为L的串的数量.(60%)n,m<=50,L<=100.(40%)原串长度为1或2,L<=10^18. [算法 ...

  5. BZOJ5298 CQOI2018 交错序列 【DP+矩阵快速幂优化】*

    BZOJ5298 CQOI2018 交错序列 [DP+矩阵快速幂优化] Description 我们称一个仅由0.1构成的序列为"交错序列",当且仅当序列中没有相邻的1(可以有相邻 ...

  6. Codeforces 621E Wet Shark and Block【dp + 矩阵快速幂】

    题意: 有b个blocks,每个blocks都有n个相同的0~9的数字,如果从第一个block选1,从第二个block选2,那么就构成12,问对于给定的n,b有多少种构成方案使最后模x的余数为k. 分 ...

  7. codeforces E. Okabe and El Psy Kongroo(dp+矩阵快速幂)

    题目链接:http://codeforces.com/contest/821/problem/E 题意:我们现在位于(0,0)处,目标是走到(K,0)处.每一次我们都可以从(x,y)走到(x+1,y- ...

  8. [BZOJ1009] [HNOI2008] GT考试(KMP+dp+矩阵快速幂)

    [BZOJ1009] [HNOI2008] GT考试(KMP+dp+矩阵快速幂) 题面 阿申准备报名参加GT考试,准考证号为N位数X1X2-.Xn,他不希望准考证号上出现不吉利的数字.他的不吉利数学A ...

  9. 瓷砖铺放 (状压DP+矩阵快速幂)

    由于方块最多涉及3行,于是考虑将每两行状压起来,dfs搜索每种状态之间的转移. 这样一共有2^12种状态,显然进行矩阵快速幂优化时会超时,便考虑减少状态. 进行两遍bfs,分别为初始状态可以到达的状态 ...

随机推荐

  1. python中有趣的函数

    filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决 ...

  2. PHP闭包(Closure)初探

    不知不觉发现PHP已经出到了5.5版本,而自己一直在用PHP5.2,让我看起来像深山出来的小伙子一样,又土又落后.在我习惯在javascript中使用闭包之后,忽然间对PHP的闭包打起了兴趣. 于是乎 ...

  3. WPF窗口长时间无人操作鼠标自动隐藏

    在软件开发中有时会有等待一段时间无人操作后隐藏鼠标,可能原因大致如下: 1.为了安全性,特别是那些需要用到用户名和密码登录服务端的程序,常常考虑长期无人操作,程序自动跳转到用户登录界面: 2.软件为了 ...

  4. php对象

    在php中,必须使用class关键字明确的声明对象,然后在对象类中定义数据类型和方法. 示例: class Color{ public $value; public static $RED = &qu ...

  5. PB打开ole控件IE浏览器版本问题_指定Webbrowser控件所用IE内核版本(转)

    如果电脑上安装了IE8或者之后版本的IE浏览器,Webbrowser控件会使用IE7兼容模式来显示网页内容.解决方法是在注册表中为你的进程指定引用IE的版本号. 比如我的程序叫做a.exe 对于32位 ...

  6. typedef和自定义结构体类型

    在自定义结构体类型时会用到typedef关键字.大家都知道typedef是取别名的意思,在C语言中跟它容易混淆的有const,#define等,其区别不在本篇文章讨论之列. /*定义单链表结点类型*/ ...

  7. JAVA标签的使用跳出循环

    public static void main(String args[]) { int i=10,j=10; outer: while (i > 0) { inner: while (j &g ...

  8. DataGridView控件

    DataGridView控件 DataGridView是用于Windows Froms 2.0的新网格控件.它可以取代先前版本中DataGrid控件,它易于使用并高度可定制,支持很多我们的用户需要的特 ...

  9. nscd

    作用: Nscd is a daemon that provides a cache for the most common name service requests 可以缓存passwd,grou ...

  10. javascript 对象数组排序

    参考地址:http://blog.csdn.net/kavensu/article/details/17851329