正解:构造

解题报告:

传送门!

QAQ我jio得还挺难的,,,构造+数论什么的果然还是不适合灵巧这种菜菜啊QAQ

不过理解了的话也就没有那么难?所以还是港下QAQ

首先看task1

首先要发现一个,必然的结论

就是当n为奇数时是无解的

因为你这么想,只看20那一位,当n是奇数时,令n=2*k+1,那就有k+1个1和k个0,然而我构造出来又是需要k+1个0和k个1的,所以显然布星

然后关于构造,说实话我jio得这种要构造出一个范围内的全排列的大多是用交换解决的?

这个同样,就是找出小于等于n的max(2k)然后交换2k和2k-1 2k+1和2k-2 ... n和2*2k-1-n

这样2*2k-1-n到n就解决了

剩下的其实都是一样的方法解决掉嘛,能get?

然后task1就解决辣!

task2一样的思路想下,就是先解决什么时候无解然后想下怎么交换就做完了嘛

首先关于无解

显然的是当n=1<<k时无解,因为对于n你显然找不到一个数使得它们并起来!=0嘛

然后当n=3或者n=5时也无解(,,,这个我也说不清原理?QAQ?反正手玩出来就是无解的,,,但我不会求QAQ

然后这么考虑,把2k和2k+1分一组,显然它们只有20这一位不同,那就显然会并起来!=0

然后分类讨论下

如果n是偶数

这个情况比较简单,这时候就剩下1和n,而且因为n!=1<<k所以显然n&(n-2)!=0

所以把第一个和倒数三个变成 n-1 n 1 n-2 构造完毕

那如果n是奇数

这个构造起来就奇妙一些,,,就是说你告诉我这么构造我能理解,但是我是想不出来要这么构造的QAQ

就这样子 前7个变成7326145

然后因为n是奇数所以没有剩,完美结束辣!

欧克克我去打代码了等下把code放上来QAQ

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rp(i,x,y) for(register ll i=x;i<=y;++i)
#define my(i,x,y) for(register ll i=x;i>=y;--i) const ll N=+;
ll n,cnt,as[N]; inline ll read()
{
register char ch=getchar();register ll x=;register bool y=;
while(ch!='-' && (ch>'' || ch<''))ch=getchar();
if(ch=='-')ch=getchar(),y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=getchar();
return y?x:-x;
}
inline ll lg(ll x)
{
ll d=;
while((<<d)<=x)++d;
return d-;
}
inline void tsk1(ll x)
{
if(x&){printf("NO\n");return;}
printf("YES\n");
ll cs=(ll)lg(x),nw=n,gg;cnt=;
while(nw>)
{gg=<<cs;my(i,nw,gg)as[++cnt]=(gg<<)--i;rp(i,gg,nw)as[++cnt]=i;nw=(gg<<)--nw;cs=(ll)lg(nw);}
my(i,n,)printf("%lld ",as[i]);
printf("\n");
}
inline void tsk2(ll x)
{
if(x== || x== || x==(<<lg(x))){printf("NO\n");return;}
printf("YES\n");cnt=;
if(x&){cnt=;as[]=;as[]=;as[]=;as[]=;as[]=;as[]=;as[]=;}
while(cnt<=x){++cnt;as[cnt]=cnt+;++cnt;as[cnt]=cnt-;}
if(!(x&)){as[]=x-;as[x-]=x;as[x-]=;as[x]=x-;}
rp(i,,n)printf("%lld ",as[i]);
} int main()
{
n=read();
tsk1(n);tsk2(n);
return ;
}

CF909F AND-permutations 构造的更多相关文章

  1. uva11630 or hdu2987 Cyclic antimonotonic permutations(构造水题)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Cyclic antimonotonic permutations Time Li ...

  2. UVa 11925 Generating Permutations (构造法)

    题意:给定一个序列,让你从一个升序列变成该序列,并且只有两种操作,操作1:交换前两个元素,操作2:把第一个元素移动到最后. 析:一开始的时候吧,不会,还是看的题解,首先是要逆序来做,这样可能好做一点, ...

  3. UVA - 11925 Generating Permutations (思维,构造)

    给你一个长度为n(n<=300)的排列,有两种操作,第一种是交换前两个数,第二种是把第一个数放到最后,让你用不超过2n^2次的操作把一个初始为1-n升序的排列变为该排列. 一开始被紫薯蛋疼的翻译 ...

  4. UVA - 11925 Generating Permutations(生成排列)(构造)

    题意:将序列1,2,3,……,n,用不超过2n^2次操作,通过下列操作变成给定序列.(1<=n<=300) 1.交换前两个元素 2.将第一个元素移到最后 分析:因为将序列变成升序更容易操作 ...

  5. Codeforces Round #663 (Div. 2) C. Cyclic Permutations (构造,图?)  

    题意:对于某个序列,若\(1\le i\le n\),\(1\le j\le i\)且\(p_j>p_i\),或者\(1\le i\le n\),\(i<j \le n\)且\(p_j&g ...

  6. 【Permutations】cpp

    题目: Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the fo ...

  7. HDU 5916 Harmonic Value Description 【构造】(2016中国大学生程序设计竞赛(长春))

    Harmonic Value Description Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Ja ...

  8. 【CF715E】Complete the Permutations(容斥,第一类斯特林数)

    [CF715E]Complete the Permutations(容斥,第一类斯特林数) 题面 CF 洛谷 给定两个排列\(p,q\),但是其中有些位置未知,用\(0\)表示. 现在让你补全两个排列 ...

  9. 回溯--- Permutations

    46.Permutations (Medium)](https://leetcode.com/problems/permutations/description/) [1,2,3] have the ...

随机推荐

  1. php把时间戳转换成英文格式

    <?php echo "时间格式1:".date("Y-m-d H:i:s ")."<br>";// 2010-06-12 ...

  2. WAMP环境下配置虚拟主机

    1.编辑httpd.conf,查找#Include conf/extra/httpd-vhosts.conf,把前面注释符号“#”删掉 2.编辑httpd-vhosts.conf文件, <Vir ...

  3. vc 获取 硬盘序列号 和 cpu

    vc 获取 硬盘序列号 和 cpu 唯一iD的方法?如题---------网上找来很多资料 也没找到, 要支持xp win7 32/64 系统下都能获取 硬盘序列号 和cpu ID 哪位朋友帮帮忙: ...

  4. 3d引擎列表

    免费引擎 Agar - 一个高级图形应用程序框架,用于2D和3D游戏. Allegro library - 基于 C/C++ 的游戏引擎,支持图形,声音,输入,游戏时钟,浮点,压缩文件以及GUI. A ...

  5. haproxy+tomcat实现负载均衡以及session共享(linux centos7环境)

    一.安装HAProxy 1.进入home目录,下载最新haproxy安装包. cd /home wget http://haproxy.1wt.eu/download/1.4/src/haproxy- ...

  6. hbase shell学习-2

    一个学生成绩表的例子来演示hbase的用法. name grade course math english Tom 5 97 87 Jim 4 89 80 表的创建:语法:create '表名称',' ...

  7. cesium入门1

    本教程将获得所有技能水平的开发人员和他们的第一个铯应用程序运行. 验证Cesium在您的Web浏览器中工作的最简单的方法是单击此处运行Hello World示例 (打开一个新窗口).如果你看到像下面的 ...

  8. Java程序员职业规划

    Java 程序员职业规划 无论你是学习了 Java 即将进入企业工作,还是已经踏入了工作岗位的程序员.但是面对层出不穷的新技术,激增的就业压力,不断分化的开发角色,再加上 IT 发展的不明确,做出职业 ...

  9. 高级类特性----抽象类(abstract class)

    抽象类(abstract class) 随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用.类的设计应该保证父类和子类能够共享特征.有时将一个父类设计得非常抽象,以至于它没有具 ...

  10. swift - UIButton 的用法

    1,按钮的创建 (1)按钮有下面四种类型: contactAdd:前面带“+”图标按钮,默认文字颜色为蓝色,有触摸时的高亮效果 detailDisclosure:前面带“!”图标按钮,默认文字颜色为蓝 ...