博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3990 排序
阅读量:4958 次
发布时间:2019-06-12

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

题目:www.lydsy.com/JudgeOnline/problem.php?id=3990

这题很不错。

刚开始时无从下手,想了好多$O((2^n)log(2^n))$ 的idea,但是都不行。

后来去看题解发现操作序列是满足交换率的,然后竟然是搜索。

因为swap是swap的逆运算(歪歪的)

然后只要从小到大枚举操作序列就可以了。

这样类似分治下去,当你在计算长度为$2^i$的序列时已经保证了所有长度为$2^{i-1}$的序列的「连续且递增」。

注意是「连续且递增」,开始W了好多发,然后推掉重写(开抄) 呜呜。

好像可以证明是$O(n \cdot 2^{2n})$ ?

以后见到这种操作数很小的题目要想想搜索,就算是暴力也可以多拿分。

#include 
#include
#include
#define LL long long#define N 13using namespace std;int n;LL fact[21],ans;void change(vector
&x,int l1,int l2,int len){ for(int i=0;i
x,int l,int len){ for(int i=1;i
x,int t,int now){ if(t==n){ ans+=fact[now]; return; } int tot=0,a[5]; for(int i=0;i<(1<
<<(t+1))) if(!check(x,i,1<<(t+1))){ if(tot==4) return; a[++tot]=i; a[++tot]=i+(1<
b; if(!tot) dfs(x,t+1,now); if(tot==2){ if(x[a[2]]+(1<
a;int main(){ scanf("%d",&n); a.resize(1<
View Code

 

转载于:https://www.cnblogs.com/lawyer/p/4552978.html

你可能感兴趣的文章
硬件之美
查看>>
[转载]java开发中的23种设计模式
查看>>
表格的拖拽功能
查看>>
函数的形参和实参
查看>>
文字过长 用 ... 表示 CSS实现单行、多行文本溢出显示省略号
查看>>
1Caesar加密
查看>>
【TP SRM 703 div2 500】 GCDGraph
查看>>
MapReduce 重要组件——Recordreader组件 [转]
查看>>
webdriver api
查看>>
apache 实现图标缓存客户端
查看>>
揭秘:黑客必备的Kali Linux是什么,有哪些弊端?
查看>>
linux系统的远程控制方法——学神IT教育
查看>>
springboot+mybatis报错Invalid bound statement (not found)
查看>>
Linux环境下SolrCloud集群环境搭建关键步骤
查看>>
P3565 [POI2014]HOT-Hotels
查看>>
MongoDB的简单使用
查看>>
hdfs 命令使用
查看>>
prometheus配置
查看>>
【noip2004】虫食算——剪枝DFS
查看>>
java语法之final
查看>>