• 你缺什么


    【题目描述】

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

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

    【输入描述】

    第一行,一个数n。

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

    【输出描述】

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

    【样例输入】

    10
    1
    5
    4
    1
    4
    2
    1
    3
    3
    5

    【样例输出】

    1 2 3 4 5 6 7 8 10 9

    【数据范围及提示】

    0 < n <= 10^4,0 < Xi <=5,数据由随机数产生。

    搜索:

    源代码:
    
    #include<cstdio>
    #include<cstdlib>
    int n,i[10001],h[10001],ans[10001]={0}; //建立2个新数组分别来存储解的编号和值,以空间换时间。
    bool vis[10001]={0};
    void Solve(int t) //DFS确实是做题太少了。
    {
        if (t<=n)
          for (int a=1;a<=n;a++) //前面还可能有未入队的条件呢。
            if (!vis[a]&&i[a]!=ans[t-1]) //未入队且不与解的上一个相同,即符合。
            {
                h[t]=a;
                ans[t]=i[a];
                vis[a]=true;
                if (t==n) //当符合时,即为字典序最小时。
                {
                    for (int a=1;a<=n;a++)
                      printf("%d ",h[a]);
                    exit(0); //直接退出。
                }
                Solve(t+1);
                vis[a]=false; //回溯。
            }
    }
    int main()
    {
        scanf("%d",&n);
        for (int a=1;a<=n;a++)
          scanf("%d",&i[a]);
        Solve(1);
        return 0;
    }

    模拟:

  • 相关阅读:
    Spring&AOP&JDK和Cglib动态代理&AspectJ进行AOP开发(XML方式)
    python 切换工作目录
    python 布隆过滤器
    python sys.path.append()
    python encrypt 实现AES加密
    python 魔术方法
    python re匹配中文和非中文
    python 文件整理 shutil
    python定时任务框架
    mac 系统修改环境变量
  • 原文地址:https://www.cnblogs.com/Ackermann/p/5573998.html
Copyright © 2020-2023  润新知