正题

题目链接:https://jzoj.net/senior/#contest/show/3017/0


题目大意

长度为2n2^n2n的序列,nnn个操作,第iii个可以将序列划分为2i2^i2i段后交换其中两段,每个操作只能用一次,求有多少种操作可以使得序列有小到大。


解题思路

每个操作只能一次操作顺序不会影响结果,所以可以假设从小到大操作,做到第iii个操作时,每个可以被交换的段都必须是已经交换好的。

那么假设现在交换的段长度xxx,那么每段2x2x2x的最多只有两个不按顺序,否则无解,所以我们搜索一下就好了

时间复杂度O(2nn)O(2^nn)O(2nn)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=14;
ll n,l,ans,a[1<<N],fac[N];
void dfs(ll dep,ll f){if(dep>n){ans+=fac[f];return;}ll len=1<<dep,h=len/2,z=0,w[4];for(ll i=1;i<=l;i+=len){if(a[i+h]!=a[i]+h) w[++z]=i;if(z>2){return;}}if(!z)dfs(dep+1,f);if(z==1){if(a[w[1]]==a[w[1]+h]+h){for(ll i=w[1];i<w[1]+h;i++)swap(a[i],a[i+h]);dfs(dep+1,f+1);for(ll i=w[1];i<w[1]+h;i++)swap(a[i],a[i+h]);}}if(z==2){if(a[w[1]]+h==a[w[2]]&&a[w[1]+h]+h==a[w[2]+h]){for(ll i=0;i<h;i++)swap(a[w[1]+h+i],a[w[2]+i]);dfs(dep+1,f+1);for(ll i=0;i<h;i++)swap(a[w[1]+h+i],a[w[2]+i]);}if(a[w[2]]+h==a[w[1]+h]&&a[w[1]]+h==a[w[2]+h]){for(ll i=0;i<h;i++)swap(a[w[1]+i],a[w[2]+i]);dfs(dep+1,f+1);for(ll i=0;i<h;i++)swap(a[w[1]+i],a[w[2]+i]);}if(a[w[1]]+h==a[w[2]+h]&&a[w[2]]+h==a[w[1]+h]){for(ll i=0;i<h;i++)swap(a[w[1]+h+i],a[w[2]+h+i]);dfs(dep+1,f+1);for(ll i=0;i<h;i++)swap(a[w[1]+h+i],a[w[2]+h+i]);}if(a[w[2]+h]+h==a[w[1]+h]&&a[w[2]]+h==a[w[1]]){for(ll i=0;i<h;i++)swap(a[w[1]+i],a[w[2]+h+i]);dfs(dep+1,f+1);for(ll i=0;i<h;i++)swap(a[w[1]+i],a[w[2]+h+i]);}}
}
int main()
{scanf("%lld",&n);l=1<<n;fac[0]=1;for(ll i=1;i<=n;i++)fac[i]=fac[i-1]*i;for(ll i=1;i<=l;i++)scanf("%lld",&a[i]);dfs(1,0);printf("%lld",ans);
}

jzoj4049-排序【搜索】相关推荐

  1. python希尔排序的优缺点_Python排序搜索基本算法之希尔排序实例分析

    本文实例讲述了Python排序搜索基本算法之希尔排序.分享给大家供大家参考,具体如下: 希尔排序是插入排序的扩展,通过允许非相邻的元素进行交换来提高执行效率.希尔排序最关键的是选择步长,本程序选用Kn ...

  2. 【Python排序搜索基本算法】之拓扑排序

    [Python排序搜索基本算法]之拓扑排序 版权声明:本文为博主原创文章,未经博主允许不得转载.

  3. 掉一根头发,搞定二叉排序(搜索)树

    文章已收录在 数据结构与算法学习仓库 前言 前面介绍学习的大多是线性表相关的内容,把指针搞懂后其实也没有什么难度,规则相对是简单的,后面会讲解一些比较常见的数据结构,用多图的方式让大家更容易吸收. 在 ...

  4. 006-筛选分类排序搜索查找Filter-Classificatio-Sort-Search-Find-Seek-Locate

    006-筛选分类排序搜索查找Filter-Classificatio-Sort-Search-Find-Seek-Locate https://www.cnblogs.com/delphixx/p/1 ...

  5. jquery插件dataTables(dataTables在显示表格的时候,果然是个好东西,支持排序/搜索/分页/...)

    jquery插件dataTables dataTables在显示表格的时候,支持排序/搜索/分页/... 官网:http://www.datatables.net/ demo: [javascript ...

  6. (字母排序搜索)类似微信通讯录效果

    最近刚好有要做一个聊天通讯录,有点类似微信,所以自己也把探索的总结一下,可能还要进一步优化: 不多说,先上效果图看看: 这里先说一些,要使用拼音字母转换,我们引用了第三方拼音库(pinyin4j-2. ...

  7. mybatis动态查询(分页排序搜索)+分解关联查询+Logback 日志配置(打印sql到控制台)+mybatis新增记录后返回自增的id。批量=11/2~11/20

    一.mybatis动态查询(分页排序搜索) mybatis框架分页实现,有几种方式,最简单的就是利用原生的sql关键字limit来实现,还有一种就是利用interceptor来拼接sql,实现和lim ...

  8. iOS-高仿通讯录之商品索引排序搜索

    概述 TableView添加右侧索引, 将数据按照索引分组排序, 并添加搜索功能且在搜索界面复用当前页面. 详细 代码下载:http://www.demodashi.com/demo/10696.ht ...

  9. [转载] 05 Numpy排序搜索计数及集合操作

    参考链接: Numpy 排序,搜索和计数 排序,搜索和计数 排序 numpy.sort() numpy.sort(a[, axis=-1, kind='quicksort', order=None]) ...

  10. hdu 5439 Ponds(长春网络赛——拓扑排序+搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5438 Ponds Time Limit: 1500/1000 MS (Java/Others)     ...

最新文章

  1. Postfix的bcc邮件备份
  2. 【Hibernate步步为营】--(一对多映射)之双向关联
  3. Swift-Tips之重复字符串
  4. NavMeshAgent 动态加载障碍物
  5. Mysql的MVCC是什么
  6. key redis 模糊查询个数_Reids Lua 模糊查询所有key 及 相对应的集合总数
  7. LeetCode 5178. 四因数
  8. 比Magic Leap快一步,HoloLamp做到了裸眼观看全息图
  9. java plsql_在PLSQL中编译复杂的java(转)
  10. Unity之UGUI初探—按钮动画
  11. 老罗android开发视频教程学习完了
  12. python物业管理系统_住宅小区物业管理系统分析与设计
  13. (附源码)小程序 校园二手交易平台 毕业设计 191637
  14. 黑客游戏-梦之光芒1~14攻略
  15. 2016.03.07错误记录
  16. 人生算法之「延迟满足感」
  17. 微信怎么防封几率大_域名被墙有哪些处理方法?域名被微信封了该怎么解决?
  18. android 开发积累
  19. fluid mask 3_CSS3 Fluid Layout和Media Queries:一种响应式Web设计的简单方法
  20. 如何解决SSL/TLS证书服务的高可用性?

热门文章

  1. 山东大学计算机非全上课,山东大学非全日制研究生上课方式
  2. python 防止转义_python字符串前加r、f、u、l 的区别
  3. java实用教程——组件及事件处理——ActionEvent事件
  4. [XML-Jsoup]Jsoup_解析_快速入门
  5. [PAT乙级]1009 说反话
  6. 数据结构与算法--经典10大排序算法(动图演示)【建议收藏】
  7. 单片机课程设计数字心率计_如何选购合适的PH计
  8. PAT-A Maximum Subsequence Sum
  9. Java——类加载机制
  10. 2019-02-23-算法-进化