• codeforces 483C.Diverse Permutation 解题报告


    题目链接:http://codeforces.com/problemset/problem/483/C

    题目意思:给出 n 和 k,要求输出一个含有 n 个数的排列 p1, p2, ...,pn,使得 |p1 - p2|, |p2 - p3|, ..., |pn - 1 - pn恰好有 k 个不同的数。注意,p1, p2, ..., pn 每个数是不相等的,而且不大于 n。

        构造题,这个通过手动很容易知道答案。又献上我的恶心涂鸦~~~看完之后会发现其实很简单,好像比 B 还要简单。

       

        

         只要红色的竖线前面满足不同的差值恰好有 k 个即可,上面的“+”“-” 是规律来的。竖线后面的差值是清一色等于 1 的。

         

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <cstring>
     5 #include <algorithm>
     6 using namespace std;
     7 
     8 int main()
     9 {
    10     int n, k;
    11     while (scanf("%d%d", &n, &k) != EOF)
    12     {
    13         if (k == 1)
    14         {
    15             for (int i = 1; i <= n; i++)
    16                 printf("%d ", i);
    17             printf("
    ");
    18         }
    19         else
    20         {
    21             printf("1");
    22             int st = 1;
    23             int interval = k;
    24             for (int i = 1; i < k+1; i++, interval--)
    25             {
    26                 st += (i&1 ? interval : -interval);
    27                 printf(" %d", st);
    28             }
    29             for (int i = k+2; i <= n; i++)
    30                 printf(" %d", i);
    31             printf("
    ");
    32         }
    33     }
    34     return 0;
    35 }
  • 相关阅读:
    SharePoint中获取当前登录的用户名
    SharePoint 2013 图文开发系列之InfoPath入门
    在InfoPath中如何获取当前用户的信息(Profile)
    更新当前列并添加其他列
    poj3067 Japan
    poj2481 Cows
    poj1195 Mobile phones
    poj2299 Ultra-QuickSort
    lower_bound()和upper_bound
    hdu4339 Query
  • 原文地址:https://www.cnblogs.com/windysai/p/4049857.html
Copyright © 2020-2023  润新知