zoukankan      html  css  js  c++  java
  • CodeForces

    Piegirl found the red button. You have one last chance to change the inevitable end.

    The circuit under the button consists of n nodes, numbered from 0 to n - 1. In order to deactivate the button, the n nodes must be disarmed in a particular order. Node 0 must be disarmed first. After disarming node i, the next node to be disarmed must be either node (2·i) modulo n or node (2·i) + 1 modulo n. The last node to be disarmed must be node 0. Node 0 must be disarmed twice, but all other nodes must be disarmed exactly once.

    Your task is to find any such order and print it. If there is no such order, print -1.


    Input

    Input consists of a single integer n (2 ≤ n ≤ 105).

    Output

    Print an order in which you can to disarm all nodes. If it is impossible, print -1 instead. If there are multiple orders, print any one of them.

    Examples
    Input
    2
    Output
    0 1 0
    Input
    3
    Output
    -1
    Input
    4
    Output
    0 1 3 2 0
    Input
    16
    Output
    0 1 2 4 9 3 6 13 10 5 11 7 15 14 12 8 0

    题意:给定点[0,N-1],点i到i*2%N,i*2+1%N连边,问是否存在从0出发的哈密尔顿回路。

    思路:N为奇数,无解,因为(N-1)/2要么到N,要么到0,不能满足N和0同时被遍历。

    所以考虑N是偶数,发现i和(i+N/2)%N连出去的边相同。 那么发现给个点的入度出度都为2,由于互斥关系,那么入度出度都是1,就是求欧拉回路了; 一定有解,dfs倒序输出,即可。

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1000010;
    const int Mod=1e9+7;
    int vis[maxn],ans[maxn],tot,N;
    void dfs(int u)
    {
        if(vis[u]) return ;
        vis[u]=1;
        dfs(u*2%N);
        dfs((u*2+1)%N);
        ans[++tot]=u;
    }
    int main()
    {
        scanf("%d",&N);
        if(N&1) return puts("-1"),0;
        dfs(0);
        for(int i=tot;i>=1;i--) printf("%d ",ans[i]);
        puts("0");
        return 0;
    }
  • 相关阅读:
    CentOS6.2编译安装Nginx1.2.0
    mysql之主从复制篇
    CentOS6.2编译安装PHP5.4.0
    c# 多线程 编程
    QQ空间及邮箱验证码登录的校验方式及自动登录的解决方案
    C# 动态编译、动态执行、动态调试
    在Visual C#中用ListView显示数据记录
    推荐一个免费的HTTP抓包分析工具 Fiddler Web Debugger
    C#简繁体转换方法(Microsoft.Office.Interop.Word)
    C#读取字符串类型XML
  • 原文地址:https://www.cnblogs.com/hua-dong/p/10155362.html
Copyright © 2011-2022 走看看