首页 > 代码库 > poj 1068 Parencodings(模拟)
poj 1068 Parencodings(模拟)
Parencodings
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 19434 | Accepted: 11734 |
题目大意: 给出一个整数表示有n组测试样例 每个样例包含两组数 一个整数m 和一个有m个元素的p数组
数组中的元素表示的意思为第i个‘ ) ‘之前有多少个‘ ( ‘ 。
要求输出一个w数组其元素表示的意思为在第i个’ ) ‘和它匹配的’(‘之间有多少组已匹配好的括号 (包括其自身)
例如
S (((()()()))) P-sequence 4 5 6666 W-sequence 1 1 1456根据题目意思只要依据p数组模拟出该括号字符串 再将w数组求出来即可
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int main() { int a[25],ans[25],n,m,i,j; char mm[25]; cin>>n; while(n--) { cin>>m; a[0]=0; for(i=1;i<=m;i++) cin>>a[i]; for(i=1;i<=m;i++) for(j=a[i-1]+i;j<=a[i]+i;j++) { if(j==a[i]+i) { mm[j]=')';//cout<<j<<" "<<mm[j]; } else { mm[j]='(';//cout<<j<<" "<<mm[j]; } } int l=0; int s=0; for(i=1;i<j;i++) if(mm[i]==')') { int sum=1; for(int k=i-1;k>0;k--) { if(mm[k]==')') { s++; sum++; } else if(mm[k]=='('&&s) { s--; } else if(mm[k]=='('&&!s) { ans[l]=sum;//cout<<k<<endl; l++; break; } } } for(i=0;i<l;i++) { if(i==0) cout<<ans[i]; else cout<<" "<<ans[i]; } cout<<endl; } return 0; }
poj 1068 Parencodings(模拟)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。