Codeforces edu 7 D. Optimal Number Permutation 构造

来源:互联网 发布:淘宝账号登录不了 编辑:程序博客网 时间:2024/06/05 22:36

题目

题目链接:http://codeforces.com/contest/622/problem/D

题目来源:Educational Codeforces Round 7

简要题意:令一个和式取到最小。

题解

首先可以暴力一下,可以发现都能达到0为结果。

然后可以发现这样每个数所需的距离是固定的。

将数按照奇数和偶数放到两段中,就能构造出来,其中最后一个不放入,最后塞到空位中。

很容易发现这样一定能够构造出一个解来,挺不错的构造想法题。

代码

#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>#include <cstring>#include <stack>#include <queue>#include <string>#include <vector>#include <set>#include <map>#define pb push_back#define mp make_pair#define all(x) (x).begin(),(x).end()#define sz(x) ((int)(x).size())#define fi first#define se secondusing namespace std;typedef long long LL;typedef vector<int> VI;typedef pair<int,int> PII;LL powmod(LL a,LL b, LL MOD) {LL res=1;a%=MOD;for(;b;b>>=1){if(b&1)res=res*a%MOD;a=a*a%MOD;}return res;}// headconst int N = 5E5+5;int a[N*2];int main(){    int n;    while (scanf("%d", &n) == 1) {        int l = 1, r = n;        for (int i = 1; i < n; i += 2) {            a[l++] = a[r--] = i;        }        l = n+1, r = 2*n-1;        for (int i = 2; i < n; i += 2) {            a[l++] = a[r--] = i;        }        int lim = 2*n;        for (int i = 1; i <= lim; i++) {            if (!a[i]) a[i] = n;            printf("%d%c", a[i], i==lim ? '\n' : ' ');        }        memset(a, 0, sizeof a);    }    return 0;}
0 0
原创粉丝点击