题目描述

考虑将如此安排在一个 3 x 3 行列中的九个时钟:

目标要找一个最小的移动顺序将所有的指针指向12点。下面原表格列出了9种不同的旋转指针的方法,每一种方法都叫一次移动。选择1到9号移动方法,将会使在表格中对应的时钟的指针顺时针旋转90度。

移动方法 受影响的时钟

1 ABDE

2 ABC

3 BCEF

4 ADG

5 BDEFH

6 CFI

7 DEGH

8 GHI

9 EFHI

Example

[但这可能不是正确的方法,请看下面]

输入输出格式

输入格式:

第1-3行: 三个空格分开的数字,每个数字表示一个时钟的初始时间,3,6,9,12。数字的含意和上面第一个例子一样。

输出格式:

单独的一行包括一个用空格分开的将所有指针指向12:00的最短移动顺序的列表。

如果有多种方案,输出那种使其连接起来数字最小的方案。(举例来说5 2 4 6 < 9 3 1 1)。

输入输出样例

输入样例#1: 复制

9 9 12
6 6 6
6 3 6
输出样例#1: 复制

4 5 8 9

说明

题目翻译来自NOCOW。

USACO Training Section 1.4

// luogu-judger-enable-o2
//九维数组暴力判啊
//hash写的太渣 #include<iostream>
#include<cstdio>
#include<string>
#include<map>
#include<queue>
#include<algorithm>
using namespace std; const int N=;
const int mod=; string move[]={"","","","","","","","","",""};
int len[]={,,,,,,,,,};
struct CLO
{
int id;
string s;
int pre;
string way;
int cnt;
}clo[];
int num_clo;
string ans[];
int len_ans,sum; bool operator < (string a,string b)
{
return a+b<b+a;
} bool h[N];
bool hash(string a)
{
int tmp=;
for(int i=;i<;++i)
{
tmp=tmp*+a[i]-'';
}
if(h[tmp])
return ;
h[tmp]=;
return ;
} void bfs()
{
queue<CLO> que;
que.push(clo[]);
hash(clo[].s);
CLO now,tmp;
len_ans=N;
while(!que.empty())
{
now=que.front(),que.pop();
// cout<<now.s<<endl;
if(now.cnt>=len_ans)
break;
for(int i=;i<=;++i)
{
// cout<<"i: "<<i<<endl;
tmp.s=now.s;
for(int j=;j<len[i];++j)
{
++tmp.s[move[i][j]-''];
if(tmp.s[move[i][j]-'']=='')
tmp.s[move[i][j]-'']='';
}
// cout<<"tmp.s: "<<tmp.s<<endl;
if(tmp.s=="")
{
ans[++sum]=now.way;
ans[sum]+=i+'';
len_ans=min(len_ans,now.cnt+);
continue;
}
if(hash(tmp.s))
continue;
tmp.cnt=now.cnt+;
tmp.id=++num_clo;
tmp.way=now.way;
tmp.way+=i+'';
tmp.pre=now.id;
clo[num_clo]=tmp;
que.push(tmp);
// cout<<"num_clo: "<<num_clo<<endl;
}
}
} int main()
{
// freopen("testdata.in","r",stdin);
for(int i=,a;i<=;++i)
{
scanf("%d",&a);
clo[].s+=a/+'';
}
bfs();
sort(ans+,ans+sum+);
// for(int i=1;i<=sum;++i)
// cout<<ans[i]<<endl;
// cout<<sum;
for(int i=;i<ans[].length();++i)
printf("%c ",ans[][i]);
return ;
}

P1213 时钟的更多相关文章

  1. Vijos——T 1016 北京2008的挂钟 || 洛谷—— P1213 时钟

    https://www.luogu.org/problem/show?pid=1213 题目描述 考虑将如此安排在一个 3 x 3 行列中的九个时钟: 目标要找一个最小的移动顺序将所有的指针指向12点 ...

  2. [转] STM32各种时钟的区别

    [原创]:http://m.oschina.net/blog/129357 我在原创的基础又从另一位博主处引用了一些内容. 时钟系统是处理器的核心,所以在学习STM32所有外设之前,认真学习时钟系统是 ...

  3. [转载]:STM32为什么必须先配置时钟再配置GPIO

    转载来源 :http://blog.csdn.net/fushiqianxun/article/details/7926442 [原创]:我来添两句,就是很多同学(包括我)之前搞低端单片机,到了stm ...

  4. 理解Java对象的交互:时钟显示程序

    实现: 结构: 对象:时钟  - 对象:小时                 - 对象:分钟 小时和分钟具有相同属性(值,上限),可以用一个类Display来定义这两个对象: 但是两者之间又具有联系( ...

  5. [JS,Canvas]日历时钟

    [JS,Canvas]日历时钟 Html: <!doctype html> <html> <head> <meta charset="UTF-8&q ...

  6. 浅谈时钟的生成(js手写代码)

    在生成时钟的过程中自己想到布置表盘的写法由这么几种: 当然利用那种模式都可以实现,所以我们要用一个最好理解,代码有相对简便的方法实现 1.利用三角函数 用js在三角函数布置表盘的过程中有遇见到这种情况 ...

  7. Linux(Unix)时钟同步ntpd服务配置方法

    http://xu20cn.blog.51cto.com/274020/69689 假定时钟服务器IP地址为:192.168.0.1 服务器端配置: 1:置/etc/ntp.conf文件内容为: se ...

  8. S5PV210_时钟系统

    1.S5PV210的时钟获得:外部晶振+内部时钟发生器+内部PLL产生高频时钟+内部分频器分频 S5PV210外部有4个W晶振接口,可以根据需要来决定在哪里接晶振.接了晶振之后上电相应的模块就能产生振 ...

  9. Canvas绘制时钟

    ①首先在HTML的body标签中添加一个canvas标签,用于绘制时钟. <canvas id="myCanvas" width="600" height ...

随机推荐

  1. spring中EL解析器的使用

    SpEL对表达式语法解析过程进行了很高的抽象,抽象出解析器.表达式.解析上下文.估值(Evaluate)上下文等对象,非常优雅的表达了解析逻辑.主要的对象如下: 类名 说明 ExpressionPar ...

  2. php 跳转页面

    header('location:./example.php'); header('refresh:2;url=./example.php');

  3. shiro登录验证简单理解

    这两天接手了下师兄的项目,要给系统加个日志管理模块,其中需要记录登录功能的日志,那么首先要知道系统的登录是在哪里实现验证的. 该系统把所有登录验证还有权限控制的工作都交给了shiro. 这篇文章就先简 ...

  4. C#用户控件实战01_CSS布局

    很多应用系统的主页布局,一般采用如下案例所示布局较多,如下图的CSS布局框架,上.中.下,接下来我们演示,在C#中实现如下的业务架构布局. 代码范例: 在<body></body&g ...

  5. nginx buffer

    1.错误日志:warn:an upstream response is buffered to a temporary file 解决办法:增加fastcgi_buffers 8 4K;     fa ...

  6. 【转载】Sqlserver限制最大可使用内存

    在Sqlserver的使用过程中,我们会发现随着运行时间的增长,Sqlserver占用的系统也越来越大,查了网上的相关资料说,Sqlserver在查询完相应数据后,为了下一次查询的性能,并不会马上释放 ...

  7. js同时获取多个共同class内容标签内容集合

    1.获取标签内容  标签如下:   <img image-code="#qq_1_gif#" class="emoji_icon" src="i ...

  8. Android拍照和从相册获取照片

    1.从相册获取照片 private void openAlumb() { //mRxPermissions:三方权限库 mRxPermissions .request(Manifest.permiss ...

  9. 前端BOM对象

    location.href 查看当前的url location.href http://www.baidu.com 跳转URL location.reload 重载当前页面 windows.alert ...

  10. C语言面试题目之指针和数组

    说明:所有题目均摘录于网络以及我所见过的面试题目,欢迎补充! 无特殊说明情况下,下面所有题s目都是linux下的32位C程序. 先来几个简单的热热身. 1.计算以下sizeof的值. char str ...