hdu 1430+hdu 3567(预处理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1430
思路:由于只是8种颜色,所以标号就无所谓了,对起始状态重新修改标号为 12345678,对目标状态标号做相应的修改,先预处理出12345678到所有状态的路径,记录所有状态的pre值,直接输出即可。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<string>
using namespace std; struct Node{
char str[];
Node(){};
Node(char _str[]){
for(int i=;i<;i++){
str[i]=_str[i];
}
}
}; int fac[]={,,,,,,,,};
int Get_Hash(Node &p)
{
int val=;
for(int i=;i<;i++){
int cnt=;
for(int j=;j<i;j++){
if(p.str[j]>p.str[i])cnt++;
}
val+=cnt*fac[i];
}
return val;
} void Move_A(Node &p)
{
reverse(p.str,p.str+);
} void Move_B(Node &p)
{
char ch=p.str[];
for(int i=;i>=;i--)p.str[i]=p.str[i-];
p.str[]=ch;
ch=p.str[];
for(int i=;i<=;i++)p.str[i]=p.str[i+];
p.str[]=ch;
} void Move_C(Node &p)
{
swap(p.str[],p.str[]);
swap(p.str[],p.str[]);
swap(p.str[],p.str[]);
} int pre[],ans[];
bool mark[]; void BFS()
{
queue<Node>que;
que.push(Node(""));
memset(mark,false,sizeof(mark));
mark[]=true;
while(!que.empty()){
Node p=que.front();
que.pop();
int p_val=Get_Hash(p);
Node q(p);
Move_A(q);
int q_val=Get_Hash(q);
if(!mark[q_val]){
mark[q_val]=true;
pre[q_val]=p_val;
ans[q_val]='A';
que.push(q);
}
q=p;
Move_B(q);
q_val=Get_Hash(q);
if(!mark[q_val]){
mark[q_val]=true;
pre[q_val]=p_val;
ans[q_val]='B';
que.push(q);
}
q=p;
Move_C(q);
q_val=Get_Hash(q);
if(!mark[q_val]){
mark[q_val]=true;
pre[q_val]=p_val;
ans[q_val]='C';
que.push(q);
}
}
} char S[],T[];
int SS[];
int main()
{
BFS();
while(~scanf("%s%s",S,T)){
for(int i=;i<;i++)SS[S[i]-'']=i;
for(int i=;i<;i++)T[i]=SS[T[i]-'']+'';
Node p=Node(T);
int val=Get_Hash(p);
string ss="";
while(val){
ss+=ans[val];
val=pre[val];
}
reverse(ss.begin(),ss.end());
cout<<ss<<endl;
}
return ;
}
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3567
思路:因为这题有一个特殊的点X,所以枚举X的位置,打出9张前驱表,用魔板题一样的方法将两个状态的对应标号转化,输出就好了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<queue>
using namespace std; struct Node{
int map[][];
int x,y;
Node(){}
Node(char *str){
for(int i=,xx=,yy=;str[i];i++){
map[xx][yy]=str[i];
if(str[i]=='X'){ x=xx,y=yy; }
yy++;
if(yy==)xx++,yy=;
}
}
}S; int fac[]= {,,,,,,,,};
//康拓展开
int Get_Hash(Node &p)
{
char str[];
int val=;
for(int i=;i<;i++){
for(int j=;j<;j++){
str[i*+j]=p.map[i][j];
int cnt=;
for(int k=i*+j-;k>=;k--){
if(str[k]>str[i*+j])cnt++;
}
val+=fac[i*+j]*cnt;
}
}
return val;
} int dir[][]={{,},{,-},{,},{-,}};
char Dir[]="dlru";
int pre[][];
char ans[][];
bool mark[]; void bfs(int x)
{
memset(pre[x],-,sizeof(pre[x]));
memset(mark,false,sizeof(mark));
queue<Node>que;
que.push(S);
mark[Get_Hash(S)]=true;
while(!que.empty()){
Node p=que.front();
que.pop();
int p_val=Get_Hash(p);
for(int i=;i<;i++){
Node q=p;
q.x=p.x+dir[i][],q.y=p.y+dir[i][];
if(q.x<||q.x>=||q.y<||q.y>=)continue;
q.map[p.x][p.y]=q.map[q.x][q.y];
q.map[q.x][q.y]='X';
int q_val=Get_Hash(q);
if(mark[q_val])continue;
mark[q_val]=true;
pre[x][q_val]=p_val;
ans[x][q_val]=Dir[i];
que.push(q);
}
}
} char str[];
int num[];
int main()
{
S=Node("X12345678");
bfs();
S=Node("1X2345678");
bfs();
S=Node("12X345678");
bfs();
S=Node("123X45678");
bfs();
S=Node("1234X5678");
bfs();
S=Node("12345X678");
bfs();
S=Node("123456X78");
bfs();
S=Node("1234567X8");
bfs();
S=Node("12345678X");
bfs(); int _case,p,t=;
scanf("%d",&_case);
while(_case --){
scanf("%s", str);
for(int i = , j = ; i <= ; i ++ ){
if(str[i] != 'X') num[str[i] - ''] = j ++;
else p = i;
}
scanf("%s", str);
for(int i=;i<=;i++){
if(str[i]=='X')continue;
str[i]=num[str[i]-'']+'';
}
S=Node(str);
int val=Get_Hash(S);
string ss="";
while(val!=-){
ss+=ans[p][val];
val=pre[p][val];
}
reverse(ss.begin(), ss.end());
printf("Case %d: %d\n",t++,ss.size()-);
for(int i=;i<ss.size();i++)cout<<ss[i];
cout<<endl;
}
return ;
}
hdu 1430+hdu 3567(预处理)的更多相关文章
- HDU 1430 魔板(康托展开+BFS+预处理)
魔板 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- hdu 5317 合数分解+预处理
RGCDQ Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- HDU - 2222,HDU - 2896,HDU - 3065,ZOJ - 3430 AC自动机求文本串和模式串信息(模板题)
最近正在学AC自动机,按照惯例需要刷一套kuangbin的AC自动机专题巩固 在网上看过很多模板,感觉kuangbin大神的模板最为简洁,于是就选择了用kuangbin大神的模板. AC自动机其实就是 ...
- POJ-1077 HDU 1043 HDU 3567 Eight (BFS预处理+康拓展开)
思路: 这三个题是一个比一个令人纠结呀. POJ-1077 爆搜可以过,94ms,注意不能用map就是了. #include<iostream> #include<stack> ...
- hdu 1430 魔板 (BFS+预处理)
Problem - 1430 跟八数码相似的一题搜索题.做法可以是双向BFS或者预处理从"12345678"开始可以到达的所有状态,然后等价转换过去直接回溯路径即可. 代码如下: ...
- HDU - 1430 魔板 (bfs预处理 + 康托)
对于该题可以直接预处理初始状态[0, 1, 2, 3, 4, 5, 6, 7]所有可以到达的状态,保存到达的路径,直接打印答案即可. 关于此处的状态转换:假设有初始状态为2,3,4,5,0,6,7,1 ...
- HDU - 1430 魔板 【BFS + 康托展开 + 哈希】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1430 思路 我刚开始 想到的 就是 康托展开 但是这个题目是 多组输入 即使用 康托展开 也是会T的 ...
- hdu 1430 魔板 康托展开 + 很好的映射
http://acm.hdu.edu.cn/showproblem.php?pid=1430 如果从start ---> end,每一次都bfs进行,那么就肯定会超时. 考虑到先把start映射 ...
- hdu 1430 (BFS 康托展开 或 map )
第一眼看到这题就直接BFS爆搜,第一发爆了内存,傻逼了忘标记了,然后就改,咋标记呢. 然后想到用map函数,就8!个不同的排列,换成字符串用map标记.然后又交一发果断超时,伤心,最恨超时,还不如来个 ...
随机推荐
- java本地方法如何调用其他程序函数,方法详解2
Java调用本地方法(JNI浅谈) (2006-11-27 14:55:36) 转载▼ 分类: Java类文章 本人在项目开发实践中的总结和体会 前段时间公司 ...
- ThinkPHP3.2.3自带的分页用法--很简单实用
把解压后的Page.class.php放入ThinkPHP/Extend/Library/ORG/Util/(如果没有请手动创建)目录下面.thinkphp 自带的分页非常好用美观,先看一下如下代码片 ...
- JS判断一个数组中是否有重复值的三种方法
方法一: var s = ary.join(",")+","; for(var i=0;i<ary.length;i++) { if(s.replace( ...
- 用 Java 实现断点续传 (HTTP)
断点续传的原理 其实断点续传的原理很简单,就是在 Http 的请求上和一般的下载有所不同而已. 打个比方,浏览器请求服务器上的一个文时,所发出的请求如下: 假设服务器域名为 wwww.sjtu.edu ...
- Nginx 开启PATHINFO支持ThinkPHP框架实例
ThinkPHP支持通过PATHINFO和URL rewrite的方式来提供友好的URL,只需要在配置文件中设置 'URL_MODEL' => 2 即可.在Apache下只需要开启mod_rew ...
- Mac SVN <CornerStone>的安装和配置
cornerstone需要注意的地方 cornerstone文件夹的删除必须在 cornerstone软件里面删, 否则commit就会显示 up of date, 同步不了 http://www.t ...
- 代码规范和常用的js插件以及测试工具
1.代码规范 .model层 1.1.1database file_proerty 1.1.2java fileProperty. 1.2.字段要有空指针 1.3.不创建爱数据库外键约束 1.4.已知 ...
- System.SysUtils.TMarshaller 与 System.TMarshal
转自:http://www.cnblogs.com/del/archive/2013/06/10/3130974.html TMarshaller(结构) 基于 TMarshal(是有一大堆的 cla ...
- HDOJ 2095
find your present (2) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/1024 K (Java/Oth ...
- 2.前端笔记之css
title: 1.前端笔记之CSS date: 2016-04-05 23:05:51 tags: 前端 categories: w3c --- 作者:刘耀 **出处:http://www.liuya ...