枚D
题意Q给定两个二l坐标上的点(x1, y1)?/span>(x2, y2)Q坐标范围ؓ(f)[-106, 106]。求从一个点(x1, y1)?/span>(x2, y2)的直U\径上l过的第N个方格的左下角坐标,无解输出no solution?/span>
?
题解Q首先,如果两个点的x坐标相同或?/span>y坐标相同Q则直接无解Q否则将(x1, y1)?/span>(x2, y2)一起做相应的^U,使得(x1, y1)?/span>(0, 0)重合Q方便计?/span>
如果x1 < x2Q枚?/span>x坐标属于(x1, x2]Q对于每个单位ؓ(f)1的区?/span>[x, x+1]Ҏ(gu)计算?/span>y方向上有多少个方|l计出第n个方|如果x1 > x2Q枚?/span>x坐标属于(x2, x1]Q用同样的方法进行计?br />
151 Construct a triangle
解析几何
题意Q给定三角Ş的两条边AB = c?/span> AC = b ?/span> 一条中U?/span> AM = m 的长度,求一个满x件的三角形的坐标?/span>
题解Q由于三角Ş的坐标可以随意取Q所以ؓ(f)了简化问题,可以?/span>A点定在坐标原点,B点定?/span>x轴正方向Q?/span>C则在W一象限或者第二象限;
假设A在原?/span>(0, 0)
B?/span>x+轴上Q则?/span>B点坐?/span>(c, 0)
假设C点坐标ؓ(f)(x, y), 中线坐标?/span> (B + C) / 2Q即 ( (x+c)/2, y/2 )
已知AM距离m ?/span>AC距离bQ则有:(x)
x2 + y2 = b2 (1)
((x+c)/2)2 + (y/2)2 = m2 (2)
合ƈ(1) (2)Q则?/span>
-2cx - c2 = b2 - 4 * m2 (3)
x = (4*m2 -b2 - c2)/2/c; (4)
y2 = b2 - x2; (5)
Ҏ(gu)(5)Q可以推?/span> y2 = b2 - x2 = b2 - ((4*m2 -b2 - c2)/2/c ) 2 =>[ (b+c) 2 - (2m)2 ] * [ - (b-c)2 + (2m)2 ] > 0
b+c > 2m q且 2m > fabs(b-c)?/span>y才有?/span>Q?/font>所以当 2*m > (b+c) 或?/span>2*m < fabs(b-c) 为无解的情况?/span>
而我们假?/span>C在第一象限或者第二象限,所?/span>y>0Q于?/span>(x, y)可通过(4) (5)求得?/span>
?/span>2
152 Making round
贪心
题意Q给?/span>N(N <= 10000)个数Q求每个数在所有数中所占百分比Q要求输出的C和ؓ(f)100Q每个数可以q行上下取整。如Q给定三个数3 3 3Q那么输Zؓ(f) 34 33 33?/span>34为向上取整的l果Q?/span>33为向下取整的l果?/span>
题解Q?/span>
1Q首先求得所有数之和SQ将每个?/span>a[i]除上S得到?/span>B[i]和余?/span>M[i]?/span>
2Q如果余Cؓ(f)0表示为整除,不能q行上下取整?/span>如果余数不ؓ(f)0Q说明它?/span> +1 或?/span> +0 的机?x)?/span> Q因为题目说可以上取_也可以下取整Q?/span>
3) 记录下所有余C为零的个?/span>T?/span>
4Q将所有数的商之和Sum{B[i]} ?/span> 余数不ؓ(f)零的数的个数T 相加Q如果小?/span>100Q则表明必定无解?/span>否则扫描数组Q将 X = 100-Sum{B[i]}-T 的值分z每个不能整除的数卛_Q每个数只可分派1Q?/span>
153 Playing with matches
博弈
题意Q给?/span>N根火?/span>(N <= 109)Q每ơ可以从q些火柴中取1,P1,P2,...,Pm (2<=Pi<=9, 0<=m<=8)根,两h分别轮次q行拑֏Qƈ且L按照最优策略去取,最后取完火柴的Zؓ(f)输的人,问当前状态是否是一个必胜状态?/span>
题解Q经典博弈,对于l定状?/span>XQ?/span>
1) 如果按照所有方式取Q最后都只能让对手到辑ֿ胜状态,那么X为必败状态;
2) 如果对于某种取法Q可以让Ҏ(gu)辑ֈ必|状态,那么X为必胜状态;
3) 昄Q?/span>0为必胜态,1为必败态,2为必胜态?/span>
Ҏ(gu)以上的性质Q可以通过递推Q将火柴Ҏ(gu)定的情况下Q将所有状态算出来Q但是由?/span>N <= 109Q数据量太大Q但是我们注意到每个Pi很小Q最大g只有9Q某些大状态是通过状态算出来的,所以必然存在@环?/span>
于是问题p{化成了求一堆序列的循环节,可以先预处理?/span>5000Q够大pQ以内的状态用记忆化搜索算出来Q对于每个状态|?/span>0表示必胜Q?/span>1表示必|。枚丑@环节的长?/span>lenQ然后检是否一个合法的循环节。最?/span>N的状态值就?/span>N % len的状态倹{?/span>
154 Factorial
二分l计 + 初等数论
题意Q给定一个数NQ求一个最的?/span>KQ?/span>K!末尾正好?/span>N?/span>0?/span>
题解Q因?/span>K!中的质因子中5的个数明显比2的个数少Q所以求末尾有多个0Q其实就是求K!中有多少个质因子5。那么这些质因子一定出现在 5?/span>10?/span>15?/span>25?/span>30?/span>35?/span>... K中,对于 K!Q将所有的5的倍数提出来,剩下部分?/span>TQ则有:(x)
K! = 1*2*3*4*5*...(K-1)*K = 5 * 10 * 15 * ... * (1*2*3*4*6*7*8*9*11*12*13*14*16*...K) = 5*10*15*...* T = 5* (1*2*3...) * T = 5 * T * K'! Q?/span> 我们发现5*T?/span>5的质因子个数?/span>T个,K'! 中的5的个数则可以转化成子问题求解Q这样就变成了一个递归求解K中质因子?/span>5的个?/span>S的问题,递归方程?/span> S[ K ] = K/5 + S[K/5] ( K > 0 ) ?/span>K = 0时返?/span>0Q即递归出口?/span>
那么可以二分枚举一?/span>KQ然后通过上面的递归求解K?/span>5q个质因子的个数Q然后和N比较Q如果找不到一?/span>KQ得它?/span>5质因子的个数?/span>N则无解,否则找一个最的?/span>
155 Cartesian Tree
RMQ(or ZigZag)
题意Q给?/span>N(N <= 50000)个整数对(key, a)Q要求将他们l织成一|(wi)二叉?wi),q且对于?wi)的L一个结点,满如下两个性质Q?/span>
1) 当前l点?/span>a值大于它父节点的a?/span>(顶堆的性质)Q?/span>
2) 当前l点?/span>key值大于左子树(wi)?/span>key|q且于叛_?wi)?/span>key?/span>(排序二叉?wi)的性质)Q?/span>
题目保证所有的key值和a值都不同?/span>
题解Q首先将所有整数对?/span>key值递增排序Q这h们只需要对数组q行切分Q如果第t个结点作为根l点Q那?/span>[1, t-1]必定是它的左子树(wi)集合Q?/span>[t+1, N]必定是它的右子树(wi)集合Q这样就能够保证W二个条Ӟ而第一个条仉要满父节点?/span>a值小于左叛_?wi)?/span>a|所以第t个结点必定是所有数?/span>a值最的Q于是可以规U出一个递归法Q对于当前区?/span>[l, r]Q找到区间内a值最的作ؓ(f)根结点,然后它左边的区间和双的区间进行相同的递归q算。初始区间ؓ(f)[1, N]Q当[l, r]满 l > r即ؓ(f)递归出口。求区间最值可以采?/span>RMQ?/span>ȝ旉复杂度ؓ(f)排序的时间复杂度O(N log N)?/span>
RMQ 资料参阅 http://www.shnenglu.com/menjitianya/archive/2014/06/26/207420.html
156 Strange Graph
Ƨ拉回\
题意Q给定一?/span>N(N <= 10000)个点的连通图Q这个图满以下性质Q?br /> 1) 每个点v的度数都大于{于2Q?br /> 2) 如果点v的度数等?/span>2Q那么它q接的两个顶点不盔RQ?br /> 3) 如果点v的度数大?/span>2Q那么和v盔R的点u满以下条g之一Q?br /> a) u的度数等?/span>2Q?br /> b) M?/span>v盔R的点(除了u)中都两两盔RQ?/span>
求这个图的一个哈密尔回?/span>(l过每个点一ơ的回\)?/span>
题解Q首先将所有度Cؓ(f)2的点q行标记Q那么从q个囄定义中可知,未标记的点必定是在一个完全子图中的,图中所有完全子图中的点~成一个点Q对~完点的囄计度敎ͼ如果所有的点的度数都ؓ(f)偶数Q那么必定存在一个欧拉回路,求出Ƨ拉回\后再拆点转换成哈密尔回路;否则Q欧拉回路不存在Q哈密尔回路也׃存在?/span>
157 Patience
打表?br /> 题意Q给?/span>N(1 <= N <= 13)Q表C?/span>(1 2 3 ... N I?/span>)q?/span>N+1个位|,其中N个位|随机排攄1-N中的某一张牌Q每ơ可以在“I?#8221;左边的位|找C张牌KQ然后将K+1q张牌放?#8220;I?#8221;的位|上Q问哪些初始状态可以到达一个状态得前N个格子的牌有序排列(W?/span>N+1个位|留I)?br /> 题解Q从(1 2 3 ... N I?/span>)q个状态vQ反向模拟,能够到达的状态都是可辄态,l计所有可辄态的个数Q?/span>N的最大gؓ(f)13Q时间上不允许可以客L(fng)计算出值然后打表!
158 Commuter Train
二分枚D
题意QR站长度ؓ(f)L(L <= 5000)Q给?/span>NQ?/span>N<= 300Q个乘客在R站的位置Q以及一辆公交R?/span>MQ?/span>M <= 300Q个车门R头的位置Q乘客一定会(x)选择自己最q的车门q入Q问q辆车要停在哪里可以使得所有hq入车门需要走的距Ld最大,好变态的x?/span>
题解Q只要枚举R需要停靠的位置Q然后枚举每个h到达的那个R门花费的距离dQ取最大值就是答案?/span>
q里对于某个人需要去哪个车门可以采用二分枚DQ因R门是有序的,只要二分扑ֈd最q的左R门,那么下一个就是最q的双R门(需要考虑边界Q最左和最右的情况都只有一个R门)Q然后取左、右车门的距d者?/span>仔细想一下,最大g一定出现在整点上,也有可能出现?/span>0.5的位|上Q所以可以将所有坐标都?/span>2Q然后最后答案再除二避免_ֺ误差?/span>
159 Self-Replicating Numbers
深度优先搜烦
题意Q?/span>?/span>N(N <= 2000)?/span>Bq制Cqx的最后几位等?/span>该数本n的数的个数?/span>
题解Q利?/span>dfs从最后面一?/span>digit开始枚?/span>[0, B)Q模拟相乘后对应位的余数Q如果和该数的枚N一位不相符则不q行下一步搜索,当枚丑ֈW?/span>N位完毕,则将解保存,q里需要注意当N?/span>1的时候,最高位可以?/span>0Q否则最高位?/span>0的情况需要去掉(最高位?/span>0说明它不?/span>N位数Q?/span>N>1Q)?/span>
计算几何Q射U旋?br />
题意Q需要求一个正多边形的N个点Q但是给出的只有N和某两个点的坐标?/span>
题解Q核心思想是根据给定的那两个点的坐标确定多边Ş中心点的坐标Q这栯长也定了,然后利用中心点到其中一个点的射U的旋{求出所有的点坐标?/span>
1) 正多边Ş的中心点一定在L两个点的连U的中垂U上Q然后根据已知点的相对关p,出他们和中心点的夹角,利用q两个条件就可以求出中心点的坐标了?/span>
2) 然后是要求某个点绕中心Ҏ(gu)?/span>360/N度后的坐标了Q做N-1ơ旋转操作就能求出所有的点了。旋转可以通过解方E求解:(x)
令原单位向量IQ旋?/span>alpha角度后的单位向量IaQ其?/span>I?/span>alpha已知Q?/span>Ix是我们需要求的。那么有以下两个方程Q?/span>
1) I.x * Ia.x + I.y * Ia.y = cos( alpha )
2) Ia.x2 + Ia.y2 = 1
?/span>1)中的Ia.x?/span>Ia.y表示代入方程2)Q利用一元二ơ求根公式可以求得两个解Q然后算?/span>Ia.xQ但是解肯定只有一个,可以用叉乘关pL除掉另外一个解?br />
121 Bridges painting
图论QDFS构?/span>
题意Q对于一个图Q给定它的边和点Q现在要求给Ҏ(gu)Ԍ黑色或者白Ԍ。问能不能构造一U染色方法,使得所有的度数大于1的点的边都能有至有一条边为黑艌Ӏ至有一条边为白艌Ӏ?/span>
题解Q首先考虑什么情况下是不可能染色成功的;如图1所C,对于下面q个图,每个点的点度数?/span>2Q所以从L一条边开始染Ԍ盔R边必然ؓ(f)相反Ԍ׃存在奇环Q导致必然有一个点的两条边的颜色相同,染色p|?/span>
然后再来考虑怎么这个图挽救回来Q其实这个图p|的点只有一个,如果在那个点上再加一条边Q那么整个图貌似可以认为染色成功了?/span>
于是我们q一步考虑是不是度Cؓ(f)奇数的点造就了这一切:(x)
度数 = 1Q该Ҏ(gu)在边可以随便染色Q?/span>
度数 > 1Q说明必然存在环Q?/span>
如果是偶数环Q那么经q一pd的交错染Ԍ最后必然能够在该结点上收获两条颜色不一L(fng)边;
如果是奇数环Q在染色完毕后,必然q有一条边未被染色Q因为度Cؓ(f)奇数Q,可以大胆的将它染成不同的颜色Q?/span>
所以对于度Cؓ(f)奇数的点Q采用交错染Ԍ一定可以将图染色成功;
如图Q可以对于所有奇度数点作ؓ(f)根进行一?/span>dfsQ按照编号顺序进行深度优先遍历,先遍历到的是1P标记为黑Ԍ然后它的第一个儿子标Cؓ(f)白色Q遍历完毕,第二个儿子标记为黑Ԍ交错染色Q,xơ更换结点的时候就颜色取反,当我们遍历到?/span>6的时候发?/span>7是一条后向边Q于是回C根结点,完成遍历?/span>
利用同样Ҏ(gu)Q将所有度Cؓ(f)奇数的点q行一ơ遍历,然后再将度数为偶数的点进行相同的遍历Q因为可能这不是一个连通图Q所以如果度Cؓ(f)偶数的点所在的N合中有奇数环Q如?/span>1的情况,那么必然无解Q?/span>
遍历完毕Q需要对每个点判断是否存在不合法的顶点(Ҏ(gu)大于1Qƈ且只有一U染ԌQ如果合法,说明所有边都被染色了,输出解即可?/span>
?/span>1
?/span>2
哈密?dng)顿回\问题QOre定理 + 构?/span>
题意Q给?/span>N(N <= 1000)个点q成的图Q每个点度数大于{于(N+1)/2Q求q个囄一条哈密尔回路?/span>
题解Q?/span>
1Q首先假讑ַl得C一个环RQ?/span>R的顶点个Cؓ(f)rQ,那么在未选到环内的点?/span>R’中必然能够找到某个点k和环R中其中一个点j有边相连Q假设没有边相连Q那么环R和环外的炚wR’互不q通,Z个连通分量,和题意相左(因ؓ(f)每个点的度数大于{于Q?/span>N+1Q?/span>/2Q图Z上有证明Q这肯定是一个连通图Q故不再累述Q,?/span>R’中必然存在至一个点k?/span>R中点j相连Q于是将那个?/span>jq接?/span>k上,q样变成了一个长度ؓ(f)r+1的链?/span>
2Q这个链的头?/span>sQ尾?/span>kQ长度ؓ(f)r+1Q不断在剩下的点集中扄q接?/span>s?/span>k上,q且不断更新s?/span>kQ连接到头上Q连接的点就变成?/span>sQ连接到上Q连接的点就变成?/span>kQ,直到扑ֈ一个极大连通子链(不能再在剩下的点中找到点q接到链的两端了Q?/span>
3Q由?/span>k和剩下点?/span>R’没有点相q,所以我们只能在q条镉K上找?/span>k相连的点tQ因Z定可以找刎ͼZ么呢Q?/span>k本n不就有个铑ֆ的点q着嘛,不然它就是个孤立点了Q?/span>。所以找?/span>(k , t)相连Qƈ?/span>(s, t+1) 相连Q然后删?/span>(t, t+1)q条边,p够得C个新的环了,如果此时环的长度?/span>nq束了Q否则l?/span>1Q?/span>
递推
题意Q求斐L那契数列的第N(N <= 40)V?/span>
题解Q?/span>__int64数组预处理即可?br />
124 Broken line
计算几何: U段判交
题意Q在q面上有一些闭合线D(没有自交和相互交叉)Q判断给定的?/span>P是否在这个闭合线D内?/span>
题解Q其实就是判断一个点是否在多边Ş内;
首先Q虚拟出一个无I的点QQ然后用PQ和每个闭合线D去做相交检?/span>(两线D判交在黑书上有详尽的解?/span>,不再累述)?/span>
1) 如果P在某条线D上Q输?/span>BORDERQ?/span>
2) 如果PQ和所有线D交点个Cؓ(f)奇数Q说明在多边形内Q输?/span>INSIDEQ?/span>
3) 如果PQ和所有线D交点个Cؓ(f)偶数Q说明在多边形外Q输?/span>OUTSIDEQ?/span>
125 Shtirlits
深度优先搜烦 + 剪枝
题意Q给定一个矩?/span>B (3X3)Q?/span>B[i][j]表示A[i][j]四周比它大的数的个数Q求满条g?/span>A?/span>
题解Q枚?/span>A[i][j]的每个数字,数字的范围ؓ(f) [0,9]。复杂度109Q所以需要进行一定的剪枝?/span>
a) 首先Q可以肯定这B[i][j]中一定会(x)臛_有一?/span>0Q因为L一个数没有比它大的敎ͼ高处不胜寒啊~~Q?/span>对于B[i][j] == 0的格子,?/span>A[i][j]设ؓ(f)最大?/span>9一定不?x)错Q所以复杂度臛_可以降到 108 了?/span>
b) ?/span>A的每个非9的格子标Cؓ(f)-1Q然后对每个格子q行枚DQ枚举范围ؓ(f) [ 0, 8 ], 因ؓ(f)B[i][j]为四周比它大的数的个?/span>, 如果A[i][j]==9Q那?/span>B[i][j]必须?/span>0Q复杂度降至 98?/span>
c) 每次枚D完毕Q进入下一个数的枚举之前,q行全局的检,对于每个格子l计以下数据Q?/span>
i) 已经枚D的邻居格?/span> H
ii) d有多个d格子 T
iii) 比自己大的邻居格?/span> B
然后q行{选,如果
x) 比当前格子大的邻居数已经出限定?/span>, ?/span> B > B[i][j]
y) 比当前格子大的邻居数 + 剩余未知d?/span> < l定比它大的d敎ͼ ?/span> B + (T-H) < B[i][j]
均ؓ(f)无效解,无需往下枚举,回溯?/span>
d) 直到所有数枚D完毕Q输卛_?/span>
126 Boxes
初等数论
题意Q对于给定的A?/span>BQ?/span>
如果A > B, 则状态变?/span> (A-B, 2*B)
如果A < B, 则状态变?/span> (2*A, B-A)
?/span> A == B Ӟl束?/span>
要求输出q个情况是否存在Q如果存在输出变换的ơ数Q不存在输出-1?/span>
题解Q根据题意,可以得出一些简单的推论Q?/span>
a) ?/span>A == 0 或?/span> B == 0 ?/span> {案?/span> 0?/span>
b) 最?/span>A == B的时候,必定?/span>K = (A+B)/2Q所以当A+B为奇数时{案不存在?/span>
c) 定义最后的状态二元组?/span> (K, K),
倒数W二ơ的操作必定?/span> (3K/2,K/2) 或?/span>(K/2,3K/2) (2U?/span>)
倒数W三ơ的操作必定?/span> (7K/4, K/4) 或?/span> (3K/4, 5K/4) 或?/span> (5K/4, 3K/4) 或?/span> (K/4, 7K/4) (4U?/span>)
倒数W四ơ操?/span>(15K/8,K/8)... (8U?/span>)
倒数W?/span>iơ操?/span> ( (2(i-1)-1)/2(i-1) * K, 1/2(i-1) * K ) ... (2(i-1) U?/span>)
d) A?/span>B的组合必定在q些情况中找?/span>
于是定义 A = L1 / 2n * K, B = L2 / 2n * K (其中K = (A+B)/2, L1,L2为奇敎ͼq且(L1+L2) = 2(n+1))
得:(x)
L1 = 2n * (A/K)
L2 = 2n * (B/K)
?/span> A = 2a * A', K = 2k * K'
则有 L1 = 2(n+a-k) * A'/K' 为奇敎ͼ所?/span>n+a-k = 0Qƈ且要保证A' mod K' == 0Q?/span>A ?/span> K 都ؓ(f)已知Q则可以计算?/span> a ?/span>A'?/span>k?/span>K'Q最l的步数是k-a+1?/span>
需要注意特D情况:(x)A?/span>B?/span>0的情况,以及A+B为奇数的情况?/span>
127 Telephone directory
所有电(sh)话号码按首字母排序,l计每个首字母出现的ơ数AiQ?Sum{ (Ai + K - 1 ) / K } + 2 是{案?/p>
128 Snake
x?/span>
题意Q给?/span>NQ?/span>4<=N<=10000Q个整数点,问能不能l出一个多边ŞQ满以下条Ӟ(x)
a) 闭合Q?/span>
b) 所有的炚w是多边Ş上的点,q且只能被用一ơ;
c) M两个q箋的线D需要组成一?/span>90度的直角Q?/span>
d) 多边形的所有边都要q于坐标uQ?/span>
e) 多边形不能存在自交;
f) 多边形的周长要满x;
题解Q?/span>
1) 对于输入的点保存两䆾数组PX?/span>PYQƈ且记录每个点在原数组的下?/span>indexQ?/span>
2) ?/span>PXq行X优先排序Q对PYq行Y优先排序Q?/span>
3) ?/span>PX中序号ؓ(f)奇数的点PX[i]和它的下一个点PX[i+1]q行y值的判断Q如果这两个点的yg相等Q那么说明这个点无法加入多边形中Q?/span>PX[i]无法配对Q被孤立了)Q无解。否?/span>PX[i].index?/span>PX[i+1].index必然有一条边Q可以用L表来存边关系Q因为最后求的是一个多边ŞQ所以每个点有且仅有两条边,其实是一个哈密尔回路)?/span>
q且?/span>PX[i+1].x - PX[i].index 累加到答?/span>ans中;
4) ?/span>PY中的点作?/span>3Q一L(fng)处理Q保存边的关p,但是q里需要判断一U自交的情况Q如?/span>1中,3)操作完毕后,产生三条?/span>(1,1) - (2,1) (1,2) -(3, 2) (2,3) - (3,3)Q那么在q行操作4Q的时?/span>(1,1)-(1,2) ?/span> (3,2) - (3, 3)都是没问题的Q唯?/span> (2,1) - (2,3) ?/span> 先前的边 (1,2) -(3, 2) ?x)生自交,q反?/span>eq条规则Q所以需要检这U情冉|否存在,如果存在Q那么必然无解;具体方法很多,不再累述Q?/span>
?/span>1
5) q过3)?/span>4)后,再进行一ơ连通性判断即可,以防?/span>2的情c?/span>
?/span>2
129 Inheritance
解析几何 + 凸包 + U段判交
题意Q给定一个多边Ş和若q线D,q个多边形内L两点q线不会(x)和多边Ş边界怺Q分别求q些U段在多边Ş内部的长度?/span>
题解Q首先,Ҏ(gu)“多边形内L两点q线不会(x)和多边Ş边界怺”可以肯定q是个凸多边形,于是问题p{化成了求某条U段和凸多边形相交后U段在多边Ş内部分的长度?/span>
׃l定的点是ؕ序的Q所以最单的Ҏ(gu)是求q些炚w的一个凸包,构造出一个按Ҏ(gu)序的多边形,盔R两点q线为原多边形的一条边?/span>
那么枚D每条边和l定U段的相交情况:(x)
1) 不相交(qQ,l箋判断下一条边Q?/span>
2) qQ直接蟩出枚举,Q由于是凸多边ŞQ改U段肯定不可能在多边形内Q;
3) 怺Q将q个交点存入集合SQ?/span>
原U段的两个端点存入集?/span>SQ对集合S的点q行x坐标递增排序Q?/span>x相同?/span>y坐标递增排序Q,然后枚D盔R两个点的中点Q判断是否在在原多边形内Q如果在Q那么将q两个相?c)l成的线D늚长度累加到最后的{案中。如?/span>1Z个交点的情况?/span>
?/span>1
计算几何Q射U和球体怺
题意Q给定一?/span>3D线 ?/span> N个球体,问射U的各种反弹l过的球体编P如果反射过10ơ,只需要输出前十次?/span>
题解Q很明显Q首先需要枚举每个球体和当前线的相交情况,如果和多个球体相交肯定是取距Lq的球体q行怺计算Q然后计出I间反射线Q重复以上操?/span>11ơ,如果某次的反射U已l不能和M球体怺那么直接跛_q个q程?/span>
如图1Q表C射U?/span>AB和球O怺?/span>B点,反射后的线?/span>BCQ?/span>BD为球?/span>OC点的廉U,那么必定满以下几个条gQ?/span>
已知A点坐?/span>(xa, ya, za)Q单位向?/span>tab
B点坐?/span> ?/span> (xb, yb, zb) = (xa, ya, za) + |AB| * tab (1)
B点在?/span>O上,所?/span>B点坐标满?/span>
| (xb, yb, zb) - (xo, yo, zo) | = OB = Ro (2)
?/span>(1)代入(2)Q可计算?/span>|AB|的长度(׃是射U和球体求交Q这两个方程求出来的是直U和球体的交点,所以还需要计方向判断交点的可行性,如果交点有两个,则取距离的那个Q如果只有一个交点,说明是相切)Q然后利?/span>(1)式计出B点坐标?/span>
2) 线l过球体的反射U?/span>
假设C点在Al过B点反后的反射U上Qƈ?/span>AB = BCQ那?/span>AC必定?/span>OB廉U相交,假设交于D点;
单位向量cos(ABD) = Iba * IbdQ?/span>
BD = AB * cos(ABD)Q?/span>
向量AD = 向量AB + 向量BDQ?/span>
向量AC = 2 * ADQ?/span>
?/span>C (xc, yc, zc) = 向量AC + (xa, ya, za)Q?/span>
向量BC求出后返?/span>1) l箋判断和别的球的相交情况;
111 Very simple problem
二分{案 + 大数模拟
题意Q给?/span>X( X <= 10100)Q求X开方后的下取整?/span>
题解Q数l模拟大数。二分答?/span>AQ找满 A*A <= X 最大的A即ؓ(f){案?/span>
112 a^b-b^a
二分求幂 + 大数模拟
题意Q求 ab - ba ( 0 < a, b < 100)?/span>
题解Q数l模拟大数。二分求 AB?/span>
?/span> B == 0 ?AB = 1; 否则 AB = (A2)(B/2) * ( (B mod 2) ? A : 1 ); 递归求解?/p> 113 Nearly prime numbers 素数{?/span> + 素数判定 题意Q判断一个数是否Z个素数的U?/span> 题解Q利用传l的素数{选将 1-31623 的素数筛选出来,31623为^方大于等?/span>109的最整敎ͼ因ؓ(f)一个数的开方内找不C??或它本n)因子的话它本w就是素敎ͼ所以素数只需要筛选到 109 的开?/span> 卛_?/span> 对于每个敎ͼ遍历素数数组Q如果能被某个素数整除,判断商是不是一个素敎ͼ如果商也是素数结果ؓ(f)YesQ否则ؓ(f)No?/span> 114 Telecasting station 枚D + l计 题意Q在X轴上规定一些有权?/span>ai的点 (x1,a1), (x1,a1), (x2,a2) .. (xn,an)要求?/span>x坐标上找C个点X使得 M = |X-x1|*a1 + ... |X-xn|*an 的值最?/span> 题解Q细心观察可以发玎ͼM是关?/span>X的一ơ函敎ͼ所以可以确?/span>X必定?/span> x1...xn中的某个炏V?/span> ׃原式中存在绝对|Z绝对值化Q可以将X的区间分D,比如?/span>X ?/span> xj时可以简化ؓ(f) M = (X-x1)*a1 + ...(X-xj)*aj + (xj+1-X)*aj+1 + ... + (xn-X)*an = (X * presum[j] - preproduct[j]) + (postproduct[j+1] - X * postsum[j+1]) q些辅助数组可以通过四次U性扫描得出,复杂?/span>O(n)?/span>然后Q?/span>先将xi递增排序Q枚举每?/span>xiQ计最值更?/span>MQ就可以?/span>O(n)的时间内求解了。M法复杂度ؓ(f)排序复杂?/span>O(n log n)?br /> 单模?/span> 题意Q给定一个月?/span>M和天?/span>NQ求2001的那一天是星期几?/span> 题解Q可以预处理出每个月的天敎ͼ如果天数大于那个月对应的天数或者月数大?/span>12肯定是不可行的,否则给定月?/span>M之前?/span> 1?/span>M-1个月的天数相加再加上N得到SumQ?/span>Sum mod 7可以定位到星期几了?/span>
素数{?/span> + 记忆化搜?/span>(?/span> 动态规?/span>) 题解Q先满x件的 素数 {选出来,3 5 11 17{等Q?/span>然后对于输入?/span>Nq行一ơ记忆化搜烦Q?/span>DPQ?/span> 例如 N = 15 那么N的最优g定是来自 15-3=12Q?/span>
15-5=10Q?/span> 15-11=4 q三个数Q?/span>以此cLQ递归出口?/span>N = 0Q每ơ计完N将它保存下来,下次׃用重复计了?/span> 所以状态{ULEؓ(f)Q?/span>DP[i] =
min{ DP [ i - p ] , p U素?/span> } + 1 因ؓ(f)需要输出组合的序列Q所以每ơ搜索,需要保存当前最优值的前驱l点Q最后一ơ性输出即可?/span> 二分求余 题意Q给?/span>N(N < 10001)个数AiQ求其中AiM
?/span>K的倍数的数的个数?/span> 题解Q?/span>对于ab mod c二分求解?/span>?/span>
b == 0 ?nbsp;ab mod c = 1 mod c; 否则 ab mod c = (A2)(B/2)
* ( (B%2) ? A : 1 ) mod c; 数学归纳?/span> 题意Q?/span>定义f(n) ?/span> n的所有数字的?/span>. 如果 f(n) ?/span>1位数字,那么它是n?/span> "digital root"Q否?/span>n?/span>"digital root" ?/span> f(n) ?/span>"digital root"?br /> l定数组AiQ求 A1*A2* … *AN + A1*A2*…*AN-1 + … + A1*A2 + A1 ?/span>"digital root"(N <= 1000)?/span> 题解Q定?/span>d(n)?/span>n?/span>"digital root"Q?/span>利用数学归纳法可证明(?/span>N=1的情늽上递推)Q?/span> 1) d( A1*A2* … *AN ) = d( AN * d( A1*A2* … *AN-1 ) ) 2) d(A1 + A2 ) = d( d(A1) +d(A2) ) 利用q两点,可以直接扫描A数组可以计出l定表达式的"digital root"了?/span> 枚D + 扩展Ƨ几里得 题意Q对于所有的(X,Y)在满?/span> (A0 * X + B0 * Y) % N = 0 (1) 的情况下,使得(A * X + B * Y) % N = 0 (2) 也成?/span>, 求这L(fng) (A, B)?/span> 题解Q首先求?/span>A0?/span>B0?/span>N三者的GCDQ最后算出来的答案需要乘上这?/span>GCD?/span> (A0 * X + B0 * Y) = K * N (3) (K为整?/span>) (A * X + B * Y) = K' * N (4) (K'为整?/span>) X = (K*N - B0*Y) / A0 代入(4)?/span>,可得 A*(K*N - B0*Y) + B*A0*Y = K'* N * A0 (5) 化简?/span> (6) (B*A0 - A*B0) * Y = (K'*A0 - K*A) * N (6) 两边同时mod N ?/span> (B*A0 - A*B0) * Y % N = 0 (7) ׃YZQ意整?/span>(?/span>Y有可能和N互素), 所以必L?/span> (B*A0 - A*B0) % N = 0 (8) 可以化简?/span> (B*A0 - A*B0) = K'' * N (9) (K''为整?/span>) A0 * B + N * (-K'') = A*B0 (10) 枚DA的|可以把方程转化成了 ax + by = c的Ş式,其中: a = A0, b = N, c = A*B0 x = B, y = -K'' 利用扩展Ƨ几里得卛_求得最的满条g?/span>x(?/span>B)的g?/span> 最后的{案需要乘?/span> A0?/span>B0?/span>N 三者的GCD?/span>
?
115 Calendar
题意Q超U素数是素数下标也是素数的数Q给定一个数NQ问q个数能不能被一些超U素数组合出来,如果可以Q需要满U素数的个数最,要求输出一个方案?/span>
118 Digital Root
]]>