crypt1
【描述】
下面是一个乘法竖式,如果用我们给定的那n个数字来取代*,可以使式子成立的话,我们就叫这个式子牛式。
* * *
x * *
----------
* * *
* * *
----------
* * * *
数字只能取代*,当然第一位不能为0,况且给定的数字里不包括0。
注意一下在美国的学校中教的“部分乘积”,第一部分乘积是第二个数的个位和第一个数的积,第二部分乘积是第二个数的十位和第一个数的乘积.
写一个程序找出所有的牛式。
【INPUT FORMAT:】
(file crypt1.in)
Line 1:数字的个数n。
Line 2:N个用空格分开的数字(每个数字都属于{1,2,3,4,5,6,7,8,9})。
【OUTPUT FORMAT:】
(file crypt1.out)
共一行,一个数字。表示牛式的总数。
【SAMPLE INPUT】
5
2 3 4 6 8
【SAMPLE OUTPUT】
1
【样例分析】
2 2 2
x 2 2
----------
4 4 4
4 4 4
----------
4 8 8 4
注意:结果只能为4位
Solution
两个数的一个固定了3位一个固定了2位。
因此直接枚举即可。计算两个分部乘积判断是否是四位数是否符合要求是否由给定数字组成。
复杂度是
O(900×90)=O(1)
。
packrec(POJ 1169)
【描述】
给定4个矩形块,找出一个最小的封闭矩形将这4个矩形块放入,但不得相互重叠。所谓最小矩形指该矩形面积最小。
4个矩形块中任一个矩形的边都与封闭矩形的边相平行,图1显示出了铺放4个矩形块的6种方案。这6种方案是唯一可能的基本铺放方案。因为其它方案能由基本方案通过旋转和镜像反射得到。
可能存在满足条件且有着同样面积的各种不同的封闭矩形,你应该输出所有这些封闭矩形的边长。
【INPUT FORMAT:】
(file packrec.in)
共有4行。每一行用两个正整数来表示一个给定的矩形块的两个边长。矩形块的每条边的边长范围最小是1,最大是50。
【OUTPUT FORMAT:】
(file packrec.out)
总行数为解的总数加1。第一行是一个整数,代表封闭矩形的最小面积(子任务A)。接下来的每一行都表示一个解,由数P和数Q来表示,并且P≤Q(子任务B)。这些行必须根据P的大小按升序排列,P小的行在前,大的在后。且所有行都应是不同的。
【SAMPLE INPUT】
1 2
2 3
3 4
4 5
【SAMPLE OUTPUT】
40
4 10
5 8
Solution
说多了都是泪
Stamps
3s
【描述】
已知一个 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K —— 表示信封上能够贴 K 张邮票。计算从 1 到 M 的最大连续可贴出的邮资。
例如,假设有 1 分和 3 分的邮票;你最多可以贴 5 张邮票。很容易贴出 1 到 5 分的邮资(用 1 分邮票贴就行了),接下来的邮资也不难:
6 = 3 + 3
7 = 3 + 3 + 1
8 = 3 + 3 + 1 + 1
9 = 3 + 3 + 3
10 = 3 + 3 + 3 + 1
11 = 3 + 3 + 3 + 1 + 1
12 = 3 + 3 + 3 + 3
13 = 3 + 3 + 3 + 3 + 1
然而,使用 5 枚 1 分或者 3 分的邮票根本不可能贴出 14 分的邮资。因此,对于这两种邮票的集合和上限 K=5,答案是 M=13。
小提示:因为14贴不出来,所以最高上限是13而不是15
【INPUT FORMAT:】
(file stamps.in)
第 1 行: 两个整数,K 和 N。K(1 <= K <= 200)是可用的邮票总数。N(1 <= N <= 50)是邮票面值的数量。
第 2 行 .. 文件末: N 个整数,每行 15 个,列出所有的 N 个邮票的面值,每张邮票的面值不超过 10000。
【OUTPUT FORMAT:】
(file stamps.out)
第 1 行:一个整数,从 1 分开始连续的可用集合中不多于 K 张邮票贴出的邮资数。
【SAMPLE INPUT】
5 2
1 3
【SAMPLE OUTPUT】
13
Solution
BFS即可。
队列的话用STL的queue或者循环队列。
否则状态数会炸。。
Knight
【题目描述】
给你一个n*n的棋盘,现在有2个二次元的骑士想在棋盘上约会。2个骑士一开始在各自的位置,然后他们可以走“日”字,但是不能走出棋盘。
比如上图就是能走到的8个格子。每次只有一个骑士可以移动,他们想知道最少多少步移动2人可以见面。
【输入格式】
第一行TEST,表示多组数据的组数(常数大小)
对于每一组数据,共3行,第一行为n(4<=n<=300),二三行为2个骑士的位置
【输出格式】
每组数据输出一个数,表示最小移动次数(不用动就可以见面或者无法见面输出0)
【输入样例】
3
8
0 0
7 0
100
0 0
30 50
10
1 1
1 1
【输出样例】
5
28
0
Solution
双向广度搜索