zoukankan      html  css  js  c++  java
  • 【HDOJ】2371 Decode the Strings

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

     1 #include <cstdio>
     2 #include <cstring>
     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("
    ");
    66     }
    67 
    68     return 0;
    69 }
  • 相关阅读:
    hadoop目录命令
    spark简单文件配置
    git简单使用
    1
    环境
    spring boot入门学习---热部署
    浅谈-对modbus的理解
    springboot集成调用Azkaban
    搭建自己的maven私服 必过
    Spring Boot 出现 in a frame because it set 'X-Frame-Options' to 'DENY'
  • 原文地址:https://www.cnblogs.com/bombe1013/p/3862408.html
Copyright © 2011-2022 走看看