题目
Description
小Q是班长。在校运动会上,小Q班要进行队列表演。小Q要选出2*N名同学编队,每人都被编上一个号,每一个从1到N的自然数都被某2名同学佩戴,现在要求将他们排成一列,使两个编号为1的同学中间恰好夹1名同学,两个编号为2的同学中间恰好夹2名同学,……,两个编号为N的同学中间恰好夹N名同学,小Q希望知道这样的排法能否实现。
Input
输入文件仅包括一行,即要处理的N。N<=13
Output
输出有多少种排列顺序.
Sample Input
3
Sample Output
2

思路
这道题依然是DFS,每次搜索第dep个人放的位置,列举的范围从1到2n-dep-1,因为如果到2n-dep-1之后的位置,带有dep数字的两个人中间是无法隔dep个人的(前面都放了),所以就这样搜索下去。
当程序写完试运行时,我们发现N mod 4=1或2时,发现运行的时间较长,而其它情况下程序很快就找到可行解,我们就应该警觉到N mod4=1或2时,不存在可行解,下面我们证明N mod 4=1或2时,问题无解。
设问题的一个可行解为a1,a2,……,an,其中ai为标号为i的数字的位置,
这些数字它们对应数字的位置应该为a1+1+1,a2+2+1,……,an+n+1.这2N个整数a1,a2,……,an, a1+1+1,a2+2+1,……,an+n+1正是整数1,2,3,……,2N,因而
a1+a2+…+an+(a1+1+1)+(a2+2+1)+…+(an+n+1)
=

2(a1+a2+an)+n(n+1)/2+n=2n(2n+1)/2
2(a1+a2+…+an)=(3n2-n)/2
4(a1+a2+…+an)=n(3n-1)
可见n(3n-1)应该为4的倍数(上一排的等式推出),当n mod 4=0,1,2,3时,n(3n-1) mod 4分别为0,2,2,0,故n mod 4=1或2时,不满足设的“有解”的前提,问题无解

代码如下

 #include<bits/stdc++.h>
using namespace std;
int n,cnt;
bool flag[];
void ord(int per,int pla)
{
flag[pla]=!flag[pla];
flag[pla++per]=!flag[pla++per];
return;
}
void dfs(int dep)
{
if(dep>n)
{
cnt++;
return;
}
for(int i=;i<=*n-dep-;i++)
{
if(!flag[i]&&!flag[i+dep+])
{
ord(dep,i);
dfs(dep+);
ord(dep,i);
}
}
}
int main()
{
cin>>n;
if(n%==||n%==)
{
cout<<<<endl;
return ;
}
dfs();
cout<<cnt<<endl;
return ;
}

【题解】间隔排列-C++的更多相关文章

  1. [DFS]排队(间隔排列)-C++

    Description 小Q是班长.在校运动会上,小Q班要进行队列表演.小Q要选出2*N名同学编队,每人都被编上一个号,每一个从1到N的自然数都被某2名同学佩戴,现在要求将他们排成一列,使两个编号为1 ...

  2. [题解](排列/逆序对)luogu_P1338末日的传说

    首先我们要考虑怎么排能使逆序对数最多:显然是下降序列时,会产生n*(n-1)/2数量的逆序对 那么我们肯定是要尽量把序列的尾端安排成下降序列,前面的尽量不动,中间可能有一段排列自适应到m的逆序对数 然 ...

  3. [题解](排列组合)luogu_P3223排队

    把老师和女生插到男生中间,先对男生排列:A(n,n),然后把老师插到n+1个空里:A(n+1,2),然后放入女生:A(n+3,m) 但是少考虑了老师之间由1个女生分开的情况,所以把三个人看作一个整体, ...

  4. Codeforces Round #309 (Div. 2) C. Kyoya and Colored Balls 排列组合

    C. Kyoya and Colored Balls Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contes ...

  5. 【数论·错位排列】bzoj4517 排列计数

    4517: [Sdoi2016]排列计数 Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 1428  Solved: 872[Submit][Statu ...

  6. IOS开发基础知识--碎片50

      1:Masonry 2个或2个以上的控件等间隔排序 /** * 多个控件固定间隔的等间隔排列,变化的是控件的长度或者宽度值 * * @param axisType 轴线方向 * @param fi ...

  7. Masonry介绍与使用实践:快速上手Autolayout

    1 MagicNumber -> autoresizingMask -> autolayout 以上是纯手写代码所经历的关于页面布局的三个时期 在iphone1-iphone3gs时代 w ...

  8. Storm入门3-集群搭建

    [storm集群的搭建以及将开发好的拓扑提交到集群上运行的方法] 在上一篇文章中,我们的拓扑直接运行,并在程序开始时候自动启动一个本地"集群"来运行拓扑.LocalCluster这 ...

  9. Coding源码学习第四部分(Masonry介绍与使用(三))

    接上篇继续进行Masonry 的学习. (12)tableViewCell 布局 #import "TableViewController.h" #import "Tes ...

随机推荐

  1. 将 MathType 公式转换为 Word 自带公式

    以下操作是基于Office 365以及MathType 6.9b平台.有网友留言说第四步没出现「转换为 Office Math」选项,这个我就不清楚了,难道是只有Office 365才支持? 打开Ma ...

  2. mac 安装 navicat for mysql 破解版

    mac 安装 navicat for mysql 破解版,直接安装,亲测可用 首先打开mac控制台输入命令行:sudo spctl --master-disable 百度盘,提取码: vrtr 失效请 ...

  3. python reportlab 生成table

    ''' Table(data, colWidths=None, rowHeights=None, style=None, splitByRow=, repeatRows=, repeatCols=, ...

  4. gin PostForm 方法不起作用

    情景: 在httpie post 下,在 axios post下,总的来说,就是在form-data下只有c.Bind()会有用 如果一定要用c.PostForm() headers必须为x-www- ...

  5. Arm-Linux 移植 QT5.9 带 tslib,QT-creator配置

    平台                : Ubuntu 16.04   QT                 :5.9.8 tslib                 : 1.4arm-gcc      ...

  6. 数据库SQL语句大全——最常用的SQL语句

    检索数据: 检索单个列: SELECT pname FROM product 检索多个列: SELECT pname,market_price,is_hot FROM product 检索所有列: S ...

  7. C# 注册windows 服务

    sc delete CCGSQueueService sc create CCGSQueueService binpath= "D:\DKX4003\services\CCGSQueueSe ...

  8. hdu 4857 反向拓扑问题

    尤其要注意拓扑的分层问题 不难理解 就是不怎么好想到 拓扑的思路这里就不累述了 #include <iostream> #include <cstdio> #include & ...

  9. (四)Hibernate的增删改查操作(1)

    Hiberntae的查找操作有多种: 1.  使用Criteria接口查询 Query_Criteria.java package action; import java.util.ArrayList ...

  10. vue 集成jTopo 处理方法

    jTopo 帮助说明网站 http://www.jtopo.com/index.html 使用例子: http://www.jtopo.com/demo/helloworld.html 不建议直接安装 ...