Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#define min(a,b) ((a)<(b)?(a):(b))#define max(a,b) ((a)>(b)?(a):(b))#define N 1000005char s[N];int dp[N],ans[N],num = 0,res=0;using namespace std;int main(){scanf("%s",s);int i,len = strlen(s);for(i = 0;i<len;i++){dp[i] = 0;ans[i] = 0;if(s[i] == '(')num++;else{if(num>0){num--;dp[i] = 2;ans[i] = 1;if(i>0 && s[i-1]==')')dp[i] += dp[i-1];if(i-dp[i]>=0){ans[i] += ans[i-dp[i]];dp[i] += dp[i-dp[i]];}}}