codeforces 622D Optimal Number Permutation 思维

来源:互联网 发布:产品360度展示软件 编辑:程序博客网 时间:2024/06/04 18:33

题意:有n个数,要求每个数出现2次,位置分别为xi、yi(xi < yi),定义di = yi-xi。让你找到一个全排列使得sigma((n-i) * |di+i-n|)最小。

因为推不出单调性,也可以说是非线性的单调性 所以直观猜测为0.那么每个数都是 n-i相隔。。所以 开始写。。写了好久

#include <bits/stdc++.h>using namespace std;const int maxn=1e6+10;int num[maxn];int main(){    int n;    cin>>n;    int i;    int len=n;    int tot=1;    memset(num,0,sizeof(num));    for( i=1;i<n&&tot<n;i++)    {        num[i]=num[len-i+1]=tot;        tot+=2;    }    tot=2;    len=n+1+n-tot;      for(int i=1;i<n&&tot<n;i++)    {        num[n+i]=num[len-i+1]=tot;        tot+=2;    }    for(int i=1;i<=2*n;i++)    if(num[i]==0)    num[i]=n;    for(int i=1;i<=2*n;i++)    printf("%d ",num[i]);    printf("\n");}
阅读全文
0 0
原创粉丝点击