USACO The Clocks 一种O(1)的算法

[USACO 1.4.2] The Clocks [题目描述] The Clocks 时钟 IOI'94 - Day 2 考虑将如此安排在一个 3 x3 行列中的九个时钟: 目标要找一个最小的移动顺序次将所有的指针指向12点。 下面原表格列出了9种不同的旋转指针的方法,每一种方法都叫一次移动。 选择1到9号移动方法,将会使在表格中对应的时钟的指针顺时针旋转90度。 移动方法 受影响的时钟 阅读详情

The Clocks
IOI'94 - Day 2
Consider nine clocks arranged in a 3x3 array thusly:
|-------|    |-------|    |-------|    
|       |    |       |    |   |   |    
|---O   |    |---O   |    |   O   |          
|       |    |       |    |       |           
|-------|    |-------|    |-------|    
    A            B            C

|-------|    |-------|    |-------|
|       |    |       |    |       |
|   O   |    |   O   |    |   O   |
|   |   |    |   |   |    |   |   |
|-------|    |-------|    |-------|
    D            E            F

|-------|    |-------|    |-------|
|       |    |       |    |       |
|   O   |    |   O---|    |   O   |
|   |   |    |       |    |   |   |
|-------|    |-------|    |-------|
    G            H            I

The goal is to find a minimal sequence of moves to return all the dials to 12 o'clock. Nine different ways to turn the dials on the clocks are supplied via a table below; each way is called a move. Select for each move a number 1 through 9 which will cause the dials of the affected clocks (see next table) to be turned 90 degrees clockwise.

MoveAffected clocks
1ABDE
2ABC
3BCEF
4ADG
5BDEFH
6CFI
7DEGH
8GHI
9EFHI

Example

Each number represents a time according to following table:
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 

[But this might or might not be the `correct' answer; see below.]

PROGRAM NAME: clocks

INPUT FORMAT

Lines 1-3:Three lines of three space-separated numbers; each number represents the start time of one clock, 3, 6, 9, or 12. The ordering of the numbers corresponds to the first example above.

SAMPLE INPUT (file clocks.in)

9 9 12
6 6 6
6 3 6

OUTPUT FORMAT

A single line that contains a space separated list of the shortest sequence of moves (designated by numbers) which returns all the clocks to 12:00. If there is more than one solution, print the one which gives the lowest number when the moves are concatenated (e.g., 5 2 4 6 < 9 3 1 1).

SAMPLE OUTPUT (file clocks.out)

4 5 8 9

思路:9种操作中,没有一种是对单独一个钟进行旋转的,那么能否找到一种操作组合,这一操作组合使一个钟顺时针旋转90度?

设我们对操作i使用了a[i]次(0<=a[i]<=3,因为当a[i]=4时的效果和a[i]=0时一样),那么要只让时钟A顺时针旋转90度的话,由表知,有(a[1]+a[2]+a[4])%4=1,(a[1]+a[2]+a[3]+a[5])%4=0,...使用如下暴力代码可以得到全部的操作次数:

#include<cstdio>
#include<cstring>
#define For(x) for (a[x] = 0; a[x] < 4; ++a[x])
const char C[9][9] =
{
	"ABDE",
	"ABC",
	"BCEF",
	"ADG",
	"BDEFH",
	"CFI",
	"DEGH",
	"GHI",
	"EFHI"
};

bool clocks[9][9];
int a[9], cnt[9];

int main()
{
	puts("const int A[9][9] =\n{");
	int i, j, choose;
	for (i = 0; i < 9; ++i)
		for (j = 0; C[i][j]; ++j)
			clocks[i][C[i][j] - 'A'] = true;
	for (choose = 0; choose < 9; ++choose)
	{
		For(0)For(1)For(2)For(3)For(4)For(5)For(6)For(7)For(8)
		{
			memset(cnt, 0, sizeof(cnt));
			for (i = 0; i < 9; ++i)
				for (j = 0; j < 9; ++j)
					if (clocks[j][i]) cnt[i] += a[j];
			for (i = 0; i < 9; ++i)
			{
				if (i == choose)
				{
					if ((cnt[i] & 3) != 1) break;///x&3=x%4
				}
				else
				{
					if (cnt[i] & 3) break;
				}
			}
			if (i == 9)
			{
				putchar('{');
				for (i = 0; i < 8; ++i) printf("%d,", a[i]);
				printf("%d}%s", a[8], (choose == 8 ? "\n" : ",\n"));
				goto L;
			}
		}
L:
		;
	}
	puts("};");
	return 0;
}

随后使用之:

/*
ID: synapse cheng
PROG: clocks
LANG: C++
*/

/*
Executing...
   Test 1: TEST OK [0.000 secs, 3376 KB]
   Test 2: TEST OK [0.000 secs, 3376 KB]
   Test 3: TEST OK [0.000 secs, 3376 KB]
   Test 4: TEST OK [0.000 secs, 3376 KB]
   Test 5: TEST OK [0.000 secs, 3376 KB]
   Test 6: TEST OK [0.000 secs, 3376 KB]
   Test 7: TEST OK [0.000 secs, 3376 KB]
   Test 8: TEST OK [0.000 secs, 3376 KB]
   Test 9: TEST OK [0.000 secs, 3376 KB]

All tests OK.
*/

#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;
}

usaco时钟程序 USACO编程题中的一个,由一般方法编程,容易看懂,仅供交流。 立即下载

相关推荐

数字图像处理第九章笔记

目录一、腐蚀与膨胀1、腐蚀2、膨胀3、对偶性4、开操作与闭操作二、一些基本的形态学算法1、边界提取2、孔洞填充3、连通分量提取4、凸壳5、细化6、粗化7、骨架8、形态学重建三、灰度级形态学1、腐蚀和膨胀2、开运算和闭运算3、灰度级形态学算法 一、腐蚀与膨胀 1、腐蚀 腐蚀可以去除图像的某些部分。 2、膨胀 膨胀可以连接裂缝。 3、对偶性 膨胀和腐蚀彼此关于集合求补运算和反射运算是对偶的 4、开操作与闭操作 开操作:B对A先腐蚀,再进行膨胀 可以平滑物体轮廓,断开较窄的狭颈并消除较细的突出物。 闭操作

方悔读书迟 1375

USACO1.4 The Clocks 解题报告

第一次用BFS,以前只是会用递归的DFS搜索,这次对照着书,硬生生的把BFS打出来了,终于明白什么叫做复杂度了。 先上程序(很明显这题的BFS会很痛苦,因为第一层9个,第二层9×9,第三层9×9×9,大约到了8层的时候,无论是什么样的队列,还是堆栈都不崩溃了) 很悲惨,到了第三组数据的时候完全不可能通过了,队列溢出了。实在无法达到35亿的储存效果。希望和我一样遇到这个问题的小白注意一下子。

Panda_Ming 574

GEO芯片数据下载和探针ID转换(保姆级教程)

R语言安装、GEO芯片数据下载、探针ID转换

qq_43138237的博客 3万+

section 1.4.2 The clocks

看着满眼的for 跪了,留作纪念吧 /* ID: forthee1 PROG: clocks LANG: C++ */ #include <fstream> using namespace std; int m1[3][3] = {{3,3,0},{3,3,0},{0,0,0}}; int m2[3][3] = {{3,3,3},{0,0,0},{0,0,0}};...

weixin_30307921的博客 190

STM32实战篇:使用USART发送/接收数据

在发送字符时也可以直接使用其对应的ASCLL码,例如: USART_SendData(USART1, 0x61);

qq_74114817的博客 596

ZLMediaKit源码分析(二)推流创建

ZLMediaKit推流结构体创建是在RtspSession::onRecv()之后。如何触发onRecv()请参考上一篇文章这里不在赘述。

cliffordl的专栏 5075

[USACO] The Clocks [位操作 BFS]

思路: 位操作+广搜。 1到9个时钟,每个时钟状态用两位表示 ,共18位。即每个状态用一个int表示即可。 然后直接广搜,每个状态都是一个int型,每次某状态到达用一个hash表记录。 一次AC。 位操作写得很蛋疼,事后查了一下网上报告,好像没这么做的,就记录一下把。 /* ID:wuyanyi1 PROG:clocks LANG:C++ */ #include #inclu

Aszxqw 1129

原创_新魔百和CM201-1鸿蒙架构当贝乐家语音安卓9线刷固件包刷机教程可救砖rom刷机包

不用担心变砖,因为系统内核会自动判断分区及CPU等级,假设你CPU是高于S905L3的那么。7.adb功能支持,系统增加开机自启功能,添加老人桌面模式,默认为年轻化桌面;所以我发的这个固件可适用于_cw_ys_zg_zn代工上生产的盒子进行刷机;5.CPU及GPU算法更改,当观看4K片源时,AI智能会自动优化系统后台进程,正如我所说,本固件是采用安卓公版镜像制作而成,那么代工厂也是使用的公版镜像,1.移植鸿蒙架构代码,完美融合安卓系统,增加系统的稳定性;刷机的时候 他会自动短接链接,所以不存在变砖。

a138088150的博客 1万+

美国血统(模板 二叉树)

描述 农夫约翰非常认真地对待他的奶牛们的血统。然而他不是一个真正优秀的记帐员。他把他的奶牛们的家谱作成二叉树,并且把二叉树以更线性 的”树的中序遍历“和”树的前序遍历“的符号加以记录而不是用图形的方法。 你的任务是在被给予奶牛家谱的”树中序遍历“和”树前序遍历“的符号后,创建奶牛家谱的”树的后序遍历“的符号。每一头奶牛的姓名被 译为一个唯一的字母。(你可能已经知道你可以在知道树的两种遍历以后可以经常地重建这棵树。)显然,这里的树不会有多余26个的顶点。 这是在样例输入和样例输出中的树的图形表达方式:

无知的渣渣的博客 685

[QMT和ptrade量化交易小白入门]-112、小市值热点概念交易策略,回测5年20倍

本专栏主要是介绍QMT和ptrade的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写200篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 1081

RagFlow专题三、RagFlow 关键技术(向量数据库、文档分块、Prompt 设计与召回排序优化)

FAISS 是由 Meta(Facebook)开源的高效向量检索库,适用于大规模向量搜索任务。,并了解了如何通过 RagFlow 机制优化信息检索和生成质量。(FAISS、Milvus、ES)用于高效存储和检索语义向量。提高 LLM 生成效果,增强 RagFlow 任务质量。(分块)策略,将文档拆分成更小的片段,提高检索效率。提高检索精准度,避免文本过长导致信息丢失。提升检索结果的相关性,提高生成质量。当多个检索结果被返回时,我们需要一个。在前一篇文章中,我们详细探讨了。在 RagFlow 任务中,

xiaoqi270620903的专栏 3041

The Clocks

题目大意 现有9个钟,有以下移动方案。注:一次移动会移动15分钟。 移动方法 受影响的时钟 1 ABDE 2 ABC 3 BCEF 4 ADG 5 BDEFH 6 CFI 7 DEGH 8 GHI 9 EFHI 给你9个钟的时间,是指向3/6/9/12点钟方向

SportRiver的博客 1480

我用 GPT-5.5 十分钟搞定一篇文献综述!附全流程指南

每一个框架中提出的逻辑链接,都必须至少有一篇提供文本中的文献作为支撑、严格禁止虚构变量、逻辑关系或研究结果、如果某些变量或关系在文本中未提及,必须明确声明“在提供的文本中未找到相关信息”、引用格式必须严格遵循原文提供的“作者/年份”格式,例如:[Smith, 2022]。各位同仁好,我是七哥。扫描提供的文献摘要,识别存在冲突的结果或理论、分析这些文献之间的差异,并总结可能导致差异的原因、输出一个结构化的学术争论段落,清楚呈现文献间的分歧和潜在影响因素、对于缺失或不明确的信息,按约束条件如实标注。

智能AI让学术科研更容易 370

usaco 1.5.2 The Clocks

麻麻说,如果研究了三天还是不会做的话,就算了吧。恩。 The Clocks IOI'94 - Day 2 Consider nine clocks arranged in a 3x3 array thusly: |-------| |-------| |-------| | | | | | | | |---O

shshwdr的专栏 1315

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

USACO Section 1.4 The Clocks (clocks)

bfs+剪枝。 如果某个钟表状态在之前出现过那么就不需要再加入到队列中了。由于不会哈希所以开了个9维数组判重。 之前因为路径数组和clock数组合并在一起写了,结果一直内存超限。 这个题因为clock里面有个长度是10的数组所以在用路径的时候这个数组是没用的,所以这俩东西应该分开写。 总之这个WA,TLE,RE了N次。 /* ID:kkkwjx1 LANG:C++ TASK:clocks

Fighting 828

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

USACO 1.4 The Clocks

虽然很多方法都一个意思……但是我因为算错2^27,认为爆int就没用位运算……然后傻呼呼的居然在压十进制位在做BFS…… 在USACO上TLE,但是其他OJ一般卡时内能过…… 9个数字分解为0123,然后用一个9位数保存…… 大量时间浪费在拆解数字上…… /* TASK:clocks LANG:C++ */ #include #include #include #include

ACMer不要报考高校代码为13627的移通学院! 541

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

USACO The Clocks 所谓的广搜?

Problem Address:USACO 1.4 【前言】 这道题我一共提交了19次,终于在第19次的时候过掉了。 那个内流满面啊! 一直被不知名的错误羁绊着。 Execution error: Your program had this runtime error: Bad syscall #32000175 (RT_SIGPROCMASK) [emai

Human_CK的专栏 1596

USACO/clocks

http://www.nocow.cn/index.php/Translate:USACO/clocks BFS注意剪枝。 计算好数组类型和大小。 /* LANG: C++ PROG: clocks */ #include #include #include #include #include #include #include #include #include

Chromer_cn的专栏 949

【宽搜】The Clocks 时钟 (Usaco_Training 1.4)

The ClocksIOI'94 - Day 2 Consider nine clocks arranged in a 3x3 array thusly: |-------| |-------| |-------| | | | | | | | |---O | |---O | | O ...

diying4157的博客 356

USACO The Clocks

操作间没有次序关系,同一个操作最多重复3次。。。 可以直接暴力。。。 The Clocks IOI'94 - Day 2 Consider nine clocks arranged in a 3x3 array thusly: |-------| |-------| |-------| | | | | | | |

码代码的猿猿 1408

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

https://jzoj.net/junior/#contest/show/1232/11(下文题目描述还是原地址清楚) 考虑将如此安排在一个 3 x3 行列中的九个时钟: |——-| |——-| |——-|| | | | | | ||—O | |—O | | O || | | |

RainbowCrown_CGH's blog 1824

[USACO1.4] [IOI1994]时钟 The Clocks

每个函数都保持在20行以内,出锅的概率大大降低,编译样例无debug一遍过,这里不是说代码能力有多好,而是说,使用这个写法,会让自己思路更加清晰,一段时间内只关注一段逻辑,很多人代码debug不出来不是因为代码能力弱,反而是因为代码能力太强,像一个。这样的代码在自己脑子十分清晰的时候是可以码的飞起的,不过可能只有两天内的自己才能看懂,可能过了两天自己回头看的时候惊呼“我靠,什么shit”。bfs肯定是那个bfs,关键是状态的表示,可以用一个int来表示状态,这样转移的时候比较麻烦,也可以用。

NDCSID的博客 848

Usaco 1.4.2 时钟(The Clocks)

题目:  时钟 来源:  Usaco1.4.2 题目大意:  给定9个时钟,及转动方法,求一个最小的转动方案 移动方法  受影响的时钟 1        ABDE 2        ABC 3

慢慢前行,跨越预言 929

USACO The clocks, ariprog

先八卦几句。我们常说算法设计的目的是为了达到获得最优时空开销,嗯,直接点看,是这样的。不管现代计算机CPU有多快,内存可以大到哪里去,资源总归是有限的,物理学里面叫做什么熵熵熵的,俺大学专门挂科,也记不清了。既然资源有限,那么就一定得拼了老命滴想法子来在有限的资源上构建最佳的上层建筑,所谓最佳,就是前述所言之:最优时空开销。为了达到这个目的,就我目前浅薄的知识范围与领悟,一般有三种办法:l  从软件工程的角度进行系统设计;l  从数学的角度进行算法设计;l  从计算机组成原理的角度进行优化处理。每一项都是学

左手为你画情 1147

USACO section 1.4.2 The Clocks

USACO section 1.4.2 The Clocks 1. 这道题有好多种解法,看NOCOW,用枚举,DFS,BFS都能求解。我看到这个题的时候,连最基本的枚举怎么做都想不出来,差距呐。。。; 2. 我挑选了解题报告中代码最短的读懂然后写出来了: /...

dayong9372的博客 284
上一篇: Manacher 算法详解:O(n) 复杂度求最长回文子串
下一篇: SPOJ 345 Mixtures (区间DP&前缀数组)
synapse7
博客等级 码龄14年 432粉丝 701原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值