题目链接:http://poj.org/problem?id=1068
解释下题意,对于一个括号组合,有两种括号代码,一种是P代码,一种是W代码,英语不好看了半天,还是要提升下,为CCNA准备,下面解释下两种代码:
P代码就是每一个反括号前面的正括号数
W代码就是每一个好括号与其对应的正括号之间的正括号数,算上他本身的那个
题目要求通过P代码,求W代码,典型的模拟题。
我的代码原理就是,先翻译每一个P代码前方的S字符串,用0表示(,用1表示),在通过这个前方的字符串,求该反括号的W代码
具体实现利用
具体代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
#include <iostream> #include <cstring> using namespace std;
int main() { int s[41],p[21],w[21]; int i,j,t,n,temp,num,flag; cin>>t; while(t--) { cin>>n; memset(s,0,sizeof(s)); memset(w,0,sizeof(w)); for(i=0;i<n;i++) { cin>>p[i]; temp=p[i]+i; s[temp]=1; num=1,flag=0; for(j=temp-1;j>=0;j--) { if(s[j]==0&&flag;==0) { w[i]=num; break; } else if(s[j]==1) { flag++; num++; } else if(s[j]==0) flag--; } } for(i=0;i<n;i++) cout<<w[i]<<" "; cout<<endl; } }
|