• 构造 Codeforces Round #275 (Div. 2) C. Diverse Permutation


    题目传送门

     1 /*
     2     构造:首先先选好k个不同的值,从1到k,按要求把数字放好,其余的随便放。因为是绝对差值,从n开始一下一上,
     3         这样保证不会超出边界并且以防其余的数相邻绝对值差>k
     4 */
     5 /************************************************
     6 Author        :Running_Time
     7 Created Time  :2015-8-2 9:20:01
     8 File Name     :B.cpp
     9 *************************************************/
    10 
    11 #include <cstdio>
    12 #include <algorithm>
    13 #include <iostream>
    14 #include <sstream>
    15 #include <cstring>
    16 #include <cmath>
    17 #include <string>
    18 #include <vector>
    19 #include <queue>
    20 #include <deque>
    21 #include <stack>
    22 #include <list>
    23 #include <map>
    24 #include <set>
    25 #include <bitset>
    26 #include <cstdlib>
    27 #include <ctime>
    28 using namespace std;
    29 
    30 typedef long long ll;
    31 const int MAXN = 1e5 + 10;
    32 const int INF = 0x3f3f3f3f;
    33 const int MOD = 1e9 + 7;
    34 bool vis[MAXN];
    35 int a[MAXN];
    36 
    37 int main(void)    {       //Codeforces Round #275 (Div. 2) C. Diverse Permutation
    38     int n, k;
    39     while (scanf ("%d%d", &n, &k) == 2) {
    40         if (k == 1) {
    41             for (int i=1; i<=n; ++i)    {
    42                 printf ("%d%c", i, (i==n) ? '
    ' : ' ');
    43             }
    44             continue;
    45         }
    46         memset (vis, false, sizeof (vis));
    47         int j = 1;  a[0] = n;   vis[a[0]] = true;   bool flag = false;
    48         for (int i=k; i>=1; --i)    {
    49             if (flag)     {
    50                 a[j] = a[j-1] + i;  vis[a[j]] = true;  ++j;     flag = !flag;
    51             } 
    52             else    {
    53                 a[j] = a[j-1] - i;  vis[a[j]] = true;   j++;    flag = !flag;
    54             }            
    55         }
    56         int p = n;
    57         for (int i=j; i<n; ++i) {
    58             for (int k=p; k>=1; --k)    {
    59                 if (!vis[k])    {
    60                     a[i] = k;   vis[k] = true; p = k; break;
    61                 }
    62             }
    63         }
    64         for (int i=0; i<n; ++i)    {
    65             printf ("%d%c", a[i], (i==n-1) ? '
    ' : ' ');
    66         }
    67     }
    68 
    69     return 0;
    70 }
    编译人生,运行世界!
  • 相关阅读:
    es6实现简单模板编译
    JavaScript实现自定义短信模板
    关于JavaScript设计模式的学习(二)
    js获取可编辑区域光标位置
    关于JavaScript设计模式(一)
    为什么axios请求接口会发起两次请求
    axios基本用法
    webpack 配置文件
    IDEA系列(六)一This file is indented with tabs instead of 4 space
    IDEA系列(五)一控制台中文乱码
  • 原文地址:https://www.cnblogs.com/Running-Time/p/4695617.html
Copyright © 2020-2023  润新知