bzoj1330: Editing a Book
来源:互联网 发布:php decrypt 加密 编辑:程序博客网 时间:2024/06/16 21:48
传送门
我们可直接暴力广搜算答案。
但是你会发现你预处理完就要20s+
于是我们考虑折半。
我们首先计算出答案小于3的部分
然后我们对于每次询问倒着广搜算出答案
然后你就可以卡过去啦
#include<bits/stdc++.h>#define ll long longusing namespace std;map<ll,int> mp,mp1;int a[12],b[12],h,t,cnt;ll x,y,q[500005];ll cal(int *a){ ll s=0; for (int i=a[0];i>=0;i--) s=s*10+a[i]; return s;}void get(ll x,int *a){ a[0]=x%10; x/=10; for (int i=1;i<=a[0];i++) a[i]=x%10,x/=10;}int main(){ for (int i=1;i<=9;i++){ for (int j=1;j<=i;j++) a[j]=j; a[0]=i; x=cal(a); q[++t]=x; mp[x]=1; } while (h!=t&&t!=409113){ x=q[++h]; get(x,a); int dis=mp[x]; if (dis>3) break; for (int l=1;l<=a[0];l++) for (int r=l;r<=a[0];r++) for (int k=1;k<=a[0]-r+l;k++){ b[0]=a[0]; cnt=0; for (int i=1,j=(l==1?r+1:1);i<=a[0]-r+l;i++) if (i==k) for (int p=l;p<=r;p++) b[++cnt]=a[p]; else b[++cnt]=a[j],j=j==l-1?r+1:j+1; y=cal(b); if (!mp[y]) q[++t]=y,mp[y]=dis+1; } } scanf("%d",&b[0]); while (b[0]){ for (int i=1;i<=b[0];i++) scanf("%d",&b[i]); h=0; t=1; q[1]=cal(b); mp1.clear(); mp1[cal(b)]=1; while (h!=t){ x=q[++h]; get(x,a); if (mp[x]){ printf("%d\n",mp[x]+mp1[x]-2); break; } for (int l=1;l<=a[0];l++) for (int r=l;r<=a[0];r++) for (int k=1;k<=a[0]-r+l;k++){ b[0]=a[0]; cnt=0; for (int i=1,j=(l==1?r+1:1);i<=a[0]-r+l;i++) if (i==k) for (int p=l;p<=r;p++) b[++cnt]=a[p]; else b[++cnt]=a[j],j=j==l-1?r+1:j+1; y=cal(b); if (!mp1[y]) q[++t]=y,mp1[y]=mp1[x]+1; } } scanf("%d",&b[0]); }}
阅读全文
0 0
- bzoj1330: Editing a Book
- 11212 - Editing a Book
- UVa11212 - Editing a Book
- 11212 - Editing a Book
- Editing a Book UVA
- Editing a Book UVA
- Editing a Book UVA
- Editing a Book UVA
- UVa 11212 Editing a Book
- UVA - 11212(Editing a Book)
- UVA - 11212 Editing a Book
- UVA 11214 Editing a Book
- UVa 11212 Editing a Book
- uva 11212 - Editing a Book
- UVa 11212 - Editing a Book
- UVA 11212 Editing a Book
- uva 11212 Editing a Book
- [UVA] 11212 Editing a Book
- 抽象代数学习笔记(8)循环群
- prim+dfs 藏宝图
- MYSQL学习笔记(十八)使用视图
- 我的第一次博客
- Linux 系统虚拟机的管理
- bzoj1330: Editing a Book
- 详解Python的装饰器
- xpath和css选择元素的不同
- Notification 都不知道,还学什么 Android 应用开发
- 我的第一次博客
- TensorFlow 安装官方教程:Ubuntu 安装,Mac OS X 安装,Windows 安装
- 在C++类中使用pthread实现多线程
- CUDA卷积操作—使用constant memory实现高斯滤波
- HDU2066 最短路spfa 多起点 多终点 基础题