??xml version="1.0" encoding="utf-8" standalone="yes"?>日本WV一本一道久久香蕉,日本五月天婷久久网站,国产aⅴ激情无码久久http://www.shnenglu.com/menjitianya/category/20894.htmlzh-cnWed, 20 Aug 2014 20:53:17 GMTWed, 20 Aug 2014 20:53:17 GMT60SGU 150 - 159 解题报告http://www.shnenglu.com/menjitianya/archive/2014/08/14/208001.html英雄哪里出来英雄哪里出来Thu, 14 Aug 2014 01:33:00 GMThttp://www.shnenglu.com/menjitianya/archive/2014/08/14/208001.htmlhttp://www.shnenglu.com/menjitianya/comments/208001.htmlhttp://www.shnenglu.com/menjitianya/archive/2014/08/14/208001.html#Feedback0http://www.shnenglu.com/menjitianya/comments/commentRss/208001.htmlhttp://www.shnenglu.com/menjitianya/services/trackbacks/208001.html150 Mr. Beetle II                                            枚D
151 Construct a triangle                                解析几何
152 Making round                                          贪心
153 Playing With Matches                             博弈 + 规律
154 Factorial                                                  初等数论
155 Cartesian Tree                                        RMQ
156 Strange Graph                                         Ƨ拉回\
157 Patience                                                  模拟打表
158 Commuter  Train                                     二分枚D
159 Self-Replicating Numbers                       深度优先搜烦


150 Mr. Beetle II

      枚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>





]]>
SGU 140 - 149 解题报告http://www.shnenglu.com/menjitianya/archive/2014/07/06/207542.html英雄哪里出来英雄哪里出来Sun, 06 Jul 2014 05:00:00 GMThttp://www.shnenglu.com/menjitianya/archive/2014/07/06/207542.htmlhttp://www.shnenglu.com/menjitianya/comments/207542.htmlhttp://www.shnenglu.com/menjitianya/archive/2014/07/06/207542.html#Feedback3http://www.shnenglu.com/menjitianya/comments/commentRss/207542.htmlhttp://www.shnenglu.com/menjitianya/services/trackbacks/207542.html阅读全文

]]>
SGU 130 - 139 解题报告http://www.shnenglu.com/menjitianya/archive/2014/06/23/207386.html英雄哪里出来英雄哪里出来Mon, 23 Jun 2014 11:08:00 GMThttp://www.shnenglu.com/menjitianya/archive/2014/06/23/207386.htmlhttp://www.shnenglu.com/menjitianya/comments/207386.htmlhttp://www.shnenglu.com/menjitianya/archive/2014/06/23/207386.html#Feedback0http://www.shnenglu.com/menjitianya/comments/commentRss/207386.htmlhttp://www.shnenglu.com/menjitianya/services/trackbacks/207386.html阅读全文

]]>
SGU 120 - 129 解题报告http://www.shnenglu.com/menjitianya/archive/2014/06/17/207316.html英雄哪里出来英雄哪里出来Tue, 17 Jun 2014 11:07:00 GMThttp://www.shnenglu.com/menjitianya/archive/2014/06/17/207316.htmlhttp://www.shnenglu.com/menjitianya/comments/207316.htmlhttp://www.shnenglu.com/menjitianya/archive/2014/06/17/207316.html#Feedback2http://www.shnenglu.com/menjitianya/comments/commentRss/207316.htmlhttp://www.shnenglu.com/menjitianya/services/trackbacks/207316.html120 Archipelago                                                计算几何Q射U旋?/strong>
121 Bridges painting                                         图论Q染色问?/span>
122 The Book                                                    图论Q哈密尔回?/strong>
123 The Sum                                                     递推
124 Broken Line                                                计算几何Q线D判?a >
125 shtirlits                                                       搜烦Q深度优先搜?/strong>
126 boxes                                                          初等数论
127 Telephone directory                                   排序
128 Snake                                                          排序 + HASH
129 Inheritance                                                 计算几何Q凸?U段判交


120 Archipelago

       计算几何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

122 The book

      哈密?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>

 

?

123 The sum

      递推


       题意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






]]>
SGU 110 - 119 解题报告http://www.shnenglu.com/menjitianya/archive/2014/06/12/207263.html英雄哪里出来英雄哪里出来Thu, 12 Jun 2014 04:49:00 GMThttp://www.shnenglu.com/menjitianya/archive/2014/06/12/207263.htmlhttp://www.shnenglu.com/menjitianya/comments/207263.htmlhttp://www.shnenglu.com/menjitianya/archive/2014/06/12/207263.html#Feedback0http://www.shnenglu.com/menjitianya/comments/commentRss/207263.htmlhttp://www.shnenglu.com/menjitianya/services/trackbacks/207263.html110 Dungeon                                                计算几何Q射U和球体怺
111 Very simple problem                             二分枚D
112 a^b-b^a                                                二分求幂 
113 Nearly prime numbers                          数论Q素数筛?br />114 Telecasting station                               枚D
115 Calendar                                                单模?/strong>
116 Index of super-prime                            动态规划:(x)记忆化搜?/strong>
117 Counting                                                二分求幂
118 Digital Root                                           数学?/strong>
119 Magic Pairs                                            数论Q扩展欧几里?/strong>


110 Dungeon

      计算几何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>

 


?
       1) 线和球体相?/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 ­­* I­­bdQ?/span>

BD = AB * cos(ABD)Q?/span>

向量AD = 向量AB + 向量BDQ?/span>

向量AC = 2 * ADQ?/span>

?/span>C (x­c, 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>a­i的点 (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 />

115 Calendar

       单模?/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>


116 Index of super-prime

      素数{?/span> + 记忆化搜?/span>(?/span> 动态规?/span>)

      
       
题意Q超U素数是素数下标也是素数的数Q给定一个数NQ问q个数能不能被一些超U素数组合出来,如果可以Q需要满U素数的个数最,要求输出一个方案?/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>

 

117 Counting

      二分求余

       题意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;


118 Digital Root

      数学归纳?/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定数组Ai­Q求 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>

 

119 Magic Pairs

      枚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>

 



]]>
SGU 100 - 109 解题报告http://www.shnenglu.com/menjitianya/archive/2014/06/10/207242.html英雄哪里出来英雄哪里出来Tue, 10 Jun 2014 05:43:00 GMThttp://www.shnenglu.com/menjitianya/archive/2014/06/10/207242.htmlhttp://www.shnenglu.com/menjitianya/comments/207242.htmlhttp://www.shnenglu.com/menjitianya/archive/2014/06/10/207242.html#Feedback0http://www.shnenglu.com/menjitianya/comments/commentRss/207242.htmlhttp://www.shnenglu.com/menjitianya/services/trackbacks/207242.html阅读全文

]]>
ԾþþӰԺ| Ʒۺþþþþ | ޾Ʒþþþȥq| ŷһþþƷ޾Ʒþþþ | ԴӰȷþԴ| þþۺ| þҹ³Ƭ| ˹ھƷþþþӰԺ| þþܳ| 99þùۺ| þ˿ྫƷĻ| þþƷAVӰ| ƷѾþþþùһ| Ů޾Ʒþþۺ| һһþþƷۺ| ޹Ʒþþϼ2| 91鶹Ʒ91þþþþ| þù¶ƷӰ| þþþùƷ鶹ARӰԺ | Ʒþˬۺ| þþƷAV| þ| ƷþþĻ| ˾þü91| ձŷþþþѲ | avþþƷ| ޾ƷŮþþþ99С˵| ŷƷһþ˵| ŷպþĻ| þþþƷձһ| www.þ| ˾ھƷþþþ| ƷҹþøƬ| ձѾþþþþþվ| ¶ۺϼ¾þ| ŷþ18| 㽶aaþëƬ| պŷһþþþ| ޹˾þһþ| ޹ƷAVþۺӰԺ| þˬˬAVƬ|