Zachary的旅途

尽管我走的很慢,但我从未停止脚步。

hdoj 1361 Parencodings 2001 Asia Regional Teheran

思路:模拟,根据序列P可以构造出S,然后再根据S,推出序列W。

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>

using namespace std;

char str[50];
int w[25];

int main()
{
	int t, n, num;
	scanf("%d", &t);
	while (t--) {
		scanf("%d", &n);
		int i ,j = 0, cnt = 0;
		for (i = 0; i < n; ++i) {
			scanf("%d", &num);
			for (; j < num; ++j)
				str[cnt++] = '(';
			str[cnt++] = ')';
		}
		n *= 2;
		int lf, rt;
		cnt = 0;
		for(i = 0; i < n; ++i) {
			if (str[i] == '(')
				continue;
			lf = 0;
			rt = 1;
			j = i - 1;
			while (1) {
				if (str[j] == ')')
					rt++;
				else
					lf++;
				if(rt == lf) {
				    w[cnt++] = rt;
					break;
				}
				j--;
			}
		}
		for (i = 0; i < cnt-1; ++i)
			printf("%d ", w[i]);
		printf("%d\n", w[cnt-1]);
	}
    return 0;
}


阅读更多
个人分类: 模拟
上一篇数论 ural 1356. Something Easier
下一篇hdoj 2553 N皇后问题
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭