试水训练 6

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,同时以矩阵的形式输出,每位上的数字表示该位翻转过多少次,当然被动翻转的不算!

方法是枚举第一行,然后不断更新最优解就好了,要用到位运算……


D题 CodeForces 18C

给以张包含n个数字的纸条,问有多少种方式,将纸条建成两段,使得每段上的和相同!

大水题啊,当时看到没人做以为自己读错题了,郁闷,简单枚举就好了,注意数组不要越界!


E题 CodeForces 18A

给三个点的坐标,坐标都是integer, 问是否是直角三角形或者是amolst 直角三角形,所谓amolst是一定一个点一个单位的距离,并且坐标仍然是整数,使得这三点成为直角三角形;   用到两个知识点,叉积判断三点是否共线,向量的点积判断是否是直角!


F题:

这个小题把自己卡了一下,就是说一条数轴上分成n段,第k段的坐标范围是[(k - 1)m, (k - 1)m + l],

然后某人从0开始跳跃,每次跳d格,然后在那里能停下,不能停在这n段包括边界上; 那么就停在空隙里呗……

注意数据范围:

 ndml (1 ≤ n, d, m, l ≤ 106, l < m)  

当时没仔细研究数据范围,以为n不大,直接就枚举跳跃距离并且判断是否某一段内,并且当前段也不断往后更新……  当然超时……    后来一直没明白哪里超时,后来仔细一看才知道我枚举的是点的左坐标,一共有最多n段,但是每段有范围不知道,实际上坐标范围很大的,貌似超int了,得用long long^……   后来改用枚举段数,最多n段就好了,同时判断是不是在某段的间隙,用到整除……   当前坐标x/m*m……      

注意此题有两个坑,就是有时候这些线段之间没有空隙……   或者有空隙但是跳跃着没有跳跃到空隙里面,怎么办呢?   数轴是无现长的,他可以超越这n段啊……


G题 CodeForces 18E

给一个矩阵,每个都有颜色,改变最少的颜色使其满足这样的要求,相邻的不能是同种颜色,每一行或者每一列最多用两种不同的颜色……

如何操作这些矩阵使其满足要求呢,把满足要求的的矩阵写出来,按照字典顺序……  注意一共有26种颜色,用26个小写字母表示出来了……

貌似是DP,但是一直不会做 网上唯一找到的解题报告是小日本的:http://d.hatena.ne.jp/kusano_prog/20100618/1276884992  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值