SDOI2015 排序
Description
下面是一个操作示例:
N=3,初始排列A[1..8]为[3,6,1,2,7,8,5,4]。
第一次操作:执行第3种操作,交换A[1..4]和A[5..8],交换后的A[1..8]为[7,8,5,4,3,6,1,2];
第二次操作:执行用第1种操作,交换A[3]和A[5],交换后的A[1..8]为[7,8,3,4,5,6,1,2];
第三次操作:执行用第2种操作,交换A[1..2]和A[7..8],交换后的A[1..8]为[1,2,3,4,5,6,7,8]。
Input
第二行,2N个整数,A[1]、A[2]…A[2N]。
Output
Sample Input
37 8 5 6 1 2 4 3
Sample Output
6
Data Constraint
对于全部的数据,1<=N<=12。
#include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> #include<cstring>using namespace std; typedef long long ll; ll jc[13],Ans; int a[4201]; int n,ws,i;bool Can() {int i;for(i=1;i<=n;i++)if(a[i]!=i)return false;return true; }bool check(int x,int i) {int nxt,lst;lst=(i-1)*x+x/2;nxt=lst+1;if(a[nxt]!=a[lst]+1)return false;else return true; }void dfs(int dep,int kf) {bool pp;int dif[3];int one,num,chk,tx,ty,i,j,l;if(Can()){Ans+=jc[kf];return;} if(dep==ws+1)return;one=1<<dep;num=n/one;chk=0;for(i=1;i<=num;i++)if(check(one,i)==false){chk++;if(chk>2)return;dif[chk]=i;}if(chk==0)dfs(dep+1,kf);if(chk>2)return;if(chk==1){tx=(dif[chk]-1)*one+1;ty=tx+one/2;for(i=1;i<=one/2;i++)swap(a[tx+i-1],a[ty+i-1]);dfs(dep+1,kf+1);for(i=1;i<=one/2;i++)swap(a[tx+i-1],a[ty+i-1]);}if(chk==2){for(i=1;i<=2;i++)for(j=1;j<=2;j++){if(i==1)tx=(dif[1]-1)*one+1;else tx=(dif[1]-1)*one+1+one/2;if(j==1)ty=(dif[2]-1)*one+1;else ty=(dif[2]-1)*one+1+one/2;for(l=1;l<=one/2;l++)swap(a[tx+l-1],a[ty+l-1]);pp=check(one,dif[1])&check(one,dif[2]);if(pp)dfs(dep+1,kf+1);for(l=1;l<=one/2;l++)swap(a[tx+l-1],a[ty+l-1]);}} }int main() {scanf("%d",&ws);jc[0]=1;for(i=1;i<=ws;i++)jc[i]=jc[i-1]*i;n=1<<ws;for(i=1;i<=n;i++)scanf("%d",&a[i]);dfs(1,0);printf("%lld\n",Ans); }
转载于:https://www.cnblogs.com/applejxt/p/4442532.html
SDOI2015 排序相关推荐
- BZOJ 3990: [SDOI2015]排序(搜索+剪枝)
[SDOI2015]排序 Description 小A有一个1-2^N的排列A[1..2^N],他希望将A数组从小到大排序,小A可以执行的操作有N种,每种操作最多可以执行一次,对于所有的i(1< ...
- BZOJ.3990.[SDOI2015]排序(DFS)
题目链接 操作序列的顺序显然是无关的,所以只需按特定顺序求出一个长度为\(l\)的操作序列,它对答案的贡献为\(l!\). 我们从小到大枚举所有选择.若当前为第\(i\)个,如果有一段长度为\(2^i ...
- P3322 [SDOI2015]排序
HyperlinkHyperlinkHyperlink https://www.luogu.com.cn/problem/P3322 DescriptionDescriptionDescription ...
- bzoj3990【SDOI2015】排序
3990: [SDOI2015]排序 Time Limit: 20 Sec Memory Limit: 128 MB Submit: 521 Solved: 271 [ Submit][ St ...
- [暑假的bzoj刷水记录]
(这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊 堆一起算了 隔一段更新一下. 7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27upd ...
- ZJOI2017 讲课Day1笔记
额,参考一下大神的笔记.... 地址 http://www.cnblogs.com/ARZhu-NOIpAK/p/6596879.html Day1 2017-3-24 3:34:43 苟-- 富贵 ...
- 退役前的做题记录1.0
退役前的做题记录1.0 租酥雨最近很懒qwq,具体表现在写题的时候不想发题解了. 但是想想这样也不太好,就决定发个一句话(半句话到几句话不等)题解上来. 2018-09.18-2018-09.28 [ ...
- 数据库中自定义排序规则,Mysql中自定义字段排序规则,Oracle中自定义字段排序规则,decode函数的用法,field函数的用法
数据库中自定义排序 场景:有一张banner表,表中有一个status字段,有0, 1, 2三个状态位,我想要 1,0,2的自定义排序(这里是重点),然后再进行之上对sequence字段进行二次排序( ...
- 伍六七带你学算法 进阶篇-排序算法
给定一个整数数组 nums,将该数组升序排列. 示例 1: 输入:[5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:[5,1,1,2,0,0] 输出:[0,0,1,1,2,5] 各排序算 ...
最新文章
- python3 字典修改键(key)的方法
- asp连接oracle 服务端,Asp.net core 3.1+EF Core2.2.6+Oracle.EntityFrameworkCore2.1.19连接Oracle数据库...
- SAP CRM HANA report filter的工作原理
- Flex4_HttpService组件
- 在标记的HREF属性中javascript:alert(this.innerHTML)会怎么样?
- Java啤酒生产系统描述_Java描述设计模式(03):工厂方法模式
- 仓库对象DataSet与小车对象DataAdapter的 关键命令 1201
- 勒索团伙正奔向 SonicWall 设备
- robo 3t 查询
- electron快捷键
- kettle整合kafka
- 希腊字母表(直接输入希腊字母的方法)
- 计算机硬件环境指啥,硬件环境指的是什么呢?
- 应用服务器和数据库服务器有什么区别
- 【亲测 | 007】易搜资料 V2.4.3版本 非独立版 亲测无错 | 极致技术工厂
- 快手Java开发二面面经分享
- 抖音小店还能做吗?如何解决拍单问题?
- 【LeetCode Python实现】 5473. 灯泡开关 IV(中等)
- python中文居中对齐处理
- 国外智能化农机装备简介
热门文章
- 一招教你在linux服务器配置Jenkins持续集成神器
- 高效测试必学 | 用pytest生成测试报告
- 「1024 程序员节」各大公司和程序员们都是怎么过的?你都做了哪些计划或安排?
- 性能测试很难吗?一文带你学会性能测试核心流程和概念
- 面试中软性问题的套路与反套路
- python 生成exe 并 执行程序
- 云起作者认证大神_2020网络文学“白金大神”名单出炉!顶级作家是怎样炼成的?...
- 《深度学习要领》端到端的深度学习技术
- 藏红花怎么推广?百度下拉词|抖音下拉词框|信息流推广-三剑合璧
- android 梅花布局,Android相对布局实现各种梅花效果