Usaco 1.4.2 时钟(The Clocks)
2011-08-05 11:31
633 查看
题目: | 时钟 | |
来源: | Usaco1.4.2 | |
题目大意: | 给定9个时钟,及转动方法,求一个最小的转动方案移动方法受影响的时钟 1ABDE 2ABC 3BCEF 4ADG 5BDEFH 6CFI 7DEGH 8GHI 9EFHI | |
数据范围: | 就9个时钟,都有解 | |
样例: | 9912 666 636 | 4589 |
做题思路: | 每种转动方法使用先后没大碍,所以从小的开始搜,保证最小方案,每一个方法最少用0次,最多3次,4次等于没用,然后判断皆可。3、6、9、12四个时间可以用1、2、3、0来代替,看出规律了吧。 | |
知识点: | 深搜、模拟 |
ID:DountNameless
TASK:clocks
LANG:PASCAL
}
var
a,b:array[1..9]oflongint;
data:array[1..9,0..5]oflongint=((4,1,2,4,5,0),
(3,1,2,3,0,0),
(4,2,3,5,6,0),
(3,1,4,7,0,0),
(5,2,4,5,6,8),
(3,3,6,9,0,0),
(4,4,5,7,8,0),
(3,7,8,9,0,0),
(4,5,6,8,9,0));
x,i:longint;
ans:string;
procedureprint;
var
i,j:longint;
begin
fori:=1to9do
ifa[i]mod4<>0thenexit;{<如果不是0则说明还有没指向12点的>}
ans:='';
fori:=1to9do
forj:=1tob[i]do
ans:=ans+chr(i+48)+'';{<这样在输出前delete一位,省去对方案只有一位数的特殊处理>}
delete(ans,length(ans),1);
writeln(ans);
close(input);close(output);
halt;
end;
proceduredfs(k:longint);{<深搜>}
var
i,j:longint;
begin
ifk=10thenprint
else
begin
fori:=0to3do{<枚举每个方案的使用情况>}
begin
b[k]:=i;
forj:=1todata[k,0]doinc(a[data[k,j]],i);{<data[k,0]存的是该方案有哪几个表变了>}
dfs(k+1);
forj:=1todata[k,0]dodec(a[data[k,j]],i);
end;
end;
end;
begin
assign(input,'clocks.in');reset(input);
assign(output,'clocks.out');rewrite(output);
fori:=1to9do
begin
read(x);
a[i]:=xdiv3;
end;
dfs(1);
close(input);close(output);
end.题目来源:
相关文章推荐
- USACO:1.4.2 The Clocks 时钟(IOI 94) 解析
- JZOJ1250.【USACO题库】1.4.2 The Clocks
- USACO section 1.4.2 The Clocks
- 【宽搜】The Clocks 时钟 (Usaco_Training 1.4)
- USACO 1.4.2 The Clocks
- USACO section 1.4.2 The Clocks
- USACO 1.4.2 The Clocks(DFS)
- 1250. 【USACO题库】1.4.2 The Clocks (Standard IO)
- [USACO 1.4.2] The Clocks
- 【USACO题库】1.4.2 The Clocks
- 【宽搜】The Clocks 时钟 (Usaco_Training 1.4)
- USACO1.4.2--The Clocks
- 【USACO 1.4.2】时钟
- USACO1.4.2(The clocks)BFS
- USACO 1.4.2 —— 暴搜
- USACO 1.4 The Clocks (位操作+枚举+BFS)
- usaco 1.4 The Clocks(暴搜)and poj 1166
- USACO 6.5 The Clocks
- USACO 1.4.2 BFS 解法。
- [USACO 6.5.4]The Clocks