当前位置:首页 > 枚举 > 正文
SSOJ1079号码锁[USACO]
1787+

题目大意:已知号码锁有一个预设密码和一个用户设置的密码,由于有容错性,只要输入密码跟预设或设定的足够接近就可以开锁,请问共有多少种开锁密码?

题目描述

农夫约翰的奶牛不停地从他的农场中逃出来,导致了很多损害。为了防止它们再逃出来,他买了一只很大的号码锁以防止奶牛们打开牧场的门。

农夫约翰知道他的奶牛很聪明,所以他希望确保它们不会在简单地试了很多不同的号码组合之后就能轻易开锁。锁上有三个转盘,每个上面有数字1..N (1 <= N <= 100),因为转盘是圆的,所以1和N是相邻的。有两种能开锁的号码组合,一种是农夫约翰设定的,还有一种“预设”号码组合是锁匠设定的。但是,锁有一定的容错性,所以,在每个转盘上的数字都与一个合法的号码组合中相应的数字相距两个位置以内时,锁也会打开。

比如说,如果农夫约翰的号码组合是(1,2,3),预设号码组合是(4,5,6),在转盘被设定为(1,4,5)(因为这和农夫约翰的号码组合足够接近)或(2,4,8)(因为这和预设号码组合足够接近)。注意,(1,5,6)并不会打开锁,因为它与任一号码组合都不够接近。

给出农夫约翰的号码组合和预设号码组合,请计算能够开锁的不同的号码组合的数目。号码是有序的,所以(1,2,3)与(3,2,1)不同。

输入

第一行:整数N。

第二行:三个以空格分隔的整数,为农夫约翰的号码组合。

第三行:三个以空格分隔的整数,为预设号码组合(可能与农夫约翰的号码组合相同)。

输出

第一行:所有不同的能够开锁的号码组合的总数。

样例输入

50
1 2 3
5 6 7

样例输出

249

解题思路

暴力枚举所有可能的密码输入,如果跟用户设定的密码足够接近就累加方案,否则如果跟预设密码足够接近才累加方案。只要有一个足够接近就累加方案,两个都足够接近也只累加一次方案。

足够接近怎么判断?两个数字之差的绝对值不超过2;由于密码锁是圆的,相差接近一圈(+2超过1圈)也是足够接近。

程序实现

About

坚决不Copy代码!

本文标签:,,,,,,

SSOJ1079号码锁[USACO]:等您坐沙发呢!

发表评论

您必须 [ 登录 ] 才能发表留言!