正解:构造

解题报告:

传送门!

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. [转]NMON服务器监控、指标说明

    一.NMON中的各项参数指标: SYS_SUMM:显示当前服务器的总体性能情况 Total System I/OStatistics:Avg tps during an interval:显示采集间隔 ...

  2. jquery把int类型转换成字符串类型的方法

    jQuery中把获取的number类型数据转换成字符串类型 var val=$(“#id).val(); If(typeof val==”number”){ val+=' '; }

  3. Error 2 error C2784: 'bool std::operator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &)'

    Error 2 error C2784: 'bool std::operator <(const std::_Tree<_Traits> &,const std::_Tree ...

  4. NopCommerce的定时任务分析和应用

    NOP的定时任务也是群里听群友听说,我很少在WEB端做定时任务,所以尝鲜下,看看效果怎么样. 主要涉及到下面几个类和配置文件配置: web.config <configSections> ...

  5. Android Studio右下角不显示当前branch名称

    当一个project刚从git server端clone下来并open后,或许你会发如今Android Studio的右下角看不到当前是哪个branch的信息.例如以下图: 原因分析:不显示的原因是由 ...

  6. Ext3.4--TreeGridDemo

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CategoryProper ...

  7. iOS 开发自定义一个提示框

    在开发的时候,会碰到很多需要提示的地方,提示的方法也有很多种,ios 8 以前的版本有alertview还是以后用的alertController,都是这种作用, 但是不够灵活,而且用的多了,用户体验 ...

  8. ios开发 int,NSInteger,NSUInteger,NSNumber

    分享一下,在工作工程中遇到的一些不留心的地方: 1.当需要使用int类型的变量的时候,可以像写C的程序一样,用int,也可以用NSInteger,但更推荐使用NSInteger,因为这样就不用考虑设备 ...

  9. ftplib模块【python】

    转自:http://www.cnblogs.com/kaituorensheng/p/4480512.html 函数释义 Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实 ...

  10. Android中的动画,选择器,样式和主题的使用

    一.动画: 1.动画的分类: 1).Tween动画:这种实现方式可以使视图组件移动.放大.缩小以及产生透明度的变化: 2).Frame动画:传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影. ...