zoukankan      html  css  js  c++  java
  • 2020牛客暑期多校训练营(第六场)E.Easy Construction(思维构造,附图解)

    地址:https://ac.nowcoder.com/acm/contest/5671/E

    题意:

    构造一个只含1~n的序列,使得对于每一个长度在[1,n]的i,序列都存在一段长度为i的连续子序列,它的和%n==k

    解析:

    正着看不好看,来倒着分析

    首先是i==n的情况,也就是序列总和,如果它%n!=k,那肯定是不行的。

    接下来就是一个猜测的过程了:

    i固定时,尽量把sum弄大,防止小的sum凑不出来,这个也是根据画了好几种得出的,所以一定要勤动手啊。

    所以就盲猜了一下构造方式,1,n-1,2,n-2.....直到把所有数填上,但是n奇偶不同,构造的过程在末尾有些不同。所以分开讨论即可。

    而且根据图,n这个数字是一定要在两端的。

    #include<bits/stdc++.h>
    #include<iostream>
    #include<cstring>
    #include<string.h>
    #include<cmath>
    #include<map>
    using namespace std;
    typedef long long ll;
    const int maxn=5e5+10;
    int a[maxn];
    int vis[5005];
    string s;
    int main()
    {
    //    memset(vis,0,sizeof(vis));
        int n,k;
        cin>>n>>k;
        if(n==1)
        {
            cout<<"1"<<endl;return 0;
        }
        ll sum=(ll)(n*n+n)/2;
        if(sum%n!=k)
        {
            cout<<"-1"<<endl;return 0;
        }
        if(n%2==0)
        {
            for(int i=1;i<n/2;i++)
                cout<<i<<" "<<n-i<<" ";
            cout<<n/2<<" "<<n<<endl;
        }
        else
        {
            for(int i=1;i<=n/2;i++)
                cout<<i<<" "<<n-i<<" ";
                cout<<n<<endl;
        }
        
    }
  • 相关阅读:
    2.7 矩阵的秩
    HDU
    HDU
    HDU
    HDU
    HDU
    hdu 5179 beautiful number(数位dp)
    ACdream
    CodeForces
    <a>标签中 href="/" 和 hideFocus="true"
  • 原文地址:https://www.cnblogs.com/liyexin/p/13395587.html
Copyright © 2011-2022 走看看