题目大意:将一种括号表现形式转变为另一种,通过变为中间字符串000010101111的形式转化,easy。 #include <iostream> #include <cstring> #include <cstdio> using namespace std; int main() { //freopen("temp.txt", "r", stdin); int t, n; int p[21] = {0}; //P串,p[0]=0很重要,方便比较 int w[20]; //W串 int str[40]; //中间结果000010101111 cin >> t; while (t--) { memset(str, 0, sizeof(str)); cin >> n; for (int i = 1; i <= n; ++i) { cin >> p[i]; } // convert P-sequence to 01 int k = 0; //0101下标长度 for (int i = 1; i <= n; ++i) for (int j = 0; j <= n; ++j) { //j是前面括号数的差距 if (p[i]-p[i-1] > j) ++k; else if (p[i]-p[i-1] == j) { str[k++] = 1; break; } } //convert 01 to W-sequence int cnt; // cnt表示F的个数 for (int i = 0; i < k; ++i) if (str[i] == 1) { cnt = 2;//配对是两个F int j; for (j = i-1; j >= 0; --j) { if (str[j] == 'F') ++cnt; else break; } str[i] = str[j] = 'F'; cout << cnt/2 << ' '; } cout << endl; } return 0; }