zoukankan      html  css  js  c++  java
  • B. Levko and Permutation 简单构造

    B. Levko and Permutation
    time limit per test
    1 second
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    Levko loves permutations very much. A permutation of length n is a sequence of distinct positive integers, each is at most n.

    Let’s assume that value gcd(a, b) shows the greatest common divisor of numbers a and b. Levko assumes that element pi of permutation p1, p2, ... , pn is good if gcd(i, pi) > 1. Levko considers a permutation beautiful, if it has exactly k good elements. Unfortunately, he doesn’t know any beautiful permutation. Your task is to help him to find at least one of them.

    Input

    The single line contains two integers n and k (1 ≤ n ≤ 1050 ≤ k ≤ n).

    Output

    In a single line print either any beautiful permutation or -1, if such permutation doesn’t exist.

    If there are multiple suitable permutations, you are allowed to print any of them.

    Sample test(s)
    input
    4 2
    output
    2 4 3 1
    input
    1 1
    output
    -1
    Note

    In the first sample elements 4 and 3 are good because gcd(2, 4) = 2 > 1 and gcd(3, 3) = 3 > 1. Elements 2 and 1 are not good because gcd(1, 2) = 1 and gcd(4, 1) = 1. As there are exactly 2 good elements, the permutation is beautiful.

    The second sample has no beautiful permutations.

    const int INF = 1000000000;
    const double eps = 1e-8;
    const int maxn = 300000;
    int ans[maxn];
    int main() 
    {
        //freopen("in.txt","r",stdin);
        int n,k;
        while(cin>>n>>k)
        {
            if(k > n - 1)
            {
                cout<<-1<<endl;
                continue;
            }
            repf(i,1,n)
                ans[i] = i;
            int Max = n - 1;
            int temp = Max - k;
            
            int t = temp/2;
            int e;
            for(int i = n;i>=2;i-=2)
            {
                if(t)
                {
                    swap(ans[i],ans[i-1]);
                    t--;
                }else
                {
                   e = i; 
                }
            }
            if(temp%2)
            {
                swap(ans[1],ans[e]);
            }
            
            printf("%d",ans[1]);
            repf(i,2,n)
                printf(" %d",ans[i]);
            cout<<endl;
        }
        return 0;
    }
  • 相关阅读:
    PHP:判断客户端是否使用代理服务器及其匿名级别
    Ruby:Mechanize的使用教程
    Ruby:多线程队列(Queue)下载博客文章到本地
    Ruby:线程实现经典的生产者消费者问题
    Ruby:Open-uri和Net::HTTP的不同
    Ruby:Nokogiri
    Ruby:字符串处理函数
    Ruby:Net::HTTP
    10分钟打造强大的gvim
    命令行批量合并视频脚本
  • 原文地址:https://www.cnblogs.com/DreamHighWithMe/p/3427989.html
Copyright © 2011-2022 走看看