题目描述

考虑将如此安排在一个 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. PB笔记之验证必填(pfc_validation)

    pfc_validation事件中可以在保存时进行提示

  2. Spring常用jar包功能详解

    很多小伙伴包括我自己,在使用spring的时候导入了一堆jar包,但是并不明白每个jar的用途,使用spring的不同功能时也不知该导入哪个jar包,今天记录一下spring各个jar包的含义,供大家 ...

  3. javascript Ajax 学习

    前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! AJAX是asynchronousjavascript and XML的简写,就是异步的javascrip ...

  4. springboot2.x配置druid sql监控

    后端接口响应慢,通常我们就需要优化代码和sql,如果项目中使用druid连接池,那么我们可以利用其提供的sql监控功能,来帮助我们快速定位慢sql已经sql执行次数等问题,springboot2之后, ...

  5. 调试location指令时,直接让location输出文本

    有时候我们调试location指令时希望location指令能够直接输出文本,这样能够方便我们进行调试.这时我们可以使用echo模块实现,但是大多数情况我们没有安装这个模块,那么我们还可以使用另一个方 ...

  6. 【转载】Request对象的作用以及常见属性

    Request对象是Asp.Net应用程序中非常重要的一个内置对象,其作用主要用于服务器端获取客户端提交过来的相应信息,比较常用的有使用Requset对象获取用户提交的html表单信息,Request ...

  7. JavaScript,遍历,for

    (for循环,for...in ,for...of ,forEach)(:for in总是得到数组,字符串的下标,而for of和forEach一样,是直接得到值) (forEach() 方法用于调用 ...

  8. 关于Ad-hoc

    Ad-hoc是wifi的一个模式,依托普通无线局域网802.11家族.网络中所有结点的地位平等,无需设置任何的中心控制结点,省去了无线中介设备AP.比如一台电脑建立了一个网络,这个时候加入了两台电脑. ...

  9. 【Mybatis】 入门

    一.概述 1.1 JDBC 1.2 JDBC编程中问题 1.3 MyBatis介绍 1.4 Mybatis架构 二.MyBatis入门程序 2.1 需求 2.2 引入MyBatis依赖 2.3 配置 ...

  10. 【SpringMVC】RESTful支持

    一.概述 1.1 什么是RESTful 1.2 URL的RESTful实现 二.演示 2.1 需求 2.2 第一步更改DispatcherServlet配置 2.3 第二步参数通过url传递 2.4 ...