poj 1068 Parencodings

来源:互联网 发布:下载火车购票软件 编辑:程序博客网 时间:2024/06/16 03:13

与括号相关的简单模拟题。题干写的是着实让我难懂,我是对着题目中对地一组数据的分析做出来的。P的来源是第i个数是从第i个左括号开始数,一直数到(从左往右数)第i个右括号(从左往右)。W的来源是从第i个右括号开始数,数到和i匹配的这个左括号。当然两个都是统计个数的。看程序。

#include<iostream>using namespace std;int num[21];int ko[42];int flag[42];int main(){int t,n,i,traget;cin>>t;while(t--){cin>>n;for(i=1;i<=n;i++)cin>>num[i];for(i=1;i<=2*n;i++)flag[i]=0;for(i=1;i<=num[i];i++){ko[i]=0;flag[i]=1;}ko[num[1]+1]=1;flag[num[1]+1]=1;for(i=2;i<=n;i++){int start;start=i;while(start!=num[i]+i){if(flag[start]==1);else {ko[start]=0;flag[start]=1;}start=start+1;}ko[start]=1;flag[start]=1;}/*for(i=1;i<=2*n;i++)if(ko[i]==0)cout<<"(";else cout<<")";cout<<endl;*/int count=0;while(count!=n){traget=1;while(ko[traget]==0||flag[traget]==0)traget=traget+1;flag[traget]=0;int sum=0;traget=traget-1;while(flag[traget]==0){if(ko[traget]==0)   sum=sum+1;traget=traget-1;}sum=sum+1;flag[traget]=0;cout<<sum<<" ";count=count+1;}cout<<endl;}return 0;}


原创粉丝点击