POJ 1068
寒假集训小水题第一发
题意:给你一个序列,代表的意思是第i个右括号前面有Si个左括号,问题是求第i 个右括号包含了几个完整的括号 。
example:
S (((()()())))
P-sequence 4 5 6666
W-sequence 1 1 1456
方法:先用给出的P序列把S还原出来,然后再用S求W,W的具体求解方法是从每个右括号往左找,直到左括号数目和右括号数目一致的时候,就是包含的括号数。
AC代码:
#include <iostream> #include <math.h> #include <stdio.h> #include <string.h> #include <queue> using namespace std; int main() { int T,n,s[200],su[200]; char q[200]; scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=0; i<n; i++) { scanf("%d",&s[i]); } int k=0; for(int i=0; i<s[0]; i++) { q[k++]='('; } q[k++]=')'; for(int i=1; i<n; i++) { int k1=s[i]-s[i-1]; while(k1--) { q[k++]='('; } q[k++]=')'; } int suk=0; for(int i=0; i<k; i++) { if(q[i]==')') { int sum1=1; int sum2=0; for(int j=i-1; j>=0; j--) { if(sum1==sum2) { break; } if(q[j]==')') { sum1++; } else if(q[j]=='(') { sum2++; } } su[suk++]=sum1; } } for(int i=0;i<suk;i++) { printf("%d",su[i]); if(i!=suk-1) { printf(" "); } else { printf("\n"); } } } return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步