zoukankan      html  css  js  c++  java
  • CF622D Solution

    题目链接

    题解

    因为\(d_i>0,i-n\le 0\),为使\(|d_i+i-n|\)尽可能小,最好令\(d_i=n-i\)。如下构造可满足此条件:

    对于与\(n\)奇偶相反的\(i\)\(\{...,i-2,i,i+2,...,n-1,n-1,...,i+2,i,i-2,...\}\)

    对于与\(n\)奇偶相同的\(i\)\(\{...,i-2,i,i+2,...,n-2,n,n-2,...,i+2,i,i-2,...\}\)(此时\(d_i\)为偶数,中间需要一个\(n\)占位,因为\(n-n=0\)\(n\)的位置不影响答案)。将上述两序列接在一起,结尾添加另一个\(n\)即可。

    AC代码

    #include<bits/stdc++.h>
    using namespace std;
    const int N=5e5+10;
    int a[N],b1[N],b2[N];//b1:奇偶相反,b2:奇偶相同
    int main()
    {
    	int n,cnt1=0,cnt2=0;
    	scanf("%d",&n);
    	for(int i=1;i<n;i+=2) b1[++cnt1]=n-i;
    	for(int i=2;i<n;i+=2) b2[++cnt2]=n-i;
    	for(int i=cnt1;i>=1;i--) printf("%d ",b1[i]);
    	for(int i=1;i<=cnt1;i++) printf("%d ",b1[i]);
    	for(int i=cnt2;i>=1;i--) printf("%d ",b2[i]);
    	printf("%d ",n);
    	for(int i=1;i<=cnt2;i++) printf("%d ",b2[i]);
    	printf("%d",n);
    	return 0;
    }
    
  • 相关阅读:
    骑行封龙山
    静夜
    骑行伏羲台
    我?
    生活挺好
    多事之秋,大家注意安全
    看不到啊看不到
    个人时间管理
    给DataGrid设置中文列名
    食用油是那么让人又爱又恨!
  • 原文地址:https://www.cnblogs.com/violetholmes/p/14393221.html
Copyright © 2011-2022 走看看