CF contest 892 D题 Gluttony

来源:互联网 发布:淘宝收货地址怎么定位 编辑:程序博客网 时间:2024/05/29 18:40

传送门
//题意:对于给定的一个长度为n的a序列, 重排a序列构造一个b序列, 使得b序列中任意一个连续区间中的前缀和不相等(除去全体的前缀和).
//思路:因为题目中给的是n个不同的数, 所以首先一定有解, 那么如何构造了, 我么可以假设一个序列 1 2 3 4 5 那么如何重构b序列了, 我们可以发现每一个数我们可以选择一个比它小的数相对应, 如果是最小的那个数就选最大的那个数与之对应, 这样构造的b序列一定是符合题意的 !!!

AC Code

int a[30],b[30],p[30];bool cmp(int x,int y) {    return a[x] < a[y];}void solve(){    int n;    while(~scanf("%d",&n)) {        for(int i=1;i<=n;i++) {            scanf("%d",&a[i]);            p[i] = i;        }        sort(p+1,p+1+n,cmp);        b[p[1]] = a[p[n]];        for(int i=2;i<=n;i++) {            b[p[i]] = a[p[i-1]];        }        for(int i=1;i<=n;i++) {            printf("%d%c",b[i],i==n?'\n':' ');        }    }}