Codeforces Round #446 (Div. 2) D. Gluttony

来源:互联网 发布:如何雇佣网络水军价格 编辑:程序博客网 时间:2024/06/05 01:03

传送门:http://codeforces.com/contest/892/problem/D
题意是:
给你一个a[]数组,让你构造出一个b[]数组,使得a[]数组的前k项子集和,和b[]数组的不同。
思路:
简单构造题,首先让a[]数组排序然后左移动一格或者右移动一格,就可以构造出和原来不同的子集和了。

#include<bits/stdc++.h>using namespace std;int a[29],b[30],c[30];bool cmp(int x,int y){    return a[x]<a[y];}int main(){    int n;    scanf("%d",&n);    for(int i=0;i<n;i++)    {        scanf("%d",&a[i]);        b[i]=i;    }    sort(b,b+n,cmp);//排序a[]数组的坐标    for(int i=0;i<n-1;i++)    {        c[b[i]]=a[b[i+1]];//左移动一位    }    c[b[n-1]]=a[b[0]];    for(int i=0;i<n;i++)    {        printf("%d ",c[i]);    }    printf("\n");    return 0;}
原创粉丝点击