p2704_迭代.cpp

来自「高手写的所有acm例程 在acm.zju.edu.cn 上的题目的例程」· C++ 代码 · 共 41 行

CPP
41
字号
#include <stdio.h>
#include <string.h>
#define MaxLen    400000

int     N;
char    data [MaxLen];
int     Left [MaxLen];

bool    isregular ( char , char );
void    solve ();

main ()
{
     while ( scanf ( "%s" , data ) == 1 ) {
           solve ();
     }
}

void solve ()
{
     int   i , j;
     N = strlen ( data );
     memset ( Left , 0 , sizeof ( Left ));
     for ( i = 0; i < N; i ++ ) if ( data [i] == ')' || data [i] == ']' ) {
         for ( j = i - 1; j >= 0 && Left [j] != 0; j -= Left [j] );
         if ( j >= 0 && isregular ( data [j] , data [i] )) {
              for ( ; j && Left [j - 1]; j -= Left [j - 1] );
              Left [i] = i - j + 1;
         }
     }
     for ( i = j = 0; i < N; i ++ ) if ( Left [i] > Left [j] ) j = i;
     for ( i = j - Left [j] + 1; i <= j; i ++ ) printf ( "%c" , data [i] );
     printf ( "\n\n" );
}


bool isregular ( char a , char b )
{
     return a == '(' && b == ')' || a == '[' && b == ']';
}

⌨️ 快捷键说明

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