摘要: 各种点线与圆的关系。1、三角形外接圆:求各边中垂线交点;2、三角形内切圆:定比分点构造等腰三角形求角平分线,求两角平分线交点;3、定点到圆切线:点到圆心斜率加减切线夹角,处理结果的表示范围;4、切直线、过定点的圆:点在线上是两个对称的圆,否则圆在点线确定的双曲线上,利用双曲线性质构造直角梯形,然后利用向量与定比分点求;5、与两相交直线相切的圆:分别将直线朝不同方向平移半径距离求交点;6、两相离圆的公共外切圆:三圆心连线构成三角形,所求圆心做三角形的高,余弦定理+定比分点求出各项数据。特殊情况进行特判求值。 1 #include<stdio.h> 2 #include<stri 阅读全文
posted @ 2012-09-03 11:36 CSGrandeur 阅读(473) 评论(0) 推荐(0) 编辑
摘要: 九点圆过 三边中点、三边垂足、三点至垂心线段的中点。九点圆圆心为外心与垂心中点,半径为外心的一半。也许是精度问题,求三边中点三角形外心再求距离算半径就WA了。 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<math.h> 5 struct Point 6 { 7 double x, y; 8 Point(){x = y = 0;} 9 Point(double a, double b)10 {x = a, y = b;}11 Poin... 阅读全文
posted @ 2012-09-02 16:49 CSGrandeur 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 给出两个DFA的状态转换表,判断两个DFA是否相同。需要先处理循环路径,即通过某路径后无法达到AC状态,但可能通过该路径后两个DFA的状态转换不相同,这种情况下两个DFA依然是相同的,所以要把这样的路径封死。从AC状态反向建图,BFS封死上述路径,再从0状态BFS同步对比两DFA状态转换。 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<queue> 5 using namespace std; 6 const int maxn = 2011; 7 阅读全文
posted @ 2012-08-28 01:08 CSGrandeur 阅读(375) 评论(3) 推荐(0) 编辑
摘要: 思想是半平面交+旋转卡壳,关于X轴取一次对称再求包围(0, -10^10)点的部分后再对称回来可以少写点针对性代码。左右的射线单独处理了。 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<algorithm> 5 #include<iostream> 6 #include<math.h> 7 using namespace std; 8 const int maxn = 211111; 9 const double eps = 阅读全文
posted @ 2012-08-27 21:00 CSGrandeur 阅读(380) 评论(0) 推荐(0) 编辑
摘要: 分类讨论的情况不难想,难点在于判断各种垂线垂足是否在线段上。设bl1、bl2为两个线段上公垂线垂足位置的比例值,x为p0的公垂线垂足X坐标,则:x = (p1.x - p0.x) * bl1 + p0.x同理可得其他坐标。公垂线向量与两线段向量点积为0可得两个方程,求得bl1和bl2皆在0~1范围内则公垂线垂足都在线段上。 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 typedef long long LL; 5 const double eps = 1e-8; 6 int 阅读全文
posted @ 2012-08-27 20:55 CSGrandeur 阅读(561) 评论(0) 推荐(0) 编辑
摘要: 造福后人,必须翻译一下这痛苦的描述了。按照AC后的理解来说,题目给出两场比赛编号1~100的队伍名次情况(有些队伍没有出现),每行是并列名次,下一行是前面队伍个数累计的名次,求两场比赛的总排名。对于两场都参加的队伍,两场名次之和较小的排前面。对于只参加一场的队伍,在不冲突的情况下和与其该场同名次的且参加了两场的另一支队伍总排名相同。对于不满足上述的只参加一场的队伍,看是否可以插入一个位置,这个位置前面的队伍都是该场在其前面的队伍,后面的队伍也都是该场在其后面的队伍。多个能插入同位置的队伍,按他们在自己那一场的排名来比较。对于以上条件都不满足的队伍,忽略掉。输出的时候同名次队伍要在一行中按队伍I 阅读全文
posted @ 2012-08-27 20:46 CSGrandeur 阅读(685) 评论(0) 推荐(0) 编辑
摘要: 把每个交点映射为单独的id,map去重。对每个点建立相邻点的链表。枚举点,用相邻点链表找最左点,迭代绕出凸包,枚举圆判凸包与圆相交。 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<math.h> 5 #include<vector> 6 #include<algorithm> 7 #include<iostream> 8 #include<map> 9 using namespace std; 10 阅读全文
posted @ 2012-08-27 20:44 CSGrandeur 阅读(531) 评论(0) 推荐(0) 编辑
摘要: 被这道题玩死了要。。。对每个圆枚举得到和其他圆切线斜率,两个切线之间的斜率范围是可以经过的。得到的许多斜率范围可以转化为区间覆盖,nlogn排序得解,总复杂度O(n^2logn)。要特别处理圆相交、包含的情况。切线的斜率范围,是按-pi~pi算的,算晕了很久。。然后就是恐怖的TLE,最后发现交C++TLE,交G++就过了,额滴个神,累死了,调一晚上。。还有,这题用sort比用qsort快了5s。。。 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<math 阅读全文
posted @ 2012-08-27 20:42 CSGrandeur 阅读(653) 评论(0) 推荐(0) 编辑
摘要: A:求逆元吓唬人的,枚举一下,防超longlong即可。B:处理RankList认真模拟。C:开机贪心花时间长的机器。D:装箱问题2DFS会比较繁琐,其实是个三维的并查集,记录节点与父节点坐标差。E:单行道正向建0边,反向建1边,做最短路。F:重启区间DP。可以发现,每次重启的机器一定是当前两端机器的其中一个。G:维护序列线段树。记录全0区间,可防止更新到底层。H:跳跳BFS,遇到可跳数字,将所有相同数字入队。 阅读全文
posted @ 2012-08-27 20:40 CSGrandeur 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 2010那些事2010年是中南ACM有史以来最辉煌的一年,省赛的冠军队,差一道题Final的福州赛区,伴随着07级一代大神崛起与消失,和我们08级这一代默默无闻的成长。大一没人告诉我ACM是什么,大二参加校赛0题收场,还把组队来帮忙翻译的女生急哭了。2010暑期集训,也算是有尹zw大哥的帮忙才算是进了集训队。那个时候也没人告诉我该怎么入门,什么是EOF,什么是__int64。或许当时要是能百度到刘汝佳大神的《算法竞赛入门经典》(白书),历史也会不一样吧。做了一个月坑爹的《程序设计导引及在线实践》,集训结束了还不晓得二叉树是什么。自动化人的纠结啊,没有数据结构课也没有算法课。省赛没有机会,区域赛 阅读全文
posted @ 2012-08-27 20:39 CSGrandeur 阅读(1495) 评论(4) 推荐(2) 编辑