博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[SDOI2015]排序 题解 (搜索)
阅读量:5234 次
发布时间:2019-06-14

本文共 1481 字,大约阅读时间需要 4 分钟。

Description

 小A有一个1-2^N的排列A[1..2^N],他希望将A数组从小到大排序,小A可以执行的操作有N种,每种操作最多可以执行一次,对于所有的i(1<=i<=N),第i中操作为将序列从左到右划分为2^{N-i+1}段,每段恰好包括2^{i-1}个数,然后整体交换其中两段.小A想知道可以将数组A从小到大排序的不同的操作序列有多少个,小A认为两个操作序列不同,当且仅当操作个数不同,或者至少一个操作不同(种类不同或者操作位置不同).

  下面是一个操作事例:
  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

第一行,一个整数N

第二行,2^N个整数,A[1..2^N]

Output

一个整数表示答案

Sample Input

3
7 8 5 6 1 2 4 3

Sample Output

6

 

正解居然是搜索,考场上看这板儿B是个神仙状压就skip掉了

后悔啊……把猛肝某APIO2016T1的时间放这题上怎么还没30分啊……

 

手%几组数据可以发现,操作序列的合法性与顺序无瓜

所以只需确定序列中有没有第i种操作,最后将统计结果的阶乘输出即为序列数

枚举操作种数i,+1什么的太麻烦就直接分成$2^{N-i}$段,每段$2^i$个数

然后要交换的话就需要找非严格递增序列($a_{x+1}!=a_x+1$)

超过两个显然不可行,直接return

接下来分类讨论:

如果没有这样的序列,继续dfs

如果有一个,尝试内部一分为二后交换使之满足严格递增

如果有两个,两段分成四段尝试交换

 

(感谢hzwer的题解 大大减少了我的代码量 两层for分类讨论确实比四个if else美观多辽)

 

收获:看到二进制不要直接想状压,还有可能是树形结构或者二分搜索

 

#include
#include
#include
using namespace std;const int N=(1<<12)+5;int n,a[N],tot;long long ans=0,bin[25],fac[25];int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}void ini(){ bin[0]=fac[0]=1; for(int i=1;i<=20;i++) bin[i]=bin[i-1]<<1,fac[i]=1LL*i*fac[i-1];}bool judge(int p,int k){ for(int j=1;j

 

转载于:https://www.cnblogs.com/Rorschach-XR/p/11164567.html

你可能感兴趣的文章
bzoj 1412 最小割
查看>>
猎头文章(十一)
查看>>
what is 'linesize alignment' meaning?
查看>>
UVa524
查看>>
Android App自动化之使用Ant编译项目多渠道打包
查看>>
React反模式 —— 如何不使用JSX地动态显示组件
查看>>
location alias与root
查看>>
svn: warning: 'xxxxxx' is already under version control
查看>>
error_page 改变状态码为新的状态码,并显示指定内容
查看>>
win10 启动超级用户Administrator方法
查看>>
spark-2.2.2-bin-hadoop2.7 安装
查看>>
实验吧web-易-拐弯抹角(url伪静态)
查看>>
select 的选中问题
查看>>
java Pattern类
查看>>
基本算法-0/1背包问题
查看>>
广商14级软件工程团队第二次冲刺相关问题
查看>>
测试经理/组长职责
查看>>
cocos2d-x中描述精灵帧图片的plist和json文件各个key的含义
查看>>
Java垃圾回收机制
查看>>
排球比赛规则
查看>>