PA
【题目描述】
汉诺塔升级了:现在我们有?个圆盘和?个柱子,每个圆盘大小都不一样,
大的圆盘不能放在小的圆盘上面,?个柱子从左到右排成一排。每次你可以将一
个柱子上的最上面的圆盘移动到右边或者左边的柱子上 (如果移动之后是合法的
话) 。 现在告诉你初始时的状态, 你希望用最少的步数将第?大的盘子移动到第?根
柱子上,问最小步数。
【输入格式】
第一行一个正整数?,代表询问的组数。
接下来?组数据,每组数据第一行一个整数?。
接下来一行每行?个正整数,代表每个柱子上圆盘的大小。
【输出格式】
输出共?行,代表每次的答案。如果方案不存在,输出“−1” 。
【样例输入】
4
3
2 1 3
2
7 8
2
10000 1000
3
97 96 95
【样例输出】
4
0
-1
20
【样例解释】
无。
【数据范围与规定】
对于70%的数据,N的值都是相等的。
对于100%的数据,1 ≤ T ≤ 6 × 10^3 ,1 ≤ N ≤ 7。
/*
这个题改了n个小时了,最后还是看的题解……
刚开始从初始状态向目标状态找的,30分,TLE
后来又从目标状态向初始状态找,把每种情况的步数走记下来,查询就简单了,结果全TLE了,看的题解,原来是我的每个状态记得东西太多了,导致常数太大,其实只要记录每个数在哪个位置,还有每个位置的顶部是哪个数就好了。
*/
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define M 10000000
using namespace std;
int n,top[],pos[],res[M],q[M],bit[],head,tail,w[],num[];
bool use[M];
bool cmp(int a,int b)
{
return w[a]<w[b];
}
void work(int s)
{
int x=;
int ss=s;
for(int a=;a<=;a++)
top[a]=;
while(ss)
{
x++;
pos[x]=ss%;
ss/=;
}
reverse(pos+,pos+x+);//倒置
for(int a=x;a>=;a--)
top[pos[a]]=a;
for(int a=;a<=x;a++)
if(a==top[pos[a]])
{
int p=pos[a];
if (p!=&&(a<top[p-]||!top[p-]))
{
int news=s-bit[x-a];
if(!use[news])
{
q[++tail]=news;
use[news]=true;
res[news]=res[s]+;
}
}
if(p!=x&&(a<top[p+]||!top[p+]))
{
int news=s+bit[x-a];
if(!use[news])
{
q[++tail]=news;
use[news]=true;
res[news]=res[s]+;
}
}
}
} int main()
{
//freopen("huakai.in","r",stdin);
//freopen("huakai.out","w",stdout);
head=,tail=;
int status=;
bit[]=;
for (int i=;i<=;i++)
{
bit[i]=bit[i-]*;
status=status*+i;
q[++tail]=status;
use[status]=true;
}
while(head<=tail)
{
int s=q[head++];
work(s);
}
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&w[i]),num[i]=i;
sort(num+,num+n+,cmp);
int s=;
for (int i=;i<=n;i++)
s=s*+num[i];
if (!use[s]) printf("-1\n");
else printf("%d\n",res[s]);
}
return ;
}
PA的更多相关文章
- 2.1 CMMI2级——7个PA简述
摘要: 阶段式的CMMI没有1级,最开始的级别就是2级.一个处于“无序化”生产的软件公司,要进行过程改进,首要是改进什么呢?2级告诉你,我们需要从计划.计划跟踪.需求管理.采购.度量.配置管理.质量保 ...
- [RouterOS] ROS对接碧海威或PA等流控实现完美流控详细教程(附脚本全免费)
前言: 经常在群里看到不少朋友争论海蜘蛛 ROS 维盟 爱快 碧海威 流控大师 Woyos等等软路由,哪个好.实际上,网络产品是复杂的,现在的软路由功能上已经远远不是单独的路由了.每种产品都有他本身的 ...
- 小数量宽带用户的福音,Panabit 云计费easyradius 接口隆重发布,PA宽带计费系统
PA接口在早前就发布了,但是一直迟迟没有发布官方说明文档,由于最近问的客户较多,特写了这篇文档 由于PA使用标准radius认证协议,所以用户需要在本地搭建一个计费,由于大部分用户的数量只有几百个,不 ...
- LNA和PA
低噪声放大器(Low Noise Amplifier) -------------LNA 功率放大器(Power Amplifier)---------------------PA LNA是低噪声放大 ...
- 有两个指针pa,pb分别指向有两个数,a,b,请写一个函数交换两个指针的指向,也就是让pa指向b,让pb指向a
题目:有两个指针pa,pb分别指向有两个数,a,b,请写一个函数交换两个指针的指向,也就是让pa指向b,让pb指向a,具体实现如下: #include<stdlib.h> #include ...
- 清北学堂 Pa
PA[题目描述]汉诺塔升级了:现在我们有?个圆盘和?个柱子,每个圆盘大小都不一样,大的圆盘不能放在小的圆盘上面,?个柱子从左到右排成一排.每次你可以将一个柱子上的最上面的圆盘移动到右边或者左边的柱子上 ...
- CMMI-4中19个PA的大致描述
组织过程资产库下面有组织级标准过程库, 这个库里一共有19各PA(就是标准过程啦) PA的英文是Process Area CM(配置管理过程,英文是Configuration Manage ...
- PA模块报错-实际返回的行数超出请求的行数(分析标准FORM报错解决思路)
录入预算报错时报错: 分析:这个错误是select into 语句返回多行的结果,但具体在哪? 两种方法查找,trace 或者debug 1.trace 启用调试 获取trace文件 -bash-3. ...
- PA 项目关联项目经理
---- 项目关联项目经理 DECLARE p_project_id NUMBER := 155233; l_project_role_id NUMBER := ''; p_employee_id N ...
- 每日PA -2019年1月帖-每天更新
开篇 "每日PA"有什么亮点?
随机推荐
- Android APK反编译问题
因为这几天想做一个离线音乐播放器,然后需要很多.png图片,在度娘上搜图片感觉效果不好, 就需要用到反编译工具来将一些.apk文件中的资源文件提取出来. 这里就只讲下怎么使用工具来进行反编译,什么?你 ...
- eclipse中新建python项目报错:Project interpreter not specified
eclipse-windows-preferences-python
- TP中二维数组的遍历输出
例子分析 <volist name="list" id="vo"> <volist name="vo['sub']" id ...
- try、catch 和 throw 语句 (了解)
C++ 异常使用 try.catch 和 throw 关键字. 引发表达式指示错误或异常情况. 可以将任何类型的对象用作引发表达式的操作数. 此对象通常用于传达有关错误的信息. 通常,应使用在标准库中 ...
- ubuntu下安装 openssl 开发库
ubuntu下安装 openssl 开发库 检查是否已安装openssl: sudo apt-get install openssl 如果已安装执行以下操作:sudo apt-get install ...
- 点击cell弹出一个日期选择器
- (void)setUpGroup2 { ILGroupItem *group = [[ILGroupItem alloc] init]; // 结束时间 ILSettingItem *endTim ...
- php 单态设计模式
单态设计模式通常包含以下三点: · 一个私有的 构造方法:(确保用户无法通过创建对象对其进行实例化) · 一个公有的 静态的 方法:(负责对其本身进行实例化) · 一个私有的 静态的 属性:(用于保存 ...
- ngrok反向代理
关于ngrok ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道.ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放. 为什么使用ngrok? ...
- C++标准库异常类
C++标准库异常类 2012-12-24 16:27 5269人阅读 评论(1) 收藏 举报 分类: c/c++(36) C++标准库异常类继承层次中的根类为exception,其定义在excep ...
- PHP雪花背景验证码
ValidateCode.class.php 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ...