09 2012 档案
摘要:Staginner剽悍地抽象出了数学模型并推出了各项数据,万事俱备只欠东风,可惜最后一步推错了,比赛时候这题没过。。插板法组合数对应了不同icon的分配方案。每种分配方案又对应了很多种摆放方案。假设有s种分配方案,x[1]~x[s]分别对应了每种分配方案的摆放方案,可通过DP求得∑x 。也可求得∑(x^2),∑(x^3)...设M[p] =∑(x^p)。设S[p] = ∑x[i1]*x[i2]*x[i3]...*x[ip],i1~ip为互不相同的1~s的序列。题目所给棋盘是N行,我们求的就是S[N] * N!——————————分割线——————————以上是Staginner得到的数据与结论
阅读全文
摘要:去年省赛教练会汝哥讲过一个结论,至多两个数字就可以拼出任何数的倍数。证明可以这样,AAAA...AAA若干个A,模X,能得到的余数种类是有限的,至多是1~X-1,那么总会有n个A和m个A这两个数模X余数相等,他们相减就得到了X的倍数,而相减得到的数就是两个数组成的。这样就可以对一个数先枚举一下,对两个数再枚举一下,找组成的那个数,可以BFS。一个数用来拼数字的时候超过一定长度就可以停下了,一步步模会出现循环。枚举得到的答案比较一下更新,最后输出。比赛时候思维乱,代码不太工整,见谅。 1 #include<stdio.h> 2 #include<string.h> 3 #
阅读全文
摘要:求通项和斐波那契数列的方法一样,矩阵快速幂。这道题麻烦在套了三层。但其实取模这种操作肯定会出现循环的,可以先本地暴出循环节,1000000007对应的循环节是222222224,222222224对应的循环节是183120。最外层的结果是对1000000007取模,它的内层对222222224取模,可以得到相等的答案,那么222222224的内层对183120取模,也能得到相等的答案,这样就是分别对三个模数做矩阵快速幂,内层得到的结果返回给外层作为指数。 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<str
阅读全文
摘要:不知道这算不算个神题了,AC的时候只有我和汝哥两人过这题……想了一天,调了一天,竟然因为三角剖分时就差了一句叉积判断相邻边的凹凸性WA了好几天……1、三角剖分:所给多面体是非凸的,难以处理,剖分成一个个三棱柱就都是凸多面体了。最后才开始写陌生的三角剖分的,已经写+调了二百多行疲惫不堪的时候看到一计算几何书上好复杂的nlogn算法,竟然还要再搞平衡树,简直要崩溃。百度、谷歌都不给力了,期刊论文看着也晕乎,只好凭着自己的理解来暴力剖分了。读入每个点建立双向链表(单向应该也没关系,灵活性差点),然后开始循环剖分,对每个相邻边,先判断凹凸性,然后枚举其他所有边判是否和如图所示虚线交叉,通过判断后可以确
阅读全文
摘要:首先和传统扫描线的方法一样先把每个圆左右侧x坐标离散出来排个序标记好进出,然后开始扫描。如果全是矩形,就很好处理。圆就麻烦在没有像矩形那样可以离散化的规则上下界,便无法用预处理好的离散编号来构建线段树。但是我们可以注意到题目中说了圆与圆不会相切或相交,那么对于扫描线扫描的过程中从上到下穿过各个圆的顺序是不会变的,所以可以利用二叉树,把扫描线经过的“边”有序地插入(这里用set就很方便高效了),对于圆来说,这个边就是与上半圆交点纵坐标和与下半圆交点纵坐标。由于扫描线位置的变化,插入时用来比较的代表“边”的纵坐标也会变化,但是前面说过,扫描线穿过圆的顺序是不会变的,所以新的“边”依然会插入到正确的
阅读全文
摘要:祝贺swm8023刷HDU-Steps登顶+突破新Section,14.2不是传说中的高级计算几何,而是数学~~
阅读全文
摘要:如图,横坐标为时间轴,纵坐标为相对起点的位移,斜率为速度。设C为起点发出的包,发出时间为1,速度为1~2。设D为终点发出的包,发出时间为2,速度为1~2。A、B为探测器发出时间范围2~5,速度为4。由图可看出,发包的时间-位移相叠的范围为可能全部抓包的范围,称有效范围。在探测器的时间-位移范围内的有效范围/探测器时间-位移范围即探测器全部抓包的平均工作效率。对所有速度区间、探测器时间-位移区间、起点终点区间 做半平面交,得到凸包面积除以探测器时间-位移区间面积可得解。精度要求挺高的,eps注意一下。 1 #include<stdio.h> 2 #include<stdlib.
阅读全文
摘要:如上图,设A、B为点集中的两个点, 分别以A、B为圆心作单位圆,则相交范围内的任意位置作新的单位圆,都可以同时包含A与B,如圆C,如果把C放在一个其中一个圆A的圆周上,则圆C的圆周会穿过点A。假设已得到题目的一个解圆O,则把得到的圆O通过移动,总可以让圆内的某个点X靠在圆周上,换言之,O也在X所作单位圆的圆周上。由此,可枚举在最终结果的圆周上的点X,目标圆心O在X的圆周上。每枚举一个X作为图中的点A,枚举其他所有点作为点B,可得到C对应点A、B的在A圆周上的一个范围,覆盖次数最多的那个范围就是当X作为点O圆周上的点所能得到的最优解O的范围,这个次数加1(点X)就是对应X的最优解。通过枚举所有X
阅读全文
摘要:以位置为横坐标,速度为纵坐标,则高处的点总会跑到低处的点前面。如图B追上A的时间就是横坐标差除以纵坐标差,也就是说斜率的绝对值越大,追上的越快。那么C就不会比B先追上A,B有机会保持一段时间的第一。同理C会在未来追上B,而保持一段时间第一。由此看来,统计凸包上x最大点和y最大点之间点的个数即得答案。对于多点共线的情况,只计一次,在求凸包的时候就可以处理掉了。 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<math.h> 5 #include<
阅读全文
摘要:以圆心为中心将简单多边形划分为n个矢量三角形,对每个三角形与圆求交,根据有向边判断相交面积正负,最后相加取绝对值。一个顶点在圆心的三角形与圆的交需要讨论的情况比较少,容易计算。 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<math.h> 5 #include<algorithm> 6 const int maxn = 111111; 7 const int maxisn = 21; 8 const double eps = 1e-8;
阅读全文
摘要:不需要正规的三角剖分,用求多边形面积的思想,从一点出发连接多边形的边得到很多三角形,三角形有向边方向决定有向面积有正有负,相加得到多边形面积的正值或负值。把两个多边形都分成若干这样的三角形,求每对三角形的交,根据两三角形有向边顺逆时针关系确定相交面积的正负号,最后两多边形面积和减去相交面积。 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<math.h> 5 #include<algorithm> 6 const int maxn = 5
阅读全文
摘要:1、判断多边形有向边顺、逆时针:取最右点p[i],p[i-1]->p[i]与p[i]->p[i+1]成右手关系则为逆时针。2、判断点与简单多边形位置关系:参考文献:王学军,沈连婠,朱绍源等.基于左边的点在简单多边形内的判别算法[J].机械工程师,2006,(2):53-54.给定一个简单多边形,判别点u在多边形G内外的判断算法步骤:Step1:过u作一水平射线;Step2:求出射线与简单多边形G的交点;Step3:若交点为0,则u在G外,结束;Step4:若交点数大于0,求出与u点距离最近交点v;Step5:找到交点v所在边的两顶点,记p1为p[i],p2为p[i+1];Step6
阅读全文
摘要:各种点线与圆的关系。1、三角形外接圆:求各边中垂线交点;2、三角形内切圆:定比分点构造等腰三角形求角平分线,求两角平分线交点;3、定点到圆切线:点到圆心斜率加减切线夹角,处理结果的表示范围;4、切直线、过定点的圆:点在线上是两个对称的圆,否则圆在点线确定的双曲线上,利用双曲线性质构造直角梯形,然后利用向量与定比分点求;5、与两相交直线相切的圆:分别将直线朝不同方向平移半径距离求交点;6、两相离圆的公共外切圆:三圆心连线构成三角形,所求圆心做三角形的高,余弦定理+定比分点求出各项数据。特殊情况进行特判求值。 1 #include<stdio.h> 2 #include<stri
阅读全文
摘要:九点圆过 三边中点、三边垂足、三点至垂心线段的中点。九点圆圆心为外心与垂心中点,半径为外心的一半。也许是精度问题,求三边中点三角形外心再求距离算半径就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...
阅读全文

浙公网安备 33010602011771号