POJ 1068

Parencodings

一旦括弧を復元してから,W-sequenceを求めた.
(もっと効率いい方法がありそう…)

#include <iostream>
#include <string>
using namespace std;

int main() {
	int n,m;
	cin >> n;
	for (; n>0; n--) {
		cin >> m;
		string parens = "";
		//P-sequence
		int p0=0, p1;
		for (int i=1; i<=m; i++) {
			cin >> p1;
			for (int j=0; j<p1-p0; j++) parens.append("(");
			parens.append(")");
			p0 = p1;
		}
		//cout << parens << endl;
		//W-sequence
		for (int i=0; i<parens.size(); i++) {
			if (parens[i] == ')') {
				int lparen=0, rparen=1;
				for (int j=i-1; j>=0 && lparen < rparen; j--) {
					if (parens[j] == '(') lparen++;
					if (parens[j] == ')') rparen++;
				}
				cout << rparen << " ";
			}
		}
		cout << endl;

	}
	return 0;
}