代码改变世界

poj 1068 Parencodings

2017-05-19 18:38  tlnshuju  阅读(209)  评论(0编辑  收藏  举报

http://poj.org/problem?id=1068

题意:

一个正常括号匹配的 串 能够用两种 数字串 表达

P数字串的生成方法是:当前 匹配括号里的右括号 左边有多少个左括号。

w数字串的生成方法是:当前 匹配的括号里 包括多少个 右括号。

现 给出P数字串 求出 W数字串

思路:

用给出的P数字串 还原出 括号匹配串。

在 还原出的括号串中 生成 W数字串。

//先把p串转换为原串,再转换为w串。

#include<cstdio> #include<string> using namespace std; int f[25]; int main() { int t,n,i,sign,p,j; string s; scanf("%d",&t); while(t--) { sign=0; s.clear(); scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&p); while(sign<p) { sign++; s+="("; } s+=")"; int q1=1,q2=1; for(j=s.length()-2;j>=0&&q2;j--) { if(s[j]==')') { q1++; q2++; } else q2--; } f[i]=q1; } for(i=0;i<n;i++) printf("%d%c",f[i],i==n-1?'\n':' '); } return 0; }