zoukankan      html  css  js  c++  java
  • Codeforces Round #714 (div.2)

    A

    题意

    给出(n(leq nleq 100))(k(0leq kleq 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
    ");
            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
    ",ans[n]);
            }
        }
    }
    

    B

    C

    D

    E

    F

  • 相关阅读:
    第二次作业
    动手动脑
    第五周总结
    第四周总结
    二维数组
    返回一个整数数组中最大子数组的和---第一次完善
    第三周总结
    第二周进度
    自我介绍
    返回一个整数数组中最大子数组的和
  • 原文地址:https://www.cnblogs.com/fxq1304/p/14664549.html
Copyright © 2011-2022 走看看