2928 你缺什么

2928 你缺什么

 

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 钻石 Diamond
 
 
题目描述 Description

继“你幸福吗”之后,央视又推出了“你缺什么”。而在采访过程中,记者发现了一些问题。

记者要采访n个人。已知第i个人要回答Ta缺某事物Xi,但如果Ta之前的一个人的答案和Ta一样,Ta就会改口。为了避免受访者改口,记者决定改变采访顺序。

现在给出这n个人的答案,请输出一种可行的方案。要求该方案字典序最小。数据保证有解。

输入描述 Input Description

第一行,一个数n。

接下来的n行,第i+1行为Xi。

输出描述 Output Description

一行,n个数,表示依次访问n个人的顺序。以空格隔开。

样例输入 Sample Input

10
1
5
4
1
4
2
1
3
3
5

样例输出 Sample Output

1 2 3 4 5 6 7 8 10 9 

数据范围及提示 Data Size & Hint

0<n<=104,0<Xi<=5。数据由随机数产生。

分类标签 Tags 点此展开 

 
 
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
#define N 10009
int a[N],b[N],ans[N],vis[N],n;
void out(){
    for(int i=1;i<=n;i++)
        printf("%d ",b[i]);
    puts("");
}
void dfs(int i){
    if(i<=n)
        for(int j=1;j<=n;j++)
            if(!vis[j]&&a[j]!=ans[i-1]){
                b[i]=j;//记录答案 
                ans[i]=a[j];//记录a之前的一个人的答案
                vis[j]=1;
                if(i==n){
                    out();exit(0);//只输出一次,不能是return 
                }
                dfs(i+1);
                vis[j]=0;
            }
}
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",a+i);
    dfs(1);
    return 0;
}
 
原文地址:https://www.cnblogs.com/shenben/p/5574112.html