zoukankan      html  css  js  c++  java
  • uva 11988 链表 OR 块状链表

    链表写法:新增加一个头结点来使插入操作统一。

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 using namespace std;
     5 
     6 const int N = 100001;
     7 char text[N];
     8 char str[N];
     9 int next[N];
    10 int cur, last, bl;
    11 
    12 int main ()
    13 {
    14     while ( gets(text) )
    15     {
    16         int len = strlen(text);
    17         cur = last = 0;
    18         bl = 1;
    19         memset( next, -1, sizeof(next) );
    20         for ( int i = 0; i < len; i++ )
    21         {
    22             if ( text[i] == '[' )
    23             {
    24                 cur = 0;
    25             }
    26             else if ( text[i] == ']' )
    27             {
    28                 cur = last;
    29             }
    30             else
    31             {
    32                 int tmp = next[cur];
    33                 int ncur = next[cur] = bl++;
    34                 next[ncur] = tmp;
    35                 str[ncur] = text[i];
    36                 if ( cur == last )
    37                 {
    38                     last = ncur;
    39                 }
    40                 cur = ncur;
    41             }
    42         }
    43         for ( int i = next[0]; i != -1; i = next[i] )
    44         {
    45             putchar( str[i] );
    46         }
    47         putchar('
    ');
    48     }
    49     return 0;
    50 }

    分析了一下感觉块链也可以过,就套模板试了一下,果然没有让我失望,看来我写的块链还是不错的,哈哈。

    块链写法:

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 using namespace std;
     5 
     6 const int M = 100001;
     7 const int N = 500;
     8 char text[M];
     9 char b[N][N];
    10 int sz[N];
    11 int next[N];
    12 int ps, bl;
    13 
    14 void init()
    15 {
    16     bl = 1;
    17     ps = 400;
    18     memset( sz, 0, sizeof(sz) );
    19     memset( next, -1, sizeof(next) );
    20 }
    21 
    22 void spilt( int cur )
    23 {
    24     int tmp = next[cur];
    25     int ncur = next[cur] = bl++;
    26     next[ncur] = tmp;
    27     for ( int i = sz[cur] / 2; i < sz[cur]; i++ )
    28     {
    29         b[ncur][sz[ncur]++] = b[cur][i];
    30     }
    31     sz[cur] = sz[cur] / 2;
    32 }
    33 
    34 void insert( int pos, char val )
    35 {
    36     int cur = 0, p = sz[cur];
    37     while ( p < pos + 1 && next[cur] != -1 )
    38     {
    39         cur = next[cur];
    40         p += sz[cur];
    41     }
    42     if ( p < pos + 1 )
    43     {
    44         b[cur][sz[cur]++] = val;
    45     }
    46     else
    47     {
    48         p -= sz[cur];
    49         pos -= p;
    50         for ( int j = sz[cur] - 1; j >= pos; j-- )
    51         {
    52             b[cur][j + 1] = b[cur][j];
    53         }
    54         b[cur][pos] = val;
    55         sz[cur]++;
    56     }
    57     if ( sz[cur] > ps ) spilt(cur);
    58 }
    59 
    60 int main ()
    61 {
    62     while ( gets(text) )
    63     {
    64         init();
    65         int ptr = 0, tot = 0;
    66         for ( int i = 0; text[i] != ''; i++ )
    67         {
    68             if ( text[i] == '[' ) 
    69             {
    70                 ptr = 0;
    71             }
    72             else if ( text[i] == ']' )
    73             {
    74                 ptr = tot;
    75             }
    76             else
    77             {
    78                 insert( ptr++, text[i] );
    79                 tot++;
    80             }
    81         }
    82            for ( int i = 0; i != -1; i = next[i] )
    83            {
    84                for ( int j = 0; j < sz[i]; j++ )
    85                {
    86                    putchar( b[i][j] );
    87                }
    88            }
    89            putchar('
    ');
    90     }
    91     return 0;
    92 }
  • 相关阅读:
    一条软件缺陷(或者叫 Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?
    测试人员在软件开发过程中的任务
    HDOJ1754(线段树)
    HDOJ1166(线段树,树状数组)
    分治法
    POJ1840(哈希)
    HOOJ1290 2050(递推)
    POJ1035(字符串)
    HDOJ1800(哈希)
    POJ2299(归并排序)
  • 原文地址:https://www.cnblogs.com/huoxiayu/p/4767740.html
Copyright © 2011-2022 走看看