博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【HDOJ】2371 Decode the Strings
阅读量:6889 次
发布时间:2019-06-27

本文共 1523 字,大约阅读时间需要 5 分钟。

快速矩阵乘法。注意,原始字符串即为decode后的字符串。题目是要找到原始串。

1 #include 
2 #include
3 4 #define MAXN 85 5 6 typedef struct { 7 char m[MAXN][MAXN]; 8 } mat_st; 9 10 int n, m;11 char buf[MAXN];12 mat_st e;13 14 mat_st mat_mult(mat_st a, mat_st b) {15 int i, j, k;16 mat_st c;17 memset(c.m, 0, sizeof(c.m));18 19 for (i=1; i<=n; ++i) {20 for (j=1; j<=n; ++j) {21 for (k=1; k<=n; ++k)22 c.m[i][j] += a.m[i][k] & b.m[k][j];23 }24 }25 return c;26 }27 28 mat_st mat_power(mat_st a, int r) {29 mat_st ret;30 31 memset(ret.m, 0, sizeof(ret.m));32 for (int i=1; i<=n; ++i)33 ret.m[i][i] = 1;34 35 while (r) {36 if (r & 1)37 ret = mat_mult(ret, a);38 a = mat_mult(a, a);39 r >>= 1;40 }41 return ret;42 }43 44 int main() {45 mat_st org;46 int i, j;47 48 while (scanf("%d %d",&n,&m)!=EOF && n) {49 memset(org.m, 0, sizeof(org.m));50 for (i=1; i<=n; ++i) {51 scanf("%d", &j);52 org.m[i][j] = 1;53 }54 getchar();55 gets(buf+1);56 mat_st ans = mat_power(org, m);57 for (i=1; i<=n; ++i) {58 for (j=1; j<=n; ++j) {59 if (ans.m[j][i]) {60 printf("%c", buf[j]);61 break;62 }63 }64 }65 printf("\n");66 }67 68 return 0;69 }

转载于:https://www.cnblogs.com/bombe1013/p/3862408.html

你可能感兴趣的文章
一、 Python的基本概念
查看>>
子元素margin影响父元素的问题
查看>>
MUI功能列表
查看>>
video 全屏时 隐藏controls
查看>>
python input() 与raw_input()
查看>>
mysql数据库 --表查询
查看>>
Python中xlrd常用用法整理
查看>>
如何上传本地音乐获取MP3外链(欢迎分享和转载)
查看>>
@vue/cl构建得项目下,postcss.config.js配置,将px转化成rem
查看>>
搭建gitlab本地服务
查看>>
day02
查看>>
SpringBoot慕课学习-SpringBoot开发常用技术整合-资源文件属性配置
查看>>
命令导入证书
查看>>
Django-CBV
查看>>
NativeWindow_01
查看>>
【Flutter学习】基本组件之图片组件Image
查看>>
(转)工作之路---记录LZ如何在两年半的时间内升为PM
查看>>
CoreAnimation
查看>>
JS基础属性跟运算
查看>>
通过类创建子线程&同步锁
查看>>