A题:POJ 3277
给你n 个建筑物,在一维的数轴上表示出来,ab表示坐标范围,h表示高度,问他们的正投影面积和是多少,就是去除重复的部分,当时认为拍一下顺序就可以了,但是后来发现没那么简单,后来又想了一种比较简单清晰的做法,就是把数轴上每一个单位都搜一遍,同时看看这一个单位距离时的有建筑物覆盖时最高的那个高度,然后求面积就好,但是数据量太大了,需要用线段树离散化处理……
B题:POJ 3278
一条数轴,给定n,k;然后从n走到k,有两种走法,一种是x->(x+1),或者x->(x-1) ,另一种是x->2*x , 问最少几步,以前看过这个题没敢做,要么DP,要么贪心,要么搜索!
为什么没敢做呢,没明白当时的转移状态,x-2*x而不能从2×x到x,后来仔细一想,这不就是BFS嘛,从x能到x-1,x+1,2*x,先不要急着往其他位置转移,因为这是当前最短的距离,当前是k步,那么下一步是第k+1步,只能从少的往多的地方转移,不能从多的步数往少的步数转移…… 明白了这一点,BFS就出来了……
注意,数组下标越界问题,还有N>K的例子,这是两个小坑!
C题:开关灯问题POJ 3279
给定,m*n的矩阵,有0,1两种状态,每次可以讲一个状态翻转到另一个状态,同时,上下左右的状态也跟着变化,问最少多少步能将状态全部转化成0,同时以矩阵的形式输出,每位上的数字表示该位翻转过多少次,当然被动翻转的不算!
方法是枚举第一行,然后不断更新最优解就好了,要用到位运算……
给以张包含n个数字的纸条,问有多少种方式,将纸条建成两段,使得每段上的和相同!
大水题啊,当时看到没人做以为自己读错题了,郁闷,简单枚举就好了,注意数组不要越界!
给三个点的坐标,坐标都是integer, 问是否是直角三角形或者是amolst 直角三角形,所谓amolst是一定一个点一个单位的距离,并且坐标仍然是整数,使得这三点成为直角三角形; 用到两个知识点,叉积判断三点是否共线,向量的点积判断是否是直角!
F题:
这个小题把自己卡了一下,就是说一条数轴上分成n段,第k段的坐标范围是[(k - 1)m, (k - 1)m + l],
然后某人从0开始跳跃,每次跳d格,然后在那里能停下,不能停在这n段包括边界上; 那么就停在空隙里呗……
注意数据范围:
n, d, m, l (1 ≤ n, d, m, l ≤ 106, l < m)
当时没仔细研究数据范围,以为n不大,直接就枚举跳跃距离并且判断是否某一段内,并且当前段也不断往后更新…… 当然超时…… 后来一直没明白哪里超时,后来仔细一看才知道我枚举的是点的左坐标,一共有最多n段,但是每段有范围不知道,实际上坐标范围很大的,貌似超int了,得用long long^…… 后来改用枚举段数,最多n段就好了,同时判断是不是在某段的间隙,用到整除…… 当前坐标x/m*m……
注意此题有两个坑,就是有时候这些线段之间没有空隙…… 或者有空隙但是跳跃着没有跳跃到空隙里面,怎么办呢? 数轴是无现长的,他可以超越这n段啊……
给一个矩阵,每个都有颜色,改变最少的颜色使其满足这样的要求,相邻的不能是同种颜色,每一行或者每一列最多用两种不同的颜色……
如何操作这些矩阵使其满足要求呢,把满足要求的的矩阵写出来,按照字典顺序…… 注意一共有26种颜色,用26个小写字母表示出来了……
貌似是DP,但是一直不会做 网上唯一找到的解题报告是小日本的:http://d.hatena.ne.jp/kusano_prog/20100618/1276884992