⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2471.cpp

📁 这是哈尔滨工业大学acmOJ的源代码
💻 CPP
字号:
/* This Code is Submitted by wywcgs for Problem 2471 on 2007-04-16 at 11:09:33 */
#include <cstdio>
#include <algorithm>
using namespace std;

typedef long long llong;

const int N = 52;
const int MAGIC = 1000000;

void matPow(llong[][N], int);
void mul(llong[][N], llong[][N]);

int main()
{
	llong m[N][N];
	int T, L;
	
	scanf("%d", &T);
	for(int t = 0; t < T; t++) {
		memset(m, 0, sizeof(m));
		for(int i = 0; i < N/2; i++) m[i][i] = m[i][i+N/2] = 1;
		int n; scanf("%d", &n);
		for(int i = 0; i < n; i++) {
			char d[3]; scanf("%s", d);
			m[d[0]-'a'+N/2][d[1]-'a'+N/2] = 1;
		}
		scanf("%d", &L);
		matPow(m, L);
		llong res = 0;
		for(int i = 0; i < N/2; i++)
			for(int j = N/2; j < N; j++)
				res = (res+m[i][j])%MAGIC;
		printf("%lld\n", (res+MAGIC-26)%MAGIC);
	}
	
	return 0;
}

void matPow(llong m[][N], int n)
{
	llong u[N][N];
	memcpy(u, m, sizeof(u));
	int bit = 31;
	for(; (n&(1<<bit)) == 0; bit--);
	for(bit--; bit >= 0; bit--) {
		mul(m, m);
		if(n&(1<<bit)) mul(m, u);
	}
}
void mul(llong a[][N], llong b[][N])
{
	llong c[N][N]; memset(c, 0, sizeof(c));
	for(int i = 0; i < N; i++)
		for(int j = 0; j < N; j++)
			for(int k = 0; k < N; k++)
				c[i][j] = (c[i][j]+a[i][k]*b[k][j])%MAGIC;
	memcpy(a, c, sizeof(c));
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -