首页 > 其他 > 详细

Codeforces Round #714 (div.2)

时间:2021-04-15 23:24:08      阅读:20      评论:0      收藏:0      [点我收藏+]

A

题意

给出\(n(\leq n\leq 100)\)\(k(0\leq k\leq n)\),判断是否存在长度为\(n\)的排列,恰好有\(k\)个峰值,峰值为对于\(1< i< n\)\(a_i>a_{i-1}\)并且\(a_i>a_{i+1}\),如果存在,输出一个这样的排列,否则输出\(-1\)

题解

可以使用前\(k\)大的数构建\(k\)个峰值,排列为\(1,n,2,n-1,3,n-2,\cdots ,k,n-k+1,k+1,k+2,\cdots ,n-k\)。排列存在需要满足的条件为\(n-k+1>k+1\),即为\(2*k<n\)

#include<bits/stdc++.h>
#define LL long long
using namespace std;

int T,n,k,ans[110];

int main(){
    scanf("%d",&T);
    while(T--){
        scanf("%d %d",&n,&k);
        if(2*k>=n) printf("-1\n");
        else{
            for(int i=1;i<=n;i++) ans[i]=0;
            int num=n;
            for(int i=2;i<=n;i+=2){
                if(k==0) break;
                ans[i]=num--;
                k--;
            }
            num=1;
            for(int i=1;i<=n;i++){
                if(!ans[i]) ans[i]=num++;
            }
            for(int i=1;i<n;i++) printf("%d ",ans[i]);
            printf("%d\n",ans[n]);
        }
    }
}

B

C

D

E

F

Codeforces Round #714 (div.2)

原文:https://www.cnblogs.com/fxq1304/p/14664549.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!