现在的位置: 首页 > 综合 > 正文

hdu 4665 Unshuffle (DFS)

2013年06月13日 ⁄ 综合 ⁄ 共 607字 ⁄ 字号 评论关闭
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
const int M = 2050;

int num[M] , temp[M] , n;
char ans[M];
bool flag;

void dfs(int step , int l , int r){
    if(flag) return ;
    //printf("step = %d l = %d r = %d\n" , step , l , r);

    if(l > n / 2 || r > n / 2){
        return;
    }
    if(step == n && l == n / 2 && r == n / 2){
        flag = true;
        return ;
    }
    ans[step] = '0';
    temp[l] = num[step];
    dfs(step + 1 , l + 1 , r);
    if(flag) return;
    if(temp[r] == num[step]){
        ans[step] = '1';
        //temp[r] = num[step];
        dfs(step + 1 , l , r + 1);
    }
    return ;
}

int main(){
    int t;

    scanf("%d" , &t);
    while(t --){
        flag = false;
        scanf("%d" , &n);
        for(int i = 0 ; i < n ; i ++){
            scanf("%d" , &num[i]);
        }
        dfs(0 , 0 , 0);
        for(int i = 0 ; i < n ; i ++){
            printf("%c" , ans[i]);
        }
        printf("\n");
    }

    return 0;
}

抱歉!评论已关闭.