注意到答案不超过$5$,因此可以考虑BFS求出距离起始态或者终止态不超过$2$的所有状态。

设它们到起始态、终止态的距离分别为$f[S],g[S]$,则$ans=\min(5,f[S]+g[S])$。

时间复杂度$O(n^6\log(n!))$。

#include<cstdio>
#include<algorithm>
using namespace std;
typedef unsigned long long ll;
const int N=12,M=363000;
int n,i,j,k,a[N],len[N],S,x,z,v[M],g[M],h,t,q[M],ans;ll f[N][M];
inline ll encode(){
ll t=0;
for(int i=0;i<n;i++)t=t<<4|a[i];
return t;
}
inline int getid(ll x){
int l=0,r=len[n]-1;
while(l<=r){
int mid=(l+r)>>1;
if(f[n][mid]==x)return mid;
if(f[n][mid]<x)l=mid+1;else r=mid-1;
}
}
inline void ext(int x){
if(~v[x])return;
v[q[++t]=x]=z;
}
int main(){
for(n=2;n<=9;n++){
for(i=0;i<n;i++)a[i]=i;
do{f[n][len[n]++]=encode();}while(next_permutation(a,a+n));
sort(f[n],f[n]+len[n]);
}
while(~scanf("%d",&n)){
if(!n)return 0;
for(i=0;i<n;i++)scanf("%d",&a[i]),a[i]--;
if(n==1){puts("0");continue;}
S=getid(encode());
h=1,t=0;
for(i=0;i<len[n];i++)v[i]=-1;
z=0;
ext(S);
while(h<=t){
z=v[x=q[h++]]+1;
if(z>2)continue;
ll O=f[n][x];
for(i=1;i<n;i++)for(j=i;j<n;j++){
ll U=(1ULL<<((j-i+2)*4))-1,F=O;
int L=(j-i+1)*4;
for(k=4*(i-1);k>=0;k-=4){
ll A=(F>>k)&U;
F^=(A^((A>>4)|(A&15)<<L))<<k;
ext(getid(F));
}
}
}
for(i=0;i<len[n];i++)g[i]=v[i],v[i]=-1;
h=1,t=z=0;
ext(0);
while(h<=t){
z=v[x=q[h++]]+1;
if(z>2)continue;
ll O=f[n][x];
for(i=1;i<n;i++)for(j=i;j<n;j++){
ll U=(1ULL<<((j-i+2)*4))-1,F=O;
int L=(j-i+1)*4;
for(k=4*(i-1);k>=0;k-=4){
ll A=(F>>k)&U;
F^=(A^((A>>4)|(A&15)<<L))<<k;
ext(getid(F));
}
}
}
for(ans=5,i=0;i<len[n];i++)if(~v[i]&&~g[i])ans=min(ans,v[i]+g[i]);
printf("%d\n",ans);
}
return 0;
}

  

BZOJ1330 : Editing a Book的更多相关文章

  1. vim - save current file with a new name but keep editing current file

    http://superuser.com/questions/414110/vim-save-a-file-as-a-different-filename-but-keep-w-as-the-curr ...

  2. Simultaneous Tag Editing in IntelliJ IDEA 14.1

    If you're involved in web development and, for some reason, you haven't given a ride to IntelliJ IDE ...

  3. Poisson Image Editing

    说起泊松,可以顺便提及一下泊松同学的老师,拉普拉斯.学图像或是信号的,一定对拉普拉斯算子和拉普拉斯卷积很熟悉.在泊松图像融合出现之前,也有一种叫Laplacian pyramid blending的融 ...

  4. 错误异常 (1)Android Studio错误提示:Gradle project sync failed. Basic functionality (eg. editing, debugging) will not work properly

    [已解决]Android Studio错误提示:Gradle project sync failed. Basic functionality (eg. editing, debugging) wil ...

  5. 【JQGRID DOCUMENTATION】.学习笔记.6.Editing:Common Rules

    1 公共编辑属性 要在grid中显示数据的一个关键原因是能简单快速地编辑它.jgGrid提供三种编辑方式: cell editing:编辑指定cell inline editing:编辑同一行的几个c ...

  6. 【JQGRID DOCUMENTATION】.学习笔记.5.Form Editing

    JqGrid支持为view ,add, edit,delete, search创建一个on the fly的form.这使得Modal Boxes和行内编辑能够在程序用结合.毕竟,行内编辑只能用在已经 ...

  7. UVa 10115 Automatic Editing

    字符串题目就先告一段落了,又是在看balabala不知道在说些什么的英语. 算法也很简单,用了几个库函数就搞定了.本来还担心题里说的replace-by为空的特殊情况需要特殊处理,后来发现按一般情况处 ...

  8. Editing and Deleting Data

    Editing and Deleting Data In the previous chapter we've come to learn how we can use the zend-form a ...

  9. [r]Seven habits of effective text editing

    Seven habits of effective text editing(via) Bram Moolenaar November 2000 If you spend a lot of time ...

随机推荐

  1. ubuntu下好用的音乐播放器audacious

    audacious是ubuntu下一款非常好用的音乐播放器,万能的音乐播放器而且简洁美观,可以播放ape各种无损发烧音乐格式. 如果想听音乐的话,现在百度音乐,酷我音乐,酷狗音乐等都是有网络播放器的, ...

  2. llinux除了软连接本地文件夹同步:mount

    mount --bind /srv/dir1   /srv/dir2dir1:被共享的文件夹dir2:需要同步的文件夹

  3. python httplib和urllib的性能比较

    httplib代码: urlParseResult = urlparse(url) host = urlParseResult.hostname path = urlParseResult.path ...

  4. vue系列之概念

    一.模板引擎 通常出现在应用层,即服务器端(MVC层中的view) 客户端HTTP请求->应用层的控制器(Controller)->应用层的服务层(Service,访问数据库)->封 ...

  5. Spark的HA部署

    一.安装JDK.Scala 二.安装zookeeper 三.安装Hadoop 四.安装Spark 1.修改spark/conf/spark-env.sh export JAVA_HOME=/usr/j ...

  6. poj1990两个树状数组

    垃圾poj交不上去 /* 按权值从小到大排序, 两个树状数组维护权值小于等于并且在i左边的点的个数和权值 */ #include<iostream> #include<cstring ...

  7. hdu3183 rmq求区间最值的下标

    两个月前做的题,以后可以看看,是rmq关于求区间最值的下标 /* hdu3183 终点 给一个整数,可以删除m位,留下的数字形成一个新的整数 rmq 取n-m个数,使形成的数最小 */ #includ ...

  8. Java容器---字符容器StringBuffer & StringBuilder

    1.字符串对象 (1)定义 ---String 字符串常量,是不可改变的量,也就是创建后就不能在修改了: --- StringBuffer 字符串变量(线程安全),StringBuffer对象的值都是 ...

  9. python 全栈开发,Day8(文件操作)

    一.文件操作流程 文件以什么编码存储的,就以什么编码打开 参数: 1.文件路径 2.编码方式,encode 3.执行动作(打开方式):只读,只写,追加,读写,写读... 打开一个已经存在的文件 f = ...

  10. Visual Studio强大的帮助工具--Resharper安装与使用

    ReSharper是一个JetBrains公司出品的代码生成工具,其能帮助Microsoft Visual Studio成为一个更佳的IDE.使用ReSharper,你可以进行深度代码分析,智能代码协 ...