zoukankan      html  css  js  c++  java
  • #构造#CF891B Gluttony

    题目

    有一个长度为 (n) 的数列 (a),数字互不相同,
    现在要打乱这个数列,设其为 (b)
    使得 (a) 的任意真子序列与对应的 (b) 的任意真子序列的数字和不同
    输出任意一种合法的 (b)(1<nleq 22)


    分析

    如果让 (b)(a) 数字的后继,((max{a}) 取min{a}),
    那么数字和当且仅当整个数列才会相同,所以这样保证是有解的


    代码

    #include <cstdio>
    #include <cctype>
    #include <algorithm>
    #define rr register
    using namespace std;
    int n,a[31],b[31];
    inline signed iut(){
    	rr int ans=0; rr char c=getchar();
    	while (!isdigit(c)) c=getchar();
    	while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
    	return ans;
    }
    inline void print(int ans){
    	if (ans>9) print(ans/10);
    	putchar(ans%10+48); 
    }
    signed main(){
    	n=iut();
    	for (rr int i=1;i<=n;++i) b[i]=a[i]=iut();
    	sort(b+1,b+1+n);
    	for (rr int i=1;i<=n;++i){
    		a[i]=lower_bound(b+1,b+1+n,a[i])-b;
    		print(b[a[i]%n+1]),putchar(32);
    	}
    	return 0;
    }
    
  • 相关阅读:
    do-while-zero 结构在宏定义中的应用
    关于运放的几个概念
    Spring MVC 学习第一篇
    1229递归下降
    有限自动机的构造与识别
    11.11评论
    文法分析2
    文法分析
    201406114215+林志杰+文法分析
    词法分析实验总结
  • 原文地址:https://www.cnblogs.com/Spare-No-Effort/p/15333540.html
Copyright © 2011-2022 走看看