hdu5318The Goddess Of The Moon 矩阵快速幂
2015-11-06 21:15
435 查看
//n(<=50)种字符串,每一种字符串的个数不限 //前一个字符串s的后缀与后一个字符串t相同且长度大于1 //那么两个字符串可以连接在一起, //那么选m(<=1e9)个字符串连接在一起有多少种情况 //建立一个可连接矩阵,直接快速幂就行,注意一下字符串去重 #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<string> using namespace std ; const int maxn = 51 ; typedef long long ll ; const ll mod = 1e9+7 ; string str[maxn] ; int n , m ; struct node { ll p[maxn][maxn] ; }; node mul(node a , node b) { node c ; memset(c.p , 0 , sizeof(c.p)) ; for(int i = 1;i <= n;i++) for(int j = 1;j <= n;j++) for(int k = 1;k <= n;k++) c.p[i][j] = (c.p[i][j] + a.p[i][k]*b.p[k][j])%mod ; return c ; } node pow(node a , int k) { node c ; memset(c.p , 0 , sizeof(c.p)) ; for(int i = 1;i <= n;i++) c.p[i][i] = 1 ; while(k) { if(k&1)c = mul(a,c) ; a = mul(a, a) ; k>>=1 ; } return c ; } bool judge(string s , string t) { int len = s.length() ; for(int i = 2;i <= t.length();i++){ if(len < i)return false ; bool flag = false ; for(int k = 0;k < i;k++) if(s[len-i+k]!=t[k]){ flag = true ; break ; } if(!flag)return true ; } return false ; } int main() { //std::ios_base::sync_with_stdio(false); int t ; scanf("%d" , &t) ; while(t--) { scanf("%d%d" , &n , &m) ; for(int i = 1;i <= n;i++) cin>>str[i] ; if(m<2){ cout<<m<<endl; continue ; } sort(str+1 , str+1+n) ; n = unique(str+1 , str+1+n) - str - 1 ; node a ; memset(a.p , 0 , sizeof(a.p)) ; for(int i = 1;i <= n;i++) for(int j = 1;j <= n;j++) a.p[i][j] = judge(str[i] , str[j]) ; a = pow(a , m-1) ; ll ans= 0 ; for(int i = 1;i <= n;i++) for(int j = 1;j <= n;j++) ans = (ans + a.p[i][j])%mod ; cout<<ans<<endl ; } }
相关文章推荐
- [TwistedFate]category Extensxion protocol
- 【dfs】hdu 5546 Ancient Go
- 利用GoAhead构建嵌入式web应用
- 利用GoAhead构建嵌入式web应用
- 初入Django(一)--创建第一个项目
- go 安装
- Google Chrome浏览器中如何使用命令
- 关于googlge浏览器升级到46+版本之后NPAPI 的插件不能用
- selenium webDriver 启动Google浏览器遇到的问题
- Virgo OSGI 环境配置
- Last_IO_Error: Got fatal error 1236 from master解决方法
- 28 Number spiral diagonals - Project Euler +
- Google 应该放弃 Chrome OS 吗?
- Google 应该放弃 Chrome OS 吗?
- Windows平台配置RockMongo
- uva 11054——Wine trading in Gergovia
- [hdu4416 Good Article Good sentence]后缀自动机SAM
- HOTPOWER.【专注游戏界面外包】/接游戏界面外包/logo外包/icon
- django 常用的导入
- Go 语言 make & new