zoukankan      html  css  js  c++  java
  • Easy Construction

    这是牛客2020暑期多校第六场的E题

    题目大意是给我们n长的1-n的序列,让我们构造使得这个序列任意长度sum都存在,长度为sum的序列和取余n为k;

    粗看题目大意感觉是道难题,但是分析一下可以得到以下结论:

    (1)如果n为奇数,那么长度为n的总和为(n+1)*n/2,那么取余n,必定为0。这就是说n为奇数,k为0;

    (2)如果n为偶数,那么长度为n的总和为(n+1)*n/2,那么取余n,必定为n/2。这就是说n为偶数,k为n/2;

    接着如果都满足条件,那么我们就要开始构造这个序列让他满足我们的需求:

    (1)首先开始构造奇数,奇数情况下,k为0,那么我们保证第一位是n,就确保了长度sum=1时有效,然后我们把

    剩下的数两两凑对,i=1和n-i凑一对,那么sum=2是就满足条件,3的时候就是加上第一位,然后凑上i=2和n-i,和i=1与n-i,

    这样就满足4位,同理......就构造完成

    (2)偶数情况下,k=n/2,那我们的核心就是围绕n/2 ,然后剩下的两两凑对构成n,和奇数一样即可,唯一的问题是n这个数

    的位置要怎么办,我们把它放到第一位,这样方便我们凑sum=2,也不影响sum=3,因为我们的3是要保证n/2和i=1与n-1相结合

    所以把n放到第一位即可构造成功。

    然后附上代码:

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    #include<vector>
    #define ll long long
    using namespace std;
    
    
    int main()
    {
        int n, k;
        cin >> n >> k;
        if (n % 2 == 1)
        {
            if (k != 0)
            {
                cout << "-1" << endl;
            }
            else
            {
                cout << n << " ";
                for (int i = 1; i <= n / 2; i++)
                {
                    cout<<" " << i << " " << n - i;
                }
            }
        }
        else
        {
            if (k != n / 2)
            {
                cout << "-1" << endl;
            }
            else
            {
                cout << n << " " << k;
                for (int i = 1; i < n / 2; i++)
                {
                    cout << " " << i << " " << n - i;
                }
            }
        }
    }
  • 相关阅读:
    046 Android 给app加入百度地图
    007 Android newsClient 小实例应用
    IntelliJ IDEA(Android Studio)设置代码的快捷编辑模板Live Templates
    006 Android 利用apache tomcat在自己的电脑上搭建服务器
    005 Android HttpURLConnection的使用+Handler的原理及典型应用
    004 Andriod ListView组件的使用
    spd更改标题点击链接路径到编辑页面
    以下修改a标签的href链接和修改文字的代码
    域名不能访问,ip能访问就是dns
    删除web部件
  • 原文地址:https://www.cnblogs.com/csxaxx/p/13391102.html
Copyright © 2011-2022 走看看