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;
        }
        
    }
  • 相关阅读:
    4.启动虚拟机 设置CentOS7
    Mybatis-09-缓存
    Mybatis-08-动态SQL
    Mybatis-07-多对一和一对多处理
    Mybatis-06-Lombok
    Mybatis-05-使用注解开发
    Mybatis-04-分页
    Mybatis-03-日志
    Mybatis-02-CRUD及配置解析
    Mybatis-01-什么是Mybatis以及第一个Mybatis
  • 原文地址:https://www.cnblogs.com/liyexin/p/13395587.html
Copyright © 2011-2022 走看看