1054: [HAOI2008]移动玩具
时间:2022-05-08
本文章向大家介绍1054: [HAOI2008]移动玩具,主要内容包括1054: [HAOI2008]移动玩具、Description、Input、Output、Sample Input、Sample Output、HINT、Source、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
1054: [HAOI2008]移动玩具
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 1272 Solved: 690
Description
在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动次数将初始的玩具状态移动到某人心中的目标状态。
Input
前4行表示玩具的初始状态,每行4个数字1或0,1表示方格中放置了玩具,0表示没有放置玩具。接着是一个空行。接下来4行表示玩具的目标状态,每行4个数字1或0,意义同上。
Output
一个整数,所需要的最少移动次数。
Sample Input
1111 0000 1110 0010 1010 0101 1010 0101
Sample Output
4
HINT
Source
题解:其实是一道水水哒搜索题,只要你知道怎么状压,怎么用一个数组判重同时记录最优值就好了
(PS:其实我WA掉的那一次是没特判开头结尾情况完全一样的情形,应该输出0,而我原来的程序将没有输出= =,注意下)
1 /**************************************************************
2 Problem: 1054
3 User: HansBug
4 Language: Pascal
5 Result: Accepted
6 Time:36 ms
7 Memory:772 kb
8 ****************************************************************/
9
10 var
11 i,j,k,l,m,n,x0,x1,x,y,f,r:longint;
12 c,d:array[0..70000] of longint;
13 list:array[0..20] of longint;ch:char;
14 function num(x,y:longint):longint;inline;
15 begin
16 exit(4*(x-1)+y);
17 end;
18 function getit(x,y:longint):longint;inline;
19 begin
20 if odd(x div list[y]) then exit(1) else exit(0);
21 end;
22 procedure orz(x:longint);inline;
23 begin
24 writeln(x);
25 readln;
26 halt;
27 end;
28 begin
29 list[1]:=1;for i:=2 to 16 do list[i]:=list[i-1]*2;
30 x0:=0;x1:=0;
31 for i:=1 to 4 do
32 begin
33 for j:=1 to 4 do
34 begin
35 read(ch);
36 inc(x0,(ord(ch)-48)*list[num(i,j)]);
37 end;
38 readln;
39 end;
40 readln;
41 for i:=1 to 4 do
42 begin
43 for j:=1 to 4 do
44 begin
45 read(ch);
46 inc(x1,(ord(ch)-48)*list[num(i,j)]);
47 end;
48 readln;
49 end;
50 if x0=x1 then orz(0);
51 for i:=0 to 65536 do c[i]:=maxlongint;
52 d[1]:=x0;f:=1;r:=2;c[x0]:=0;
53 while f<r do
54 begin
55 l:=d[f];i:=1;x:=1;y:=0;
56 while l>0 do
57 begin
58 x:=x+y div 4;y:=y mod 4+1;
59 if odd(l) then
60 begin
61 if x>1 then
62 begin
63 if getit(d[f],i-4)=0 then
64 begin
65 d[r]:=d[f]-list[i]+list[i-4];
66 if c[d[r]]=maxlongint then
67 begin
68 c[d[r]]:=c[d[f]]+1;
69 if d[r]=x1 then orz(c[d[r]]);
70 inc(r);
71 end;
72 end
73 end;
74 if x<4 then
75 begin
76 if getit(d[f],i+4)=0 then
77 begin
78 d[r]:=d[f]-list[i]+list[i+4];
79 if c[d[r]]=maxlongint then
80 begin
81 c[d[r]]:=c[d[f]]+1;
82 if d[r]=x1 then orz(c[d[r]]);
83 inc(r);
84 end;
85 end;
86 end;
87 if y>1 then
88 begin
89 if getit(d[f],i-1)=0 then
90 begin
91 d[r]:=d[f]-list[i]+list[i-1];
92 if c[d[r]]=maxlongint then
93 begin
94 c[d[r]]:=c[d[f]]+1;
95 if d[r]=x1 then orz(c[d[r]]);
96 inc(r);
97 end;
98 end;
99 end;
100 if y<4 then
101 begin
102 if getit(d[f],i+1)=0 then
103 begin
104 d[r]:=d[f]-list[i]+list[i+1];
105 if c[d[r]]=maxlongint then
106 begin
107 c[d[r]]:=c[d[f]]+1;
108 if d[r]=x1 then orz(c[d[r]]);
109 inc(r);
110 end;
111 end;
112 end;
113 end;
114 inc(i);l:=l div 2;
115 end;
116 inc(f);
117 end;
118 end.
- Spring-拾遗
- Golang面试题
- 简单易学的机器学习算法——基于密度的聚类算法DBSCAN
- 厚土Go学习笔记 | 29. 接口
- Golang Template 简明笔记
- hotspare的copyback(r7笔记第30天)
- Spring-AOP
- DBA和开发同事的一些代沟(三)(r7笔记第29天)
- 简单易学的机器学习算法——非线性支持向量机
- 一条关于swap争用的报警邮件分析(一)(r7笔记第28天)
- Spring-IOC(2)
- Python3 pandas read_csv 读取txt文件报错:IOError: Initializing from file failed
- dataguard添加临时数据文件的bug(r7笔记第27天)
- 简单易学的机器学习算法——线性支持向量机
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 学以致用C++设计模式 “抽象工厂模式”
- 学以致用C++设计模式 之 “工厂模式”
- 六大原则不熟?那你学什么设计模式?来来来,赶紧来!
- 精品:TCP连接的建立和终止
- python--几种快速排序的实现以及运行时间比较
- TCP/IP详解 -奠基篇
- 段错误?打的就是段错误!!
- (Graph)图,挑着看看
- Mybatis学习笔记(四)调用存储过程
- 跟我一起 自己种一颗 AVL树(平衡二叉搜索树)吧!
- mybatis文件映射之利用collection定义关联集合(五)
- 【奇技淫巧】 -- 原地旋转数组
- mybatis文件映射之利用延迟加载解决collection分布查询(六)
- 【C++】攻克哈希表(unordered_map)
- 位图原理及实现 - 海量数据处理标配