POJ 1068 Parencodings 模拟 难度:0

http://poj.org/problem?id=1068

#include<cstdio>
#include <cstring>
using namespace std;
int ind[45];
bool used[45];
int r[21];
int l[21];
int len,n,llen;
int w[21];
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        memset(used,0,sizeof(used));
        len=0,llen=0;
        scanf("%d",&n);
        for(int i=0;i<n;i++){
            scanf("%d",r+i);
            for(int j=0;j<r[i]-(i>0?r[i-1]:0);j++){
                ind[len++]=llen;
                l[llen++]=i;
            }
            ind[len++]=i;
        }
        for(int i=0;i<n;i++){
            int tind=r[i]+i;
            used[tind]=true;
            for(int j=tind-1;j>=0;j--){
                if(!used[j]){
                    w[i]=i-l[ind[j]]+1;
                    used[j]=true;
                    break;
                }
            }
        }
        for(int i=0;i<n;i++)printf("%d%c",w[i],i==n-1?'
':' ');
    }
    return 0;
}

  

原文地址:https://www.cnblogs.com/xuesu/p/4754356.html