• Codeforces 482


    这是一道蛮基础的构造题。

               - k         +(k - 1)      -(k - 2) 

    1 + k ,    1 ,         k ,             2,    ...................

               /          /            /

              k          k-1          k-2

    如图所示,先构造第一个数,就是1 + k, 然后接下来每个数字和上个数相差k , k -1 , k -2

    这样下来,最后一个数字就是一个中间的数字,过程就是不断向中间逼近。

    在k + 1后面的数字,只要升序输出就可以了。

    构造题还是不太熟练阿 QAQ

    贴代码了:

    //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler
    #include <stdio.h>
    #include <iostream>
    #include <cstring>
    #include <cmath>
    #include <stack>
    #include <queue>
    #include <vector>
    #include <algorithm>
    #define ll long long
    #define Max(a,b) (((a) > (b)) ? (a) : (b))
    #define Min(a,b) (((a) < (b)) ? (a) : (b))
    #define Abs(x) (((x) > 0) ? (x) : (-(x)))
    using namespace std;
    const int INF = 0x3f3f3f3f;
    
    int a[100001];
    
    int main(){
        int i, j, k, t, m, n;
        while(EOF != scanf("%d%d",&n,&k)){
            if(k == 1){
                for(i = 1; i < n; ++i)  printf("%d ",i);
                printf("%d
    ",n);
                continue;
            }
    
            a[1] = 1 + k;
            for(i = 2; i <= k + 1; ++i){
                if(i % 2 == 0)
                    a[i] = a[i - 1] - (k - (i - 2));
                else
                    a[i] = a[i - 1] + (k - (i - 2));
            }
            int cur = 1;
            for(i = k + 2; i <= n; ++i){
                a[i] = k + 1 + cur++;
            }
            for(i = 1; i < n; ++i){
                printf("%d ",a[i]);
            }
            printf("%d
    ",a[n]);
        }
        return 0;
    }
  • 相关阅读:
    安装SQL Server 2012遇到“需要更新的以前的Visual Studio 2010实例.”
    搭建网站 discuzx ecshop php
    appserv安装
    php 修改 AppServ 下Apache 端口
    sed基本用法
    grep命令
    awk命令详解二
    Java面向对象六大原则
    Java基础——常用类之日期时间类
    springMVC第一天——入门、整合与参数绑定
  • 原文地址:https://www.cnblogs.com/wushuaiyi/p/4055048.html
Copyright © 2020-2023  润新知