本文共 1775 字,大约阅读时间需要 5 分钟。
#include #include #include #include #include #include #include #include #include #include #include #include #define MEM(x,y) memset ( x , y , sizeof ( x ) )#define rep(i,a,b) for (int i = a ; i <= b ; ++ i)#define per(i,a,b) for (int i = a ; i >= b ; -- i)#define pii pair < int , int >#define X first#define Y second#define rint read #define int long long#define pb push_backusing std::set ;using std::pair ;using std::max ;using std::min ;using std::priority_queue ;using std::vector ;using std::swap ;using std::sort ;using std::unique ;using std::greater ;template < class T > inline T read () { T x = 0 , f = 1 ; char ch = getchar () ; while ( ch < '0' || ch > '9' ) { if ( ch == '-' ) f = - 1 ; ch = getchar () ; } while ( ch >= '0' && ch <= '9' ) { x = ( x << 3 ) + ( x << 1 ) + ( ch - 48 ) ; ch = getchar () ; } return f * x ;}template < class T > inline void write (int x) { static T stk[100] , top = 0; if (x == 0) { putchar ('0') ; return ; } if (x < 0) { x = - x ; putchar ( '-' ) ; } while (x) { stk[++top] = x % 10 ; x /= 10 ; } while (top) { putchar ( stk[top--] + '0') ; } }const int N = 2e5 + 100 ;int n , cnt , num ; char s[N] ;signed main (int argc , char * argv[]) { n = rint () ; scanf ("%s" , s + 1 ) ; rep ( i , 1 , n ) num += ( s[i] == '(' ) ; if ( num != n - num ) { puts ("No") ; return 0 ; } num = 0 ; rep ( i , 1 , n ) if ( s[i] == '(' ) ++ cnt ; else { if ( cnt ) -- cnt ; else ++ num ; } if ( cnt + num > 2 ) puts ("No") ; else puts ("Yes") ; return 0 ;}
转载于:https://www.cnblogs.com/Equinox-Flower/p/11469115.html