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"有什么亮点?
随机推荐
- 洛谷P2024 食物链
挺神奇 题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种 ...
- java反射学习
通过一个对象获得完整的包名和类名 package reflect; public class GetClass { public static void main(String[] args) { G ...
- 嵌入式实时操作系统μCOS原理与实践+事件部分代码
//事件等待表的初始化函数:pevent表示事件控制块的指针#if (OS_EVENT_EN)void OS_EventWaitListInit (OS_EVENT *pevent){ INT ...
- Spring AOP 系列总括
Spring有两大核心,IOC和AOP.IOC在Java Web项目中无时无刻不在使用,然而AOP用的比较少,尤其是对一些初级程序员,在架构师搭好的框架上开发应用代码,AOP几乎是透明的.然而,项目中 ...
- Chord算法
转自:http://blog.csdn.net/wangxiaoqin00007/article/details/7374833 虽然网上搜索CHord,一搜一大堆,但大多讲得不太清楚明白.今天发现一 ...
- P问题、NP问题、NPC问题、NP难问题的概念
P问题.NP问题.NPC问题.NP难问题的概念 离入职尚有几天时间,闲来无事,将大家常见却又很容易搞糊涂的几个概念进行整理,希望对大家有所帮助.你会经常看到网上出现“这怎么做,这不是NP问题吗”.“这 ...
- 一个简单例子:贫血模型or领域模型
转:一个简单例子:贫血模型or领域模型 贫血模型 我们首先用贫血模型来实现.所谓贫血模型就是模型对象之间存在完整的关联(可能存在多余的关联),但是对象除了get和set方外外几乎就没有其它的方法,整个 ...
- EL表达式从request和session中取值
在Action中保存登录的基本信息:request.getSession().setAttribute("adminid", str); 在JSP页面中:${sessionScop ...
- 新浪微博客户端(13)-使用UIWebView加载OAuth授权界面
使用UIWebView加载OAuth授权界面 DJOAuthViewController.m #import "DJOAuthViewController.h" @interfac ...
- Serenity框架官方文档翻译(1-2开始、安装和界面)
1.开始 最好的和最快速地上手Serenity的方法是使用SERENE,它是一个示例应用程序模板. 您有2个选项来安装SERENE 模板到您的Visual Studio: 从Visual Studio ...