• 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;
    }
  • 相关阅读:
    域运算符::
    类和结构体类型的异同
    4 链表组件(817)
    2 旋转链表(61)
    1、重排链表(力扣143)
    子字符串排序的关键代码
    C语言四舍五入
    约分
    python学习第八天
    python学习第七天
  • 原文地址:https://www.cnblogs.com/DreamHighWithMe/p/3427989.html
Copyright © 2020-2023  润新知