题目名称 668. 时钟
输入输出 clocks.in/out
难度等级 ★☆
时间限制 1000 ms (1 s)
内存限制 128 MiB
测试数据 8
题目来源 GravatarMakazeu 于2012-03-29加入
开放分组 全部用户
提交状态
分类标签
分享题解
通过:81, 提交:145, 通过率:55.86%
GravatarYoungsc 100 0.000 s 0.00 MiB C++
Gravatarlihaoze 100 0.000 s 0.00 MiB C++
Gravatarslyrabbit 100 0.002 s 0.29 MiB C++
Gravatar风间净无尘 100 0.002 s 0.29 MiB C++
Gravatar瑆の時間~無盡輪迴·林蔭 100 0.002 s 0.29 MiB C++
Gravatar月落九天 100 0.002 s 0.29 MiB C++
GravatarPorterCass·D·Ace 100 0.002 s 0.31 MiB C++
Gravatar瑆の時間~無盡輪迴·林蔭 100 0.002 s 1.96 MiB C++
Gravatarwfff 100 0.009 s 0.35 MiB C++
Gravatar落痕 100 0.012 s 0.70 MiB C++
关于 时钟 的近10条评论(全部评论)
写了一段巨生草的代码哈哈哈哈wwwwwwww
Gravatarlihaoze
2022-08-02 22:28 4楼
真好用
Gravatar风间净无尘
2016-07-02 10:12 3楼
枚举更慢、、、、
GravatarConanQZ
2016-06-05 19:05 2楼
毛线啊时间这么长,BFS还是慢很多
下面是第一名的。。。。。。。。。这巨坑。
#include<cstdio>
const int A[9][9] =
{
{3, 3, 3, 3, 3, 2, 3, 2, 0},
{2, 3, 2, 3, 2, 3, 1, 0, 1},
{3, 3, 3, 2, 3, 3, 0, 2, 3},
{2, 3, 1, 3, 2, 0, 2, 3, 1},
{2, 3, 2, 3, 1, 3, 2, 3, 2},
{1, 3, 2, 0, 2, 3, 1, 3, 2},
{3, 2, 0, 3, 3, 2, 3, 3, 3},
{1, 0, 1, 3, 2, 3, 2, 3, 2},
{0, 2, 3, 2, 3, 3, 3, 3, 3}
};
int main()
{
freopen("clocks.in", "r", stdin);
freopen("clocks.out", "w", stdout);
int v[9] = {0}, i, j, k;
for (i = 0; i < 9; i++)
{
scanf("%d", &k);
for (j = 0; j < 9; j++) v[j] += (4 - k / 3) * A[i][j];
}
for (i = 0; i < 9; i++) v[i] &= 3;
k = 0;
for (i = 0; i < 9; i++)
for (j = 0; j < v[i]; j++)
if (!k) printf("%d", i + 1), k = 1;
else printf(" %d", i + 1);
putchar(10);
return 0;
}
GravatarNVIDIA
2015-07-10 16:02 1楼

668. 时钟

★☆   输入文件:clocks.in   输出文件:clocks.out   简单对比
时间限制:1 s   内存限制:128 MiB

【题目描述】

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

 |-------|    |-------|    |-------|
 |       |    |       |    |   |   |
 |---O   |    |---O   |    |   O   |
 |       |    |       |    |       |
 |-------|    |-------|    |-------|
     A            B            C
 |-------|    |-------|    |-------|
 |       |    |       |    |       |
 |   O   |    |   O   |    |   O   |
 |   |   |    |   |   |    |   |   |
 |-------|    |-------|    |-------|
     D            E            F
 |-------|    |-------|    |-------|
 |       |    |       |    |       |
 |   O   |    |   O---|    |   O   |
 |   |   |    |       |    |   |   |
 |-------|    |-------|    |-------|
     G            H            I

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

移动方法  受影响的时钟 
1        ABDE
2        ABC
3        BCEF
4        ADG
5        BDEFH
6        CFI
7        DEGH
8        GHI
9        EFHI

例如,如下即为一种变换方案。

9 9 12          9 12 12       9 12 12        12 12 12         12 12 12
6 6 6   5 ->    9  9  9   8-> 9  9  9   4 -> 12  9  9   9 ->  12 12 12
6 3 6           6  6  6       9  9  9        12  9  9         12 12 12
[但这可能不是正确的方法,请看下面]

【输入格式】

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

【输出格式】

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

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

【输入样例】

9 9 12
6 6 6
6 3 6 

【输出样例】

4 5 8 9