正解:构造

解题报告:

传送门!

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. 不错的源码演示:admin5源码

    admin5源码官网:http://down.admin5.com/ 集资讯,源码,字体,itchat于一体的网站,可以下载喔! 实际项目中可以用得到.

  2. hbase集群部分节点HRegionServer启动后自动关闭的问题

    参考链接 http://f.dataguru.cn/thread-209058-1-1.html 我有4HRegionServer节点,1个master,其中3个是unbuntu 系统,2个节点是ce ...

  3. Jquery实现上下移动和排序代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  4. Vs2010创建WebService

    在Visual Studio 2010中已经找不到直接创建WebService的模板方式了,但下面的方法可心实现: 在 Visual Studio 2010 的新建 Web 应用程序或者 Web 网站 ...

  5. swift - UIDatePicker 的用法

    1.初始化button,datepicker,label等控件,初始化时间格式化器     var datePicker = UIDatePicker()    var btnShows = UIBu ...

  6. linux下更改vncserver的密码

    Linux下VNC配置多个桌面和修改密码 1:vncserver2:iptables -I INPUT -p tcp --dport 5901 -j ACCEPT   客户端方式3:iptables ...

  7. php导出excel(xls或xlsx)(解决长数字显示问题)

    1)demo $titles = array('订单号','商品结算码','合同号','供应商名称','专柜','商品名称','商品货号','商品单价','商品总价','供应商结算金额','商品数量' ...

  8. cut的用法【转】

    cut是一个选取命令,就是将一段数据经过分析,取出我们想要的.一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的. (1)其语法格式为:cut  [-bn] [file] 或 cut ...

  9. 开源项目源码解析-PhotoView 源码解析

    1. 功能介绍 特性(Features): 支持 Pinch 手势自由缩放. 支持双击放大/还原. 支持平滑滚动. 在滑动父控件下能够运行良好.(例如:ViewPager) 支持基于 Matrix 变 ...

  10. mac 安装mysql 修改密码

    我草!!! 上网查资料,安装mysql,一大推废话,简直就是他妈的瞎扯淡,真是能他妈的瞎编,草! 为了不让后面的同学看到那些狗屁不通的资料,我把自己安装mysql的步骤,以及修改mysql密码的方法梳 ...