没有学特定的姿势
做了第二期的一些普通题
发现了自己很容易犯的一些错误
HDU 3264
给你一些互不相交,互不内含的圆,寻找一个最小的半径,使得在某点圆心处以该半径作圆时可以覆盖每个圆至少一半的面积
一看就是二分加两圆的面积交了,但是很智障的是,我当时并没有直接去求交集面积,而是额外去求了圆的交点,并且是求了两个弓形的面积之和
这样讨论起来就麻烦了,圆的优弧情况是对应扇形加上三角形,劣弧是减去,判断优弧劣弧的条件是一方半径平方大于另一方半径加上圆心距平方
不过还是写过了= = 当是敲了一个圆的交点的板子吧
求圆的交点是求出圆心连线 和两圆之差得到的直线的交点,可以知道圆的的交点到至直线交点的距离,就可以求了
poj 2546
这个才是求圆交面积= =
求圆交面积是两个扇形的面积减去两个大三角面积,不用到弓形。
由于边的关系确定,角度可以从余弦定理算出。。。不需要求交
asin返回的是-pi/2 ~ pi/2 而acos是0~ pi atan2是 (-pi,pi]
UVALive 3000
在线段上种树
若干条线段 线段交点的25m范围内不允许种树 两棵树的间隔要大于等于50m
枚举每条线段,求所有线段和他的交点,排个序得到若干区间,每个区间统计答案就行了
= =但是我WA了不知道多少炮
最后才发现是自己在判断交点是否在线段上的问题
一般有两种方法:
1)点和线段两端点的叉积为0,并且点和两端点的点积小于等于0
2)点到直线两端的距离之和等于线段长度
。。。我用的第一种,但是的精度貌似炸了
以后如果求线段交点,最稳的是先叉积用判断线段相交,再求直线交点。。。而不是先求再判断
UVALive 4676
给你两个三角形和他们的速度 问他们最早什么时候相交
很直观的想法是固定一个,让另一个动
判断是否会相交,就是运动三角形的三个点运动得到的射线包含了另一个三角形的一部分
由于判断点是否在一组平行线之间更简单,所以可以做两次
求时间,可以直到最早发生的相交一定是一个点和一个点或者线段相交,所以也需要枚举两次,让哪个动
求射线和线段交点,射线的话可以先求,然后再判断和运动方向判断
一个trick是合成速度为0的时候直接判断初始的时候是否有相交
写的时候发现之前的一个错误,判断两线段是否相交的时候,前面的四条判断语句并非没有用(在非规范相交的时候
有一种情况就是 两线段共线但是并不相交 必须先用判断语句判掉
hdu 3272
给你三个点C,D,H要求你找一条路径从H出发,需要经过C,D,X轴,Y轴(没顺序)最后回到H,路径最短
刚开始很naive的想法是把 C,D的三个对称点加上他们自己枚举一下,固定H,只要总路径既经过X又经过Y就更新答案
但是有错误到达像点的含义是经过一个轴到达实际点,如果像点和其他实际点同侧显然会出现问题,而且两个像点之间的距离是无意义的
看了别人的题解 找到一种简洁的写法
路径是由三条边组成的,边需要跨x或者跨y或者跨原点
我们枚举一条边,如果跨越原点其他两边就不用变了;
或者枚举两条边,一条跨x,一条跨y。
如果本身已经跨越就直接计算距离,否则把同侧的部分对称过去
注意边的长度是像点到实际点,不会有像点到像点的边
明天打算继续做部分题