jzoj4049-排序【搜索】
正题
题目链接: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-排序【搜索】相关推荐
- python希尔排序的优缺点_Python排序搜索基本算法之希尔排序实例分析
本文实例讲述了Python排序搜索基本算法之希尔排序.分享给大家供大家参考,具体如下: 希尔排序是插入排序的扩展,通过允许非相邻的元素进行交换来提高执行效率.希尔排序最关键的是选择步长,本程序选用Kn ...
- 【Python排序搜索基本算法】之拓扑排序
[Python排序搜索基本算法]之拓扑排序 版权声明:本文为博主原创文章,未经博主允许不得转载.
- 掉一根头发,搞定二叉排序(搜索)树
文章已收录在 数据结构与算法学习仓库 前言 前面介绍学习的大多是线性表相关的内容,把指针搞懂后其实也没有什么难度,规则相对是简单的,后面会讲解一些比较常见的数据结构,用多图的方式让大家更容易吸收. 在 ...
- 006-筛选分类排序搜索查找Filter-Classificatio-Sort-Search-Find-Seek-Locate
006-筛选分类排序搜索查找Filter-Classificatio-Sort-Search-Find-Seek-Locate https://www.cnblogs.com/delphixx/p/1 ...
- jquery插件dataTables(dataTables在显示表格的时候,果然是个好东西,支持排序/搜索/分页/...)
jquery插件dataTables dataTables在显示表格的时候,支持排序/搜索/分页/... 官网:http://www.datatables.net/ demo: [javascript ...
- (字母排序搜索)类似微信通讯录效果
最近刚好有要做一个聊天通讯录,有点类似微信,所以自己也把探索的总结一下,可能还要进一步优化: 不多说,先上效果图看看: 这里先说一些,要使用拼音字母转换,我们引用了第三方拼音库(pinyin4j-2. ...
- mybatis动态查询(分页排序搜索)+分解关联查询+Logback 日志配置(打印sql到控制台)+mybatis新增记录后返回自增的id。批量=11/2~11/20
一.mybatis动态查询(分页排序搜索) mybatis框架分页实现,有几种方式,最简单的就是利用原生的sql关键字limit来实现,还有一种就是利用interceptor来拼接sql,实现和lim ...
- iOS-高仿通讯录之商品索引排序搜索
概述 TableView添加右侧索引, 将数据按照索引分组排序, 并添加搜索功能且在搜索界面复用当前页面. 详细 代码下载:http://www.demodashi.com/demo/10696.ht ...
- [转载] 05 Numpy排序搜索计数及集合操作
参考链接: Numpy 排序,搜索和计数 排序,搜索和计数 排序 numpy.sort() numpy.sort(a[, axis=-1, kind='quicksort', order=None]) ...
- hdu 5439 Ponds(长春网络赛——拓扑排序+搜索)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5438 Ponds Time Limit: 1500/1000 MS (Java/Others) ...
最新文章
- Postfix的bcc邮件备份
- 【Hibernate步步为营】--(一对多映射)之双向关联
- Swift-Tips之重复字符串
- NavMeshAgent 动态加载障碍物
- Mysql的MVCC是什么
- key redis 模糊查询个数_Reids Lua 模糊查询所有key 及 相对应的集合总数
- LeetCode 5178. 四因数
- 比Magic Leap快一步,HoloLamp做到了裸眼观看全息图
- java plsql_在PLSQL中编译复杂的java(转)
- Unity之UGUI初探—按钮动画
- 老罗android开发视频教程学习完了
- python物业管理系统_住宅小区物业管理系统分析与设计
- (附源码)小程序 校园二手交易平台 毕业设计 191637
- 黑客游戏-梦之光芒1~14攻略
- 2016.03.07错误记录
- 人生算法之「延迟满足感」
- 微信怎么防封几率大_域名被墙有哪些处理方法?域名被微信封了该怎么解决?
- android 开发积累
- fluid mask 3_CSS3 Fluid Layout和Media Queries:一种响应式Web设计的简单方法
- 如何解决SSL/TLS证书服务的高可用性?
热门文章
- 山东大学计算机非全上课,山东大学非全日制研究生上课方式
- python 防止转义_python字符串前加r、f、u、l 的区别
- java实用教程——组件及事件处理——ActionEvent事件
- [XML-Jsoup]Jsoup_解析_快速入门
- [PAT乙级]1009 说反话
- 数据结构与算法--经典10大排序算法(动图演示)【建议收藏】
- 单片机课程设计数字心率计_如何选购合适的PH计
- PAT-A Maximum Subsequence Sum
- Java——类加载机制
- 2019-02-23-算法-进化