poj1068 模拟

#include<iostream>
using namespace std;
int main()
{
    int n;
    int p[21];
    int res[21];
    int visited[21];
    cin>>n;
    while(n--)
    {
        memset(visited,0,sizeof(visited));
        int m;
        cin>>m;
        int i,j;
        for(i=1;i<=m;i++)
        {
            scanf("%d",&p[i]);
            int flag=p[i];
            while(visited[flag])//每次向前回溯,找到第一个没被匹配的右括号;
            {
                flag--;
            }
            res[i]=p[i]-flag+1;
            visited[flag]=1;//标记
        }
        for(i=1;i<=m;i++)
        {
            cout<<res[i];
            if(i<m)cout<<" ";
        }
        cout<<endl;

    }
    return 0;
}

 

题意:

给出一种对括号的描述:即每个右括号前面有几个左括号;将其改成另一种描述:每一个右括号和距离它的第几个左括号匹配;

posted @ 2012-04-17 22:26  orangeblog  阅读(170)  评论(0编辑  收藏  举报