【HDOJ】2371 Decode the Strings
快速矩阵乘法。注意,原始字符串即为decode后的字符串。题目是要找到原始串。
#include <cstdio>
#include <cstring> #define MAXN 85 typedef struct {
char m[MAXN][MAXN];
} mat_st; int n, m;
char buf[MAXN];
mat_st e; mat_st mat_mult(mat_st a, mat_st b) {
int i, j, k;
mat_st c;
memset(c.m, , sizeof(c.m)); for (i=; i<=n; ++i) {
for (j=; j<=n; ++j) {
for (k=; k<=n; ++k)
c.m[i][j] += a.m[i][k] & b.m[k][j];
}
}
return c;
} mat_st mat_power(mat_st a, int r) {
mat_st ret; memset(ret.m, , sizeof(ret.m));
for (int i=; i<=n; ++i)
ret.m[i][i] = ; while (r) {
if (r & )
ret = mat_mult(ret, a);
a = mat_mult(a, a);
r >>= ;
}
return ret;
} int main() {
mat_st org;
int i, j; while (scanf("%d %d",&n,&m)!=EOF && n) {
memset(org.m, , sizeof(org.m));
for (i=; i<=n; ++i) {
scanf("%d", &j);
org.m[i][j] = ;
}
getchar();
gets(buf+);
mat_st ans = mat_power(org, m);
for (i=; i<=n; ++i) {
for (j=; j<=n; ++j) {
if (ans.m[j][i]) {
printf("%c", buf[j]);
break;
}
}
}
printf("\n");
} return ;
}
【HDOJ】2371 Decode the Strings的更多相关文章
- 【LeetCode】91. Decode Ways 解题报告(Python)
		[LeetCode]91. Decode Ways 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fux ... 
- 【CodeForces】947 D. Picking Strings
		[题目]D. Picking Strings [题意]给定只含'A','B','C'的字符串,支持以下变换:1.A - BC 2.B - AC 3.C - AB 4.AAA - empty ... 
- 矩阵十题【五】 VOJ1049  HDU 2371 Decode the Strings
		题目链接:https://vijos.org/p/1049 题目大意:顺次给出m个置换,重复使用这m个置换对初始序列进行操作.问k次置换后的序列.m<=10, k<2^31. 首先将这m个 ... 
- 【HDOJ】4729 An Easy Problem for Elfness
		其实是求树上的路径间的数据第K大的题目.果断主席树 + LCA.初始流量是这条路径上的最小值.若a<=b,显然直接为s->t建立pipe可以使流量最优:否则,对[0, 10**4]二分得到 ... 
- 【HDOJ】【3506】Monkey Party
		DP/四边形不等式 裸题环形石子合并…… 拆环为链即可 //HDOJ 3506 #include<cmath> #include<vector> #include<cst ... 
- 【HDOJ】【3516】Tree Construction
		DP/四边形不等式 这题跟石子合并有点像…… dp[i][j]为将第 i 个点开始的 j 个点合并的最小代价. 易知有 dp[i][j]=min{dp[i][j] , dp[i][k-i+1]+dp[ ... 
- 【HDOJ】【3480】Division
		DP/四边形不等式 要求将一个可重集S分成M个子集,求子集的极差的平方和最小是多少…… 首先我们先将这N个数排序,容易想到每个自己都对应着这个有序数组中的一段……而不会是互相穿插着= =因为交换一下明 ... 
- 【HDOJ】【2829】Lawrence
		DP/四边形不等式 做过POJ 1739 邮局那道题后就很容易写出动规方程: dp[i][j]=min{dp[i-1][k]+w[k+1][j]}(表示前 j 个点分成 i 块的最小代价) $w(l, ... 
- 【HDOJ】【3415】Max Sum of Max-K-sub-sequence
		DP/单调队列优化 呃……环形链求最大k子段和. 首先拆环为链求前缀和…… 然后单调队列吧<_<,裸题没啥好说的…… WA:为毛手写队列就会挂,必须用STL的deque?(写挂自己弱……s ... 
随机推荐
- git 工具
			https://www.kernel.org/pub/software/scm/git/ wget https://www.kernel.org/pub/software/scm/git/git-2. ... 
- Qt 学习之路:坐标系统
			在经历过实际操作,以及前面一节中我们见到的那个translate()函数之后,我们可以详细了解下 Qt 的坐标系统了.泛泛而谈坐标系统,有时候会觉得枯燥无味,难以理解,好在现在我们已经有了基础. 坐标 ... 
- Android(java)学习笔记203:网页源码查看器(Handler消息机制)
			1.项目框架图: 2.首先是布局文件activity_main.xml: <LinearLayout xmlns:android="http://schemas.android.com ... 
- Java——(三)Collection之Set集合、HashSet类
			------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.Set集合 Set集合不允许包含相同的元素,如果试图把两个相同的元素加入同一个Set集合中, ... 
- 上机实践    - -    一个例子了解C/C++中指针与数组的区别
			本例子来自于<剑指Offer>(P37) 解答如下: size1:20 data1是一个数组,sizeof(data1)是求数组大小. 这个数组包含5个整数,每个整数4个字节,共20字节. ... 
- HTML5 <Audio>标签API整理(一)
			简单实例: <audio id="myAudio"></audio> <script> var myAudio = document.getEl ... 
- Android开发app如何设定应用图标下的应用名称为汉字以及自定义图标
			一.应用名称为汉字 二.自定义图标 
- C# - string 转为 DateTime(自定义)
			上代码: string dt = " 1 11 1961"; DateTime day; System.Globalization.DateTimeFormatInfo dtFor ... 
- Sprite Kit教程:初学者
			作者:Ray Wenderlich 原文出处:点击打开链接 http://www.raywenderlich.com/42699/spritekit-tutorial-for-beginners 转自 ... 
- c#与c++交互的一些东西
			最近做一个项目,对方公司只提供了一个c++的DLL,但没封住,c#无法DllImport.所以只能自己写c++来封住了. 对方的Dll只接收yuv420的图片格式,所以在c++里用opencv来转换. ... 
