The Clocks时钟
IOI'94 - Day 2 
考虑将如此安排在一个 3X3 行列中的九个时钟:

目标要找一个最小的移动顺序次将所有的指针指向 12 点.  下面原表格列出了 9 种不同的旋转指针的方法,每一种方法都叫一次移动.
选择1到9 号移动方法,将会使在表格中对应的时钟的指针顺时针旋转 90 度.
移动方法  受影响的时钟
1   ABDE 
2   ABC 
3   BCEF 
4   ADG 
5   BDEFH 
6   CFI 
7   DEGH 
8   GHI 
9   EFHI

[但这可能不是正确的方法,请看下面]
PROGRAM NAME: clocks
INPUT FORMAT
第 1-3 行:  三个空格分开的数字,每个数字表示一个时钟的初始时间,3,6,9,12.
数字的含意和上面第一个例子一样. 
SAMPLE INPUT (file clocks.in) 
9 9 12
6 6 6
6 3 6
OUTPUT FORMAT
单独的一行包括一个用空格分开的将所有指针指向 12:00 的最短移动顺序的列表.
如果有多种方案,输出那种使的连接起来数字最小的方案.(举例来说 5 2 4 6 < 9 3 1 1).
SAMPLE OUTPUT (file clocks.out)
4 5 8 9

===================

枚举方案的确定,减少冗余...

======================

{
ID:jie19952
PROG:clocks
LANG:PASCAL
}
type
re=array[1..3,1..3]of longint;
var
clock:array[1..3,1..3]of longint;
change:array[1..9,1..3,1..3]of longint;
ans_l,ans_t:longint;
ans_st:ansistring;
procedure init;
begin
assign(input,'clocks.in');
assign(output,'clocks.out');
reset(input); rewrite(output);
end;
procedure terminate;
begin
close(input); close(output);
halt;
end;
function pd:boolean;
var
i,j:longint;
begin
pd:=true;
for i:=1 to 3 do
for j:=1 to 3 do
if clock[i,j]<>12 then exit(false);
end;
procedure dfs(t:longint;st:ansistring);
var
i,j:longint;
ls:array[1..3,1..3]of longint;
begin
if t=10 then
begin
//inc(ans_t);
// writeln(ans_l);
//writeln(pd);
//  writeln(st);
// writeln;
if pd and (ans_l>length(st)) then
begin
ans_l:=length(st);
ans_st:=st;
end;
exit;
end;
ls:=clock;
dfs(t+1,st);
//clock:=ls;
//if length(st+' '+char(ord('0')+t))>ans_l then exit;
for i:=1 to 3 do
for j:=1 to 3 do
begin
ls[i,j]:=ls[i,j]+change[t,i,j];
if ls[i,j]>12 then
ls[i,j]:=ls[i,j]-12;
end;
clock:=ls;
dfs(t+1,st+char(ord('0')+t)+' ');
//if length(st+char(ord('0')+t)+' '+char(ord('0')+t))>ans_l then exit;
for i:=1 to 3 do
for j:=1 to 3 do
begin
ls[i,j]:=ls[i,j]+change[t,i,j];
if ls[i,j]>12 then
ls[i,j]:=ls[i,j]-12;
end;
clock:=ls;
dfs(t+1,st+char(ord('0')+t)+' '+char(ord('0')+t)+' ');
//if length(st+char(ord('0')+t)+' '+char(ord('0')+t)+' '+char(ord('0')+t))>ans_l then exit;
for i:=1 to 3 do
for j:=1 to 3 do
begin
ls[i,j]:=ls[i,j]+change[t,i,j];
if ls[i,j]>12 then
ls[i,j]:=ls[i,j]-12;
end;
clock:=ls;
dfs(t+1,st+char(ord('0')+t)+' '+char(ord('0')+t)+' '+char(ord('0')+t)+' ');
end;
procedure main;
var
i,j:longint;
begin
for i:=1 to 3 do
for j:=1 to 3 do
read(clock[i,j]);
fillchar(change,sizeof(change),0);
change[1,1,1]:=3;  change[1,1,2]:=3;
change[1,2,1]:=3;  change[1,2,2]:=3;
change[2,1,1]:=3;  change[2,1,2]:=3;
change[2,1,3]:=3;
change[3,1,2]:=3;  change[3,1,3]:=3;
change[3,2,2]:=3;  change[3,2,3]:=3;
change[4,1,1]:=3;  change[4,2,1]:=3;
change[4,3,1]:=3;
change[5,1,2]:=3;  change[5,2,1]:=3;
change[5,2,2]:=3;  change[5,2,3]:=3;
change[5,3,2]:=3;
change[6,1,3]:=3;  change[6,2,3]:=3;
change[6,3,3]:=3;
change[7,2,1]:=3;  change[7,2,2]:=3;
change[7,3,1]:=3;  change[7,3,2]:=3;
change[8,3,1]:=3;  change[8,3,2]:=3;
change[8,3,3]:=3;
change[9,2,2]:=3;  change[9,2,3]:=3;
change[9,3,2]:=3;  change[9,3,3]:=3;
ans_l:=maxlongint;
ans_t:=0;
dfs(1,'');
writeln(copy(ans_st,1,length(ans_st)-1));
// writeln(ans_t);
end;
begin
init;
main;
terminate;
end.   

The Clocks时钟相关推荐

  1. 【USACO题库】1.4.2 The Clocks时钟.TJ

    标题的简介: [USACO题库]1.4.2 The Clocks--Tj https://jzoj.net/junior/#contest/show/1232/11(下文题目描述还是原地址清楚) 考虑 ...

  2. C 常用新特性(下)

    多线程 什么是多线程这里就不过多介绍,新特性关于多线程最主要的就是std::thread的使用,它的使用也很简单,看代码: 这里记住,std::thread在其对象生命周期结束时必须要调用join() ...

  3. imx6ul pwm 调试

    imx6ul pwm 调试 一:imx6ul datasheet pwm 二:设备树修改 三:pwm使能 四:pwm测试 一:imx6ul datasheet pwm 阅读imx6ul datashe ...

  4. 计算机组成与体系结构(一)

    计算机组成与体系结构 第一章:绪论 1.1 计算机组成和计算机体系结构的区别 计算机组成强调控制信号和信号传递方式以及存储器相关(encompassed all physical aspects of ...

  5. 全志 H6 Orange Pi Lite 2 Android 7.0 蓝牙配置

    问题原因 接下来继续解决蓝牙问题. 查看原理图,确认管脚 从原理图可以确认,BT用的是UART1模块. sys_config.fex配置 找到BT的配置项 ;--------------------- ...

  6. Arduino 四位数码管控制

    材料 物品 个数 Arduino UNO 1 按钮 3 共阳极四位数码管 1 双公口杜邦线 若干 面包板 1 功能设计 时间显示 调节时间 接线 D1表示加粗的引脚 Arduino 四位数码管 2 a ...

  7. 《Static Timing Analysis for Nanometer Designs》汇总传送门

    文章目录 [第一章 绪论](https://blog.csdn.net/yueguangmuyu/article/details/125721646) [第二章 STA相关概念](https://bl ...

  8. Verge3D 2.14 for Blender发布

    此版本的主要更新有:支持增强现实功能,变形目标控制,内置参数化模型示例应用,字体加载和文本纹理功能,法线贴图生成器,以及更多好玩儿的功特性! 基于浏览器的增强现实 感谢WebXR工作组的辛劳工作,基于 ...

  9. 什么是信念?什么是信仰?

    什么是信念? 信念是指人们对自己的想法观念及其意识行为倾向,强烈的坚定不疑的确信与信任. 信念必须超越需求 一个人的信念必须超越自我和个人需求,它可以是自己的公司.祖国或服役义务.任何因信念和核心价值 ...

最新文章

  1. LeetCode 673. Number of Longest Increasing Subsequence--O(N log N )--Java,C++,Python解法
  2. Vim 实用技术,第 3 部分: 定制 Vim
  3. 疯了吧!面试官 5 连问一个 TCP 连接可以发多少个 HTTP 请求?
  4. 未能加载文件或程序集“xxx”或它的某一个依赖项。生成此程序集的运行时比当前加载的运行时新,无法加载此程序集...
  5. 【转载】target='_blank' 安全漏洞示例
  6. [CodeForces - 950D]A Leapfrog in the Array(思维)
  7. c语言程序课程设计过程,C语言课程设计————写下流程图! 谢谢
  8. javascript 对象(四)
  9. VIM 技巧 (二)查找与替换
  10. MongoDB填充因子和更新优化
  11. 实例三十八:银行卡问题
  12. 使用 Google Guava Striped 实现基于 Key 的并发锁
  13. 【马司机带带我】君子日三省吾身
  14. Win10右下角小图标怎么叠起来?
  15. 自学python接单_用Python在网上接单,兼职也可以月薪过万
  16. pr里面怎么加css样式,放入pr剪辑中画面不全怎么办?
  17. 帝国时代php,依然经典,《帝国时代》WEB版现世
  18. gpu灵魂拷问各路神仙
  19. 如何用Java语言打印出九九乘法表
  20. 格密码(Lattice)与NTRUEncrypt介绍

热门文章

  1. python算法二:迭代法
  2. quot;走近日企,感受日本quot;中国大学生日本茶道体验记
  3. 卡莱提供Octax系列连接器免费3D CAD模型下载
  4. bp算法运行太慢_BP算法的改进在Matlab的实现研究
  5. 本周最新文献速递20210314
  6. linux中主机名突然变成了bogon,咋办
  7. 判定2000--2500年中的每一年是否为闰年,并将结果输出。
  8. 四方云动任他动,我自岿然如青松。
  9. word怎么把页面顺序倒过来_在excel中怎么使文字颠倒顺序反过来显示呢?
  10. 28分钟完成一款Python游戏,《客服戏翻总裁牌》