CF909F AND-permutations 构造
正解:构造
解题报告:
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 构造的更多相关文章
- uva11630 or hdu2987 Cyclic antimonotonic permutations(构造水题)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Cyclic antimonotonic permutations Time Li ...
- UVa 11925 Generating Permutations (构造法)
题意:给定一个序列,让你从一个升序列变成该序列,并且只有两种操作,操作1:交换前两个元素,操作2:把第一个元素移动到最后. 析:一开始的时候吧,不会,还是看的题解,首先是要逆序来做,这样可能好做一点, ...
- UVA - 11925 Generating Permutations (思维,构造)
给你一个长度为n(n<=300)的排列,有两种操作,第一种是交换前两个数,第二种是把第一个数放到最后,让你用不超过2n^2次的操作把一个初始为1-n升序的排列变为该排列. 一开始被紫薯蛋疼的翻译 ...
- UVA - 11925 Generating Permutations(生成排列)(构造)
题意:将序列1,2,3,……,n,用不超过2n^2次操作,通过下列操作变成给定序列.(1<=n<=300) 1.交换前两个元素 2.将第一个元素移到最后 分析:因为将序列变成升序更容易操作 ...
- 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 ...
- 【Permutations】cpp
题目: Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the fo ...
- HDU 5916 Harmonic Value Description 【构造】(2016中国大学生程序设计竞赛(长春))
Harmonic Value Description Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Ja ...
- 【CF715E】Complete the Permutations(容斥,第一类斯特林数)
[CF715E]Complete the Permutations(容斥,第一类斯特林数) 题面 CF 洛谷 给定两个排列\(p,q\),但是其中有些位置未知,用\(0\)表示. 现在让你补全两个排列 ...
- 回溯--- Permutations
46.Permutations (Medium)](https://leetcode.com/problems/permutations/description/) [1,2,3] have the ...
随机推荐
- vncserver的安装和使用 2
环境:RedHat Linux 6企业版.Xwindows:gnome (红帽默认安装的图形界面) 尽管我们可以使用SSH连接远程通过字符界面来操作Linux,但是对于更多熟悉图形人来说是很不方便的, ...
- NET Core 环境搭建和命令行CLI入门[转]
NET Core 环境搭建和命令行CLI入门 时间:2016-07-06 01:48:19 阅读:258 评论:0 收藏:0 [点我收藏+] 标签: N ...
- ojdbc14.jar 放在kettle那个目录下面
\libext\edtftpj-1.4.5.jar \libext\firebirdsql-full.jar \libext\firebirdsql.jar \libext\gis-shape.jar ...
- 我的javascript心跳机
li { list-style: none!important; padding:0; } .list_num{ list-style-type:decimal; } .list_inline{ ma ...
- [java] java 设计模式(2):抽象工厂模式(Abstract Factory)
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这 ...
- 【java】 java 设计模式(1):工厂方法模式(Factory Method)
工厂方法模式分为三种: 1.普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建.首先看下关系图: 举例如下:(我们举一个发送邮件和短信的例子) 首先,创建二者的共同接口: p ...
- 微软Azure、谷歌GAE、亚马逊AWS比較
谷歌Google App Engine 亚马逊AWS 微软Microsoft Azure 提供服 务类型 PaaS, SaaS Iaas, PaaS IaaS, PaaS, SaaS 服务间 ...
- Maven(二)-- 搭建私服,上传jar
一.在setting中配置 私服的镜像,在mirrors标签中加上: <!--第一步 配置私服的镜像--> <mirror> <!--此处配置所有的构建均从私有仓库中下载 ...
- webstorm编译less和scss
Webstorm 配置less编译的Arguments参数: $FileName$ $FileParentDir$\ccy\ccy1\ccy2\$FileNameWithoutExtension$.c ...
- Runtime 运行时之一:消息传递
什么是Runtime? Runtime顾名思义即为运行时.就是系统运行时候的一些机制,它提供了一些使得对象之间能够传递消息的重要函数,其中最主要的就是消息机制了.相较于C语言而言,C语言使用的是“静态 ...