﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-From A Start,As An Acmer</title><link>http://www.cppblog.com/aswmtjdsj/</link><description>My Way to Final</description><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 09:41:07 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 09:41:07 GMT</pubDate><ttl>60</ttl><item><title>CF 159 A [没啥，只是想记录一下自己想的贪心是错的]</title><link>http://www.cppblog.com/aswmtjdsj/archive/2012/03/27/169133.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Tue, 27 Mar 2012 05:12:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2012/03/27/169133.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/169133.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2012/03/27/169133.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/169133.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/169133.html</trackback:ping><description><![CDATA[orz。如此一个水题让我想了很久用了无数STL之后已然WA到死。直到想明白自己哪里错了。<br />哎，自己的贪心果断不靠谱啊。但是为啥他们那些如此暴力的做法都能过呢- -构造卡N^3的数据太难了是么。。<br /><br />题目大意：<br />n(int,[1,1000]), d(int,[1,1000])<br />n条记录，每条记录有a,b(string,len[1,20]),t(int,[0,10000])。按非降序列给出。<br />a,b,t表示在t时刻，a给b发了一条信息。<br />约束条件，如果a给b在t1时刻发了信息，且b给a在t2时刻发了信息，且0 &lt; t2 - t1 &lt;= d。那么a和b就是朋友关系。<br />(不存在自己给自己发消息的情况）<br /><br />让你给出朋友关系的条数，和每条朋友关系，spj。<br /><br />我的做法：<br />错误做法，N*logN的贪心：<br />逐条读入，用string存unique的string，map存映射。用int[][]存发送时间，abt则rel[index(a)][index(b)] = max(t, rel[index(a)][index(b)]。并与rel[index(b)][index(a)]比较，如果满足约束条件则将(a,b)插入一个set中。<br />错误关键点：在线更新rel[][]是不对的，虽说两个人的朋友关系与否只和最近一次的两人互通消息有关，但是这中间存在一个反例（由于题目条件的特殊性）：<br />a b 1<br />a b 2<br />b a 2<br />这组例子a、b是朋友关系。但是由于rel[index(a)][index(b)] = 2 其矩阵对称值也为2，所以不满足约束关系，所以就判错了。<br />所以一个简单的正确做法为离线做。<br />正确做法，N^2*logN的枚举：<br />对于每条记录枚举之前所有记录，看满足约束条件否，满足则扔set。。<br />（ps，有人用vector代替set都不超时。。。N^3啊，泪目）<br />（贪心什么的，一证明，二想反例，一定要慎重啊。自己还是太弱了。<br /><br />太伤了。。。<img src ="http://www.cppblog.com/aswmtjdsj/aggbug/169133.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aswmtjdsj/" target="_blank">BUPT-[aswmtjdsj] @ Penalty</a> 2012-03-27 13:12 <a href="http://www.cppblog.com/aswmtjdsj/archive/2012/03/27/169133.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TC 538 DIV II 300+500</title><link>http://www.cppblog.com/aswmtjdsj/archive/2012/03/21/168469.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Wed, 21 Mar 2012 02:32:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2012/03/21/168469.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/168469.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2012/03/21/168469.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/168469.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/168469.html</trackback:ping><description><![CDATA[&nbsp;最近TC一路猛跌，现在光荣的在div2厮混。昨晚打了一场，全是ws题，可惜自己手速不够快，没抢到分也没cha够人。<br /><br />300：<br />给你一个只包含LR?的序列，表示你每一步走的方向，？表示L、R都有可能，问你最远你能走多远（过程中）。<br /><br />标准做法：贪心，枚举所有？为L或R。两遍扫。大略的证明，如果最远点在左边，那么过程中向右绝对没好处；反之亦然。<br />for i = 0 ,a = 0, i &lt; len , i++<br />if s[i] = 'L' , a++<br />else a--<br />ans = max(abs(a),ans)<br /><div>for i = 0 ,a = 0, i &lt; len , i++<br />if s[i] = 'R' , a++<br />else a--<br />ans = max(abs(a),ans)<br /><br />我的做法：由于本人经研究发现，自己贪心最弱，所以遇题从不敢写贪心，于是剪枝爆搜了一把。<br />O(2^(len/2))的搜索，亏着len &lt;= 50<br />将原串中连续的L、R、？压缩成一个pair。LLL=pair(L,3)，塞到一个vector里面。<br />dfs之，遇到？pair的时候分化。<br />由于最坏情况为L?R?L?R?......所以最坏有25个离散的?，离散的LR不影响，因为不产生分支。<br />所以为O(2^25)的搜索。tc服务器比较快，俨然过了。<br /><br />500：<br />没有发现水题本质哇，就是一个猜结论题。<br />你一开始在(0,0)，给你一个xy坐标序列，一个奇偶预测p。问你是否能找到一个走法序列使得你的步数满足这个预测。<br />举例：序列为(1,1),(1,0),p=1<br />则(0,0)-偶-&gt;(1,1)-奇-&gt;(1,0) ：奇，所以存在这样的序列。<br /><br />结论：<br />咱们画个图表示一下：上层点代表偶点，下层点代表奇点。<br />奇解的情况：<br />________<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--------------<br />偶解的情况：<br /><div>________ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; __________<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--------------</div>将序列的每个元素自加，奇就为奇点，偶就为偶点。<br />因为初始点为偶点，那么序列中存在的偶点有两个选择，要么缀在这个偶点之后，要么缀在之后的某个奇点之后。<br />假如存在奇点，那么也有两个选择，要么缀在偶点之后，要么插入偶点之间。<br />如果奇缀偶后为最终结果，那么该解为奇解。<br />如果奇插偶中为最终结果，那么该解为偶解。<br />那么显然，当序列中不存在偶点一定得不到偶解；不存在奇点则一定得不到奇解。<br /><br />竟然想了半个小时，泪目。</div><img src ="http://www.cppblog.com/aswmtjdsj/aggbug/168469.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aswmtjdsj/" target="_blank">BUPT-[aswmtjdsj] @ Penalty</a> 2012-03-21 10:32 <a href="http://www.cppblog.com/aswmtjdsj/archive/2012/03/21/168469.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sgu 108[卡内存什么的]</title><link>http://www.cppblog.com/aswmtjdsj/archive/2012/03/16/168115.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Fri, 16 Mar 2012 12:35:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2012/03/16/168115.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/168115.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2012/03/16/168115.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/168115.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/168115.html</trackback:ping><description><![CDATA[题目大意：<br />给一个n，另d(n)= n + sum{digit_i}(for i = 1 to length(n), digit_i is n's no.i digit)<br />若y = d(n)，则n就是y的generator。<br />若某个数没有generator，那么这个数就叫self number。<br />要求：给你一个N[1,10^7]，一个k[1,5000]<br />k个数，s1...sk。<br />让你求出[1,N]中有多少个self numbers。并输出k个a[si]，即第si个self number。保证si不大于N中self number的数量。<br /><br />做法，本来很水的一题，用类似筛法的思想筛一遍就搞定了。<br />但是因为当年的SGU很穷，所以没钱买内存，于是乎内存只给了4M。必须用点ws的方法了。<br /><br />10^7的bool数组大小约为9.5M，10^6的int数组约为4M内存（10^7中一共有977xxx个self numbers），省内存就要从两方面入手。<br /><br />节省int数组的开销，即不存储这个数组，而是把输入的si排序，当扫描到对应的si的时候，直接标记下来。注意wa点：si不一定有序，且有可能重复。<br />节省bool数组的开销：<br />法1：位压缩，bitset或者手写位运算均可。<br />法2：滚动数组。由于d(n) &lt;= n + 9*7在10^7的范围内。所以只需开一个64大小的滚动数组即可。<br />实现：<br />if(vis[i%64])//if(vis[i&amp;63])<br />{<br />//blabla<br />}<br />vis[i%64] = true;//这时候i已经扫描过去了，所以对于下一个等于i%64的i，默认是true的<br />vis[d(i)%64] = false;//筛掉d(i)<br /><br />虽然我莫名其妙的G++WA on testcase9，C++AC了吧。。<br /><br />各种小技巧还是挺有意思的。<img src ="http://www.cppblog.com/aswmtjdsj/aggbug/168115.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aswmtjdsj/" target="_blank">BUPT-[aswmtjdsj] @ Penalty</a> 2012-03-16 20:35 <a href="http://www.cppblog.com/aswmtjdsj/archive/2012/03/16/168115.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>三分法 for 单峰函数[数值计算][题目sgu 114, zoj 3421]</title><link>http://www.cppblog.com/aswmtjdsj/archive/2012/02/20/166058.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Mon, 20 Feb 2012 05:22:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2012/02/20/166058.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/166058.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2012/02/20/166058.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/166058.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/166058.html</trackback:ping><description><![CDATA[（好多地方其实画图比较好，奈何linux的各种画图工具用着不舒服。。又不愿意用opengl什么的画图，那么各位看官就锻炼一下自己的yy能力吧～）<br />所谓单调函数二分法，单峰函数三分法。<br /><br />单调函数二分法，函数在给定定义域内单调，可以根据单调性来二分逼近答案。<br />单峰函数三分法，函数在给定定义域内有不超过一个的峰值，可以根据其单峰特性来三分逼近答案。<br /><br />只说三分：<br />迭代到当前轮：<br />迭代的当前区间[l,r]，区间长度为d=r-l，那么三分点为m1=l+d，m2=r-d。4点三等分区间，这样保证每次迭代后，新区间变为原区间的2/3;如果用1/2,3/4分点的话，迭代后有可能变为原来的3/4,这样比较慢。log1.25(n)毕竟比log1.3333(n)要大啊～<br />设目标函数是f(x)，比较f(m1) , f(m2)，如果f(m1)比f(m2)更趋近峰值，那么就让r=m2,即右端点左移；反之左端点右移。仔细想想就是，如果左边更靠近峰值的话，那么肯定让右侧向左侧移动；反之亦然。<br />伪码：<br />while(l &lt; r)//dblcmp is preferred<br />{<br />d = (r - l) / 3;<br />m1 = l +d;<br />m2 = m1 +d;<br />if(f(m1) better than f(m2))<br />r = m2;<br />else<br />l = m1;<br />}<br />l or r is the solution<br /><br />下面谈到具体问题：<br />sgu 114, 题目大意就不说了，自己看去，抽象出来的方程就是。<br />f(x) = sum{|x-y[i]| * p[i]},i = 1 to n<br />ans = min(f(x)) 其中y[i]、p[i]给定<br />这题做法很多，求中位数、分段二分、三分皆可做；<br />说一下思路吧：<br />仔细观察发现，这是一个分段单调的函数。<br />以ｘ为自变量会发现，在每一个分段内，f(x) = f(floor(x)) + (sum{p[i]}(小于x的每个ｉ} - sum{p[i]}(大于x的每个i)) * (x - floor(x))<br />其中含有sum的那部分就是每个分段的不同点：斜率或者说单调性；可以发现这个单调性是随着x的增长（分段），不断下降的，从单调降逐渐过度到单调升（如果存在这两个过程的话）。<br />所以此函数单峰。。其他的就不用多说了。<br /><br />zoj 3421,10年成都现场赛F题，印象深刻啊，想当年不知道单峰函数可以三分，不然没准就可以拿到silver了。。<br /><br />一堆a&gt;=0的二次函数Si(x)，f(x) = max(Si(x))，求在x belongs to [0,1000]内的min(f(x))<br />稍微画一下图便可以看出来，f(x)的图像是一个单峰的函数，根据所有的Si(x)a&gt;=0也可以看出来，f(x)的函数值越靠近两侧应该越大，靠近中间应该越低，所以出现了谷（反着的峰哈。。）。。。然后三分之。。。<br />精度要求挺高，输出1e-4,而eps到1e-8竟然还不够，需要1e-10。。。<br />另外，输出的是f(ans)，不是ans。。。坑死我了，10多炮wa啊。。。<br />代码什么的就不attach了。<br />以上。。三分什么的，也是折半思想一种典型应用。欢迎吐槽+拍砖。<img src ="http://www.cppblog.com/aswmtjdsj/aggbug/166058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aswmtjdsj/" target="_blank">BUPT-[aswmtjdsj] @ Penalty</a> 2012-02-20 13:22 <a href="http://www.cppblog.com/aswmtjdsj/archive/2012/02/20/166058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一份题目包中的内容[for 出题者]</title><link>http://www.cppblog.com/aswmtjdsj/archive/2012/02/05/164964.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Sat, 04 Feb 2012 17:25:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2012/02/05/164964.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/164964.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2012/02/05/164964.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/164964.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/164964.html</trackback:ping><description><![CDATA[好久没写东西了，随便灌点水充充门面。<br /><br />最近总出题，作为一道比较正规的题目，它的题目包中应包含以下部分，我认为：<br /><br /><div><div>[] means '1 or more'</div><div>* means '0 is okay'</div><div>| means 'or'</div><div></div><div>*[Problem Description(zh_cn)]</div><div>Problem Description(en_us)</div><div>Additional Parts(img or others)</div><div>Data Generator(py or cpp or whatever)</div><div>Data(data.in and data.out)</div><div>*[Data Checker(py or cpp)]</div><div>*[Standard Program(brute-force)]//maybe the same as the one just above</div><div>*[Standard Program(AC with no STL)]</div><div>Standard Program(AC with total STL) &nbsp;&nbsp;</div><div>*[Standard Program(others')](For Check)&nbsp;</div><div>[Solution Report(zh_cn | en_us)]</div></div><img src ="http://www.cppblog.com/aswmtjdsj/aggbug/164964.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aswmtjdsj/" target="_blank">BUPT-[aswmtjdsj] @ Penalty</a> 2012-02-05 01:25 <a href="http://www.cppblog.com/aswmtjdsj/archive/2012/02/05/164964.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HDU 4087 &amp; BOJ 244 A Letter to Programmers 【三维仿射变幻的齐次矩阵乘+快速幂】</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/11/07/159777.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Mon, 07 Nov 2011 11:55:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/11/07/159777.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/159777.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/11/07/159777.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/159777.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/159777.html</trackback:ping><description><![CDATA[题意很裸，亮点在于将齐次仿射变换矩阵和快速幂结合起来。<br /><br />题目读入延续了pku出题的ws风格，还得用一个dfs处理读入。<br />题目输出也很蛋疼，标准写法竟然会导致-0.0出现，必须手动加一个eps来修改偏差。没有spj的二货。<br /><br />附上仿射变换矩阵：<br /><br />平移<br /><div><div>translate tx ty tz</div><div>1 0 0 tx</div><div>0 1 0 ty</div><div>0 0 1 tz</div><div>0 0 0 1</div><div>缩放</div><div>scale kx ky kz</div><div>kx 0 &nbsp;0 &nbsp;0</div><div>0 &nbsp;ky 0 &nbsp;0</div><div>0 &nbsp;0 &nbsp;kz 0</div><div>0 &nbsp;0 &nbsp;0 &nbsp;1</div><div>绕任意轴（过原点）旋转（注意要把轴向量归一化，不然会在&#8220;点在轴上&#8221;这个情况下出问题）</div><div>rotate x y z d</div><div>(1-cos(d))*x*x+cos(d) &nbsp; &nbsp; (1-cos(d))*x*y-sin(d)*z &nbsp; (1-cos(d))*x*z+sin(d)*y &nbsp; 0</div><div>(1-cos(d))*y*x+sin(d)*z &nbsp; (1-cos(d))*y*y+cos(d) &nbsp; &nbsp; (1-cos(d))*y*z-sin(d)*x &nbsp; 0</div><div>(1-cos(d))*z*x-sin(d)*y &nbsp; (1-cos(d))*z*y+sin(d)*x &nbsp; (1-cos(d))*z*z+cos(d) &nbsp; &nbsp; 0</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1<br /><br />附代码，一开始装b用stack模拟读入过程，re啊wa啊各种sb。最后被迫用了dfs。唉，naive。<br /><br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include&nbsp;&lt;iostream&gt;<br />#include&nbsp;&lt;cctype&gt;<br />#include&nbsp;&lt;cstdio&gt;<br />#include&nbsp;&lt;cstring&gt;<br />#include&nbsp;&lt;stack&gt;<br />#include&nbsp;&lt;cmath&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;eps&nbsp;=&nbsp;1e-6;<br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;pi&nbsp;=&nbsp;acos(-1.0);<br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;maxn&nbsp;=&nbsp;1005;<br /><span style="color: #0000FF; ">int</span>&nbsp;sgn(<span style="color: #0000FF; ">double</span>&nbsp;x){<span style="color: #0000FF; ">return</span>&nbsp;x&nbsp;&lt;&nbsp;-eps?-1:x&nbsp;&gt;&nbsp;eps;}<br /><span style="color: #0000FF; ">#define</span>&nbsp;rep(i,j,k)&nbsp;for(int&nbsp;(i)&nbsp;=&nbsp;(j);(i)&nbsp;&lt;&nbsp;(k);(i)&nbsp;++)<br /><span style="color: #0000FF; ">struct</span>&nbsp;matrix<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;r,c;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;v[5][5];<br />&nbsp;&nbsp;&nbsp;&nbsp;matrix(){}<br />&nbsp;&nbsp;&nbsp;&nbsp;matrix(<span style="color: #0000FF; ">int</span>&nbsp;a,<span style="color: #0000FF; ">int</span>&nbsp;b):r(a),c(b)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rep(i,0,r)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fill(v[i],v[i]&nbsp;+&nbsp;c,0.0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(r&nbsp;==&nbsp;c)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rep(i,0,r)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v[i][i]&nbsp;=&nbsp;1.0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;matrix&nbsp;init()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;matrix(r,c);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;matrix&nbsp;<span style="color: #0000FF; ">operator</span>&nbsp;*&nbsp;(<span style="color: #0000FF; ">const</span>&nbsp;matrix&nbsp;p)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matrix&nbsp;ans(r,p.c);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rep(i,0,r)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rep(j,0,ans.c)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;tmp&nbsp;=&nbsp;0.0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rep(k,0,c)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;+=&nbsp;v[i][k]&nbsp;*&nbsp;p.v[k][j];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans.v[i][j]&nbsp;=&nbsp;tmp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;ans;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />};<br />matrix&nbsp;power(matrix&nbsp;a,<span style="color: #0000FF; ">int</span>&nbsp;n)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;matrix&nbsp;e(a.c,a.c);<span style="color: #008000; ">//</span><span style="color: #008000; ">square&nbsp;matrix&nbsp;of&nbsp;a.c&nbsp;*&nbsp;a.c</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(n&nbsp;==&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;e;<br />&nbsp;&nbsp;&nbsp;&nbsp;matrix&nbsp;ans&nbsp;=&nbsp;power(a,n/2);<br />&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;=&nbsp;ans&nbsp;*&nbsp;ans;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(n%2)?ans&nbsp;*&nbsp;a&nbsp;:&nbsp;ans;<br />}<br /><span style="color: #0000FF; ">struct</span>&nbsp;point<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;x,y,z;<br />&nbsp;&nbsp;&nbsp;&nbsp;point(){}<br />&nbsp;&nbsp;&nbsp;&nbsp;point(<span style="color: #0000FF; ">double</span>&nbsp;a,<span style="color: #0000FF; ">double</span>&nbsp;b,<span style="color: #0000FF; ">double</span>&nbsp;c):x(a),y(b),z(c){}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;<span style="color: #0000FF; ">in</span>()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%lf&nbsp;%lf&nbsp;%lf",&amp;x,&amp;y,&amp;z);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;print()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%.2lf&nbsp;%.2lf&nbsp;%.2lf\n",x&nbsp;+&nbsp;eps,y&nbsp;+&nbsp;eps,z&nbsp;+&nbsp;eps);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}p[maxn];<br /><span style="color: #0000FF; ">int</span>&nbsp;n;<br />point&nbsp;fuck(point&nbsp;now,matrix&nbsp;a)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;matrix&nbsp;o(4,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;o.v[0][0]&nbsp;=&nbsp;now.x;<br />&nbsp;&nbsp;&nbsp;&nbsp;o.v[1][0]&nbsp;=&nbsp;now.y;<br />&nbsp;&nbsp;&nbsp;&nbsp;o.v[2][0]&nbsp;=&nbsp;now.z;<br />&nbsp;&nbsp;&nbsp;&nbsp;o.v[3][0]&nbsp;=&nbsp;1.0;<br />&nbsp;&nbsp;&nbsp;&nbsp;matrix&nbsp;ans&nbsp;=&nbsp;a&nbsp;*&nbsp;o;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;point(ans.v[0][0],ans.v[1][0],ans.v[2][0]);<br />}<br /><span style="color: #0000FF; ">char</span>&nbsp;op[20];<br />matrix&nbsp;dfs(<span style="color: #0000FF; ">int</span>&nbsp;times)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;matrix&nbsp;ans(4,4);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;v[5];<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;what;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%s",op)&nbsp;==&nbsp;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matrix&nbsp;temp(4,4);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(op[0]&nbsp;==&nbsp;'e')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(op[0]&nbsp;==&nbsp;'r')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(op[1]&nbsp;==&nbsp;'e')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;what);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;dfs(what);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rep(i,0,4)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%lf",&amp;v[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;l&nbsp;=&nbsp;0.0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rep(i,0,3)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;+=&nbsp;v[i]&nbsp;*&nbsp;v[i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;=&nbsp;sqrt(l);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v[3]&nbsp;=&nbsp;v[3]&nbsp;/&nbsp;180.0&nbsp;*&nbsp;pi;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;ct&nbsp;=&nbsp;cos(v[3]),st&nbsp;=&nbsp;sin(v[3]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rep(i,0,3)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v[i]&nbsp;/=&nbsp;l;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.v[0][0]&nbsp;=&nbsp;(1.0&nbsp;-&nbsp;ct)&nbsp;*&nbsp;v[0]&nbsp;*&nbsp;v[0]&nbsp;+&nbsp;ct;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.v[0][1]&nbsp;=&nbsp;(1.0&nbsp;-&nbsp;ct)&nbsp;*&nbsp;v[0]&nbsp;*&nbsp;v[1]&nbsp;-&nbsp;st&nbsp;*&nbsp;v[2];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.v[0][2]&nbsp;=&nbsp;(1.0&nbsp;-&nbsp;ct)&nbsp;*&nbsp;v[0]&nbsp;*&nbsp;v[2]&nbsp;+&nbsp;st&nbsp;*&nbsp;v[1];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.v[1][0]&nbsp;=&nbsp;(1.0&nbsp;-&nbsp;ct)&nbsp;*&nbsp;v[1]&nbsp;*&nbsp;v[0]&nbsp;+&nbsp;st&nbsp;*&nbsp;v[2];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.v[1][1]&nbsp;=&nbsp;(1.0&nbsp;-&nbsp;ct)&nbsp;*&nbsp;v[1]&nbsp;*&nbsp;v[1]&nbsp;+&nbsp;ct;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.v[1][2]&nbsp;=&nbsp;(1.0&nbsp;-&nbsp;ct)&nbsp;*&nbsp;v[1]&nbsp;*&nbsp;v[2]&nbsp;-&nbsp;st&nbsp;*&nbsp;v[0];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.v[2][0]&nbsp;=&nbsp;(1.0&nbsp;-&nbsp;ct)&nbsp;*&nbsp;v[2]&nbsp;*&nbsp;v[0]&nbsp;-&nbsp;st&nbsp;*&nbsp;v[1];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.v[2][1]&nbsp;=&nbsp;(1.0&nbsp;-&nbsp;ct)&nbsp;*&nbsp;v[2]&nbsp;*&nbsp;v[1]&nbsp;+&nbsp;st&nbsp;*&nbsp;v[0];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.v[2][2]&nbsp;=&nbsp;(1.0&nbsp;-&nbsp;ct)&nbsp;*&nbsp;v[2]&nbsp;*&nbsp;v[2]&nbsp;+&nbsp;ct;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(op[0]&nbsp;==&nbsp;'t')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rep(i,0,3)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%lf",&amp;v[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.v[i][3]&nbsp;=&nbsp;v[i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(op[0]&nbsp;==&nbsp;'s')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rep(i,0,3)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%lf",&amp;v[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.v[i][i]&nbsp;=&nbsp;v[i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;=&nbsp;temp&nbsp;*&nbsp;ans;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;power(ans,times);<br />}<br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%d",&amp;n)&nbsp;==&nbsp;1&nbsp;&amp;&amp;&nbsp;n)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matrix&nbsp;temp(4,4);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;dfs(1)&nbsp;*&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;i&nbsp;&lt;&nbsp;n;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[i].<span style="color: #0000FF; ">in</span>();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[i]&nbsp;=&nbsp;fuck(p[i],temp);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[i].print();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts("");<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div></div></div><div id="chromeVisPage2ExtensionDiv" style="display: none; ">Enter</div><div id="chromeVisExtension2PageDiv" style="display: none; "></div><span style="border-top-color: #000000; border-right-color: #000000; border-bottom-color: #000000; border-left-color: #000000; border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: groove; border-right-style: groove; border-bottom-style: groove; border-left-style: groove; position: absolute; z-index: 100000000000; min-height: 5px; border-top-left-radius: 7px 7px; border-top-right-radius: 7px 7px; border-bottom-right-radius: 7px 7px; border-bottom-left-radius: 7px 7px; display: none; top: 0px; min-width: 993px; max-width: 993px; left: 10px; right: 100px; "></span><div id="chromeVisBackground2LensDiv" style="display: none; "></div><img src ="http://www.cppblog.com/aswmtjdsj/aggbug/159777.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aswmtjdsj/" target="_blank">BUPT-[aswmtjdsj] @ Penalty</a> 2011-11-07 19:55 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/11/07/159777.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HDU 2297 Run 【半平面交 or 维护单调性】</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/11/05/159692.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Sat, 05 Nov 2011 13:32:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/11/05/159692.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/159692.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/11/05/159692.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/159692.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/159692.html</trackback:ping><description><![CDATA[题目大意：<br />给n个人参加赛跑，给出某一时刻每个人的位置和速度（保证单向，速度恒定，且互不相同，且不为0），问，假如无限跑下去，过程中有可能有多少个不同的人领先过？（如果某一时刻两人同时领先，则都不算）<br /><br />做法：<br />画成s-t图的话，很容易得出半平面交的做法，即以y轴和无穷远向这n条射线包围，求得围成的多边形内核上有多少条线段的问题（去掉y轴和无穷远）。<br />半平面交N^logN的我不会写，于是就用了himdd大神的模板，算法来源zzy大神的论文。<br />由于最后求得的点集可能有重点问题，需要先sort再unique一下去重。（表示这份代码用到了complex类，unique，distance等stl。。。太orz了）<br />代码：<br /><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include&lt;iostream&gt;<br />#include&lt;iomanip&gt;<br />#include&lt;cstdio&gt;<br />#include&lt;complex&gt;<br />#include&lt;algorithm&gt;<br />#include&lt;cmath&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;inf=1e-10;<br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;Max=60010;<br />typedef&nbsp;complex&lt;<span style="color: #0000FF; ">double</span>&gt;&nbsp;Point;<br />inline&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;dbcmp(<span style="color: #0000FF; ">double</span>&nbsp;tp){<span style="color: #0000FF; ">return</span>&nbsp;tp&lt;-inf?-1:tp&gt;inf;}<br /><span style="color: #0000FF; ">double</span>&nbsp;<span style="color: #0000FF; ">operator</span>^(Point&nbsp;a,Point&nbsp;b)<br />{<span style="color: #0000FF; ">return</span>&nbsp;imag(conj(a)*b);}<br /><span style="color: #0000FF; ">struct</span>&nbsp;Line{<br />&nbsp;&nbsp;&nbsp;&nbsp;Point&nbsp;a,b;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;angle;<br />&nbsp;&nbsp;&nbsp;&nbsp;Line(){}<br />&nbsp;&nbsp;&nbsp;&nbsp;Line(Point&nbsp;a,Point&nbsp;b):a(a),b(b){angle=arg(a-b);}<br />};<br /><span style="color: #0000FF; ">bool</span>&nbsp;<span style="color: #0000FF; ">operator</span>&lt;(Line&nbsp;p,Line&nbsp;l){<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;dbcmp(p.angle-l.angle)&lt;0||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(dbcmp(p.angle-l.angle)==0&amp;&amp;dbcmp(p.b-p.a^l.b-p.a)&lt;0);<br />}<br /><br />Point&nbsp;<span style="color: #0000FF; ">operator</span>*(<span style="color: #0000FF; ">const</span>&nbsp;Line&amp;&nbsp;u,<span style="color: #0000FF; ">const</span>&nbsp;Line&amp;v)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;Point&nbsp;tp=u.a;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;fz=u.a-v.a^v.b-v.a;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;fm=u.a-u.b^v.b-v.a;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;tp+(u.b-u.a)*fz/fm;<br />}<br /><span style="color: #0000FF; ">bool</span>&nbsp;onleft(Point&nbsp;p,Line&nbsp;u)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;dbcmp(p-u.a^u.b-u.a)&lt;=0;<br />}<br /><span style="color: #0000FF; ">bool</span>&nbsp;uniquecmp(Line&nbsp;u,Line&nbsp;v)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;a&nbsp;=&nbsp;dbcmp(u.angle-v.angle)==0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(a)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts("cao");<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;a;<br />}<br /><span style="color: #0000FF; ">bool</span>&nbsp;iter(Point&nbsp;p,Point&nbsp;q)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;dbcmp(real(p)&nbsp;-&nbsp;real(q))&nbsp;&lt;&nbsp;0&nbsp;||&nbsp;(dbcmp(real(p)&nbsp;-&nbsp;real(q))&nbsp;==&nbsp;0&nbsp;&amp;&amp;&nbsp;dbcmp(imag(p)&nbsp;-&nbsp;imag(q))&nbsp;&lt;&nbsp;0);<br />}<br />Point&nbsp;p[Max];<br />Line&nbsp;l[Max];<br /><span style="color: #0000FF; ">int</span>&nbsp;e[Max];<span style="color: #008000; ">//</span><span style="color: #008000; ">line的下标</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">int</span>&nbsp;get_kernel(Line&nbsp;*l,<span style="color: #0000FF; ">int</span>&nbsp;lsz,Point&nbsp;*p&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;eb=0,ee=2,pb=0,pe=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;sort(l,l+lsz);<br />&nbsp;&nbsp;&nbsp;&nbsp;p[lsz]=p[0];<br />&nbsp;&nbsp;&nbsp;&nbsp;lsz=distance(l,unique(l,l+lsz,uniquecmp));<br />&nbsp;&nbsp;&nbsp;&nbsp;e[0]=0;e[1]=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;p[0]=l[0]*l[1];<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=2;i&lt;lsz;i++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(pb!=pe&amp;&amp;!onleft(p[pe-1],l[i]))pe--,ee--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(pb!=pe&amp;&amp;!onleft(p[pb],l[i]))pb++,eb++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[pe++]=l[i]*l[e[ee-1]];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e[ee++]=i;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(pb!=pe&amp;&amp;!onleft(p[pe-1],l[e[eb]]))pe--,ee--;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">这个循环好像是没有用的。。</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(pb!=pe&amp;&amp;!onleft(p[pb],l[e[ee-1]]))pb++,eb++;<br />&nbsp;&nbsp;&nbsp;&nbsp;p[pe++]=l[e[pb]]*l[e[ee-1]];<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;psz=pe-pb;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;pb!=pe;i++)p[i]=p[pb++];<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;psz;<span style="color: #008000; ">//</span><span style="color: #008000; ">点的个数</span><span style="color: #008000; "><br /></span>}<br /><span style="color: #0000FF; ">bool</span>&nbsp;uniqueccc(Point&nbsp;p,Point&nbsp;q)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;&nbsp;dbcmp(real(p)-real(q))&nbsp;==&nbsp;0&nbsp;&amp;&amp;&nbsp;dbcmp(imag(p)-imag(q))==0;<br />}<br /><span style="color: #0000FF; ">void</span>&nbsp;gao()<br />{<span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n;<span style="color: #0000FF; ">int</span>&nbsp;lsz=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;n);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;x,y;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;n;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%lf%lf",&amp;x,&amp;y);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l[lsz++]=Line(Point(0,x),Point(1,x+y));<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;l[lsz++]=Line(Point(0,0),Point(1,0));<br />&nbsp;&nbsp;&nbsp;&nbsp;l[lsz++]=Line(Point(1e22,0),Point(1e22,1));<br />&nbsp;&nbsp;&nbsp;&nbsp;l[lsz++]=Line(Point(1,1e22),Point(0,1e22));<br />&nbsp;&nbsp;&nbsp;&nbsp;l[lsz++]=Line(Point(0,1e22),Point(0,0));<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;psz=get_kernel(l,lsz,p);<span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;sort(p,p&nbsp;+&nbsp;psz,iter);<br />&nbsp;&nbsp;&nbsp;&nbsp;psz&nbsp;=&nbsp;distance(p,unique(p,p&nbsp;+&nbsp;psz,uniqueccc));<span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",psz-2);<br />}<br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;t;<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;t);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;i&nbsp;&lt;&nbsp;t;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gao();<br />}</div>另一个做法：<br />学自各种大牛的单调栈。<br />对于所有元素按照p进行从大到小的排序。因为初始时刻p最大的一定是解集元素之一，<br />所以虚拟一个元素（p与p最大值相同，速度为0），把这个虚拟元素和第一元素压入栈中，作为初始化。<br />然后对于之后的第i个元素，先判断它是否比所有已出现过的元素v都大，如果不大于，则直接跳过（因为p小，v同，肯定追不上），再之后就比较该元素追上栈顶下一个元素和栈顶元素追上栈顶下一个元素的时间，如果该元素时间短，就弹栈，直到出现&gt;=为止，把该元素入栈。<br />最后栈中元素减一即为答案。<br />算法的原理在于，第一个元素肯定可以领先，然后就比较谁能更早的超过曾经领先过的元素，谁也就曾经&#8220;真的&#8221;领先过。<br />栈中元素保证了p单调非增，v单调增。维护出来的依旧是一个凸集，和半平面交效果相同。<br /><br />有一个问题，很值得思考，这个做法对于所有约束条件符号完全相同的线性规划问题，是有通解性的吧？ax + by + c &lt; 0，保证a，b，&lt; 分别同号的情况下。<br />&#8220;维护单调性&#8221;。orz这个神想法。<br />附代码：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include&nbsp;&lt;iostream&gt;<br />#include&nbsp;&lt;cstdio&gt;<br />#include&nbsp;&lt;cstring&gt;<br />#include&nbsp;&lt;cmath&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br />#include&nbsp;&lt;algorithm&gt;<br /><span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;50005<br />typedef&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;ll;<br /><span style="color: #0000FF; ">int</span>&nbsp;t,n;<br /><span style="color: #0000FF; ">struct</span>&nbsp;node<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;p,v;<br />&nbsp;&nbsp;&nbsp;&nbsp;node(){}<br />&nbsp;&nbsp;&nbsp;&nbsp;node(<span style="color: #0000FF; ">int</span>&nbsp;_p,<span style="color: #0000FF; ">int</span>&nbsp;_v):p(_p),v(_v){}<br />}nn[maxn];<br /><span style="color: #0000FF; ">int</span>&nbsp;ss[maxn];<br /><span style="color: #0000FF; ">bool</span>&nbsp;<span style="color: #0000FF; ">operator</span>&nbsp;&lt;&nbsp;(node&nbsp;a,node&nbsp;b){<span style="color: #0000FF; ">return</span>&nbsp;a.p&nbsp;&gt;&nbsp;b.p&nbsp;||&nbsp;(a.p&nbsp;==&nbsp;b.p&nbsp;&amp;&amp;&nbsp;a.v&nbsp;&lt;&nbsp;b.v);}<br /><span style="color: #0000FF; ">bool</span>&nbsp;ok(node&nbsp;a,node&nbsp;b,node&nbsp;c)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(ll)&nbsp;(b.p&nbsp;-&nbsp;c.p)&nbsp;*&nbsp;(ll)&nbsp;(a.v&nbsp;-&nbsp;b.v)&nbsp;&lt;=&nbsp;(ll)(b.p&nbsp;-&nbsp;a.p)&nbsp;*&nbsp;(ll)(c.v-b.v);<br />}<br /><span style="color: #0000FF; ">void</span>&nbsp;gao()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;n);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;a,b;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;i&nbsp;&lt;&nbsp;n;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d&nbsp;%d",&amp;a,&amp;b);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nn[i]&nbsp;=&nbsp;node(a,b);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;sort(nn,nn&nbsp;+&nbsp;n);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;top&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;nn[n]&nbsp;=&nbsp;node(nn[0].p,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;ss[0]&nbsp;=&nbsp;n;<br />&nbsp;&nbsp;&nbsp;&nbsp;ss[1]&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;fuck&nbsp;=&nbsp;nn[0].v;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;i&nbsp;&lt;&nbsp;n;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(nn[i].v&nbsp;&lt;&nbsp;fuck)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">continue</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fuck&nbsp;=&nbsp;nn[i].v;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(top&nbsp;&gt;&nbsp;0&nbsp;&amp;&amp;&nbsp;ok(nn[ss[top]],nn[ss[top-1]],nn[i]))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ss[++top]=i;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",top);<br />}<br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;t);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;i&nbsp;&lt;&nbsp;t;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gao();<br />}</div><img src ="http://www.cppblog.com/aswmtjdsj/aggbug/159692.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aswmtjdsj/" target="_blank">BUPT-[aswmtjdsj] @ Penalty</a> 2011-11-05 21:32 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/11/05/159692.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UVA 12303 Composite Transformations ［三维仿射矩阵］［更正：旋转轴归一化和平面三点式问题］</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/11/04/159593.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Thu, 03 Nov 2011 17:40:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/11/04/159593.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/159593.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/11/04/159593.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/159593.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/159593.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 三维仿射变换什么的，纠结了很多天想把绕任意轴旋转的齐次矩阵手推出来，最后，结果连sample都过不了，只能等回头再调了，目前先用着模板。所谓仿射变换，咱们通俗的讲就是通过补维把坐标转化为齐次矩阵的形式进行矩阵乘法，这样就能找到平移、拉伸、旋转的通式解。此处要用到的有三个变换矩阵：平移：(偏移量(dx,dy,dz))1 0 0 dx0 1 0 dy0 0 1 dz0 0 0 1放缩：(比例系数(sx...&nbsp;&nbsp;<a href='http://www.cppblog.com/aswmtjdsj/archive/2011/11/04/159593.html'>阅读全文</a><img src ="http://www.cppblog.com/aswmtjdsj/aggbug/159593.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aswmtjdsj/" target="_blank">BUPT-[aswmtjdsj] @ Penalty</a> 2011-11-04 01:40 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/11/04/159593.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ZJU 3551 Bloodsucker 【简单概率dp】</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/10/29/159321.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Sat, 29 Oct 2011 10:42:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/10/29/159321.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/159321.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/10/29/159321.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/159321.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/159321.html</trackback:ping><description><![CDATA[今天浙大月赛dp+数学专场。。俩小盆友不在，哥这个从来不写dp和数学的人表示很蛋疼。<br />很少写dp，很少写概率。哪怕写了一道水题也很高兴哇～<br />写一下吧～<br /><br />题目大意：<br />说你手里有n个生物，n-1个人，1个吸血鬼。每一天，你从这堆里面随机挑出两头来，如果是不同种，那么人就有p的概率会被同化为吸血鬼。<br />求一个期望，问给定n和p的情况下，所有人变吸血鬼的期望天数D。<br /><br />做法：<br />首先是要看出最基本的式子，就是在n个生物，n-x个人，x个吸血鬼的情况下抽出两头不同生物的概率：<br />假设分先后抽，那么先抽吸血鬼x / n , 后抽人 (n - x) / (n - 1) , 概率为 x * ( n - x) / (n * (n - 1))；先抽人 (n - x) / n , 后抽吸血鬼 x / (n - 1) , 概率为 x * (n - x) / (n * ( n - 1))。<br />所以th[x]（表示在n个生物，n-x个人，x个吸血鬼的情况下抽出两头不同生物的概率） = 2 * x * (n - x) / (n * (n - 1))。<br />然后就可以得出在某轮已有x个吸血鬼的前提下，吸血鬼数量增加1的概率为f[x] = th[x] * p 。而不变的概率则为g[x] = 1.0 - f[x]。<br />则可以建立如下概率转移图。Sx表示当前有x个吸血鬼。第k层的Sx的表示，到了第k-1天，有x个吸血鬼（的概率转移）。<br /><img src="http://www.cppblog.com/images/cppblog_com/aswmtjdsj/theory.jpg" border="0" alt="" width="1058" height="794" /><br /><br />所以可以看出Sx只和Sx-1和Sx本身有关。假设DP[x]表示由初始状态变成有x个吸血鬼所需天数的期望。<br />DP[x] = sigma(i = 1 to infinity)[f[x-1] * i * g[x-1] ^ (i - 1)]<br />而最终的期望即为所有期望之和ans = sigma(i=2 to n) DP[i]。<br />题目的关键就是DP[x]的求解，仔细观察这是一个等差乘等比的无穷级数求和，根据高中所学的错位相减法得到公式：<br />设Sn=DP[x],a=f[x-1],p=g[x-1]。则Sn-p*Sn=a+a*p+a*p^2....+a*p^n-1-n*a*p^n<br />Sn=[a*(1-p^n) - n*(1-p)*p^n]/(1-p)^2<br />lim(n-&gt;inf)Sn=a/(1-p)^2=1/a<br />所以最后的ans=sigma(1/a[i])=sigma(1.0/(2.0*p*i*(n-i)/(n*(n-1))))。<br />因为n在10^5级别，所以要用double乘，不然int会爆精度。<br /><br /><br />我也是可以做数学题的哈。<div id="chromeVisPage2ExtensionDiv" style="display: none; ">&#229;</div><div id="chromeVisExtension2PageDiv" style="display: none; ">forward sentence</div><span style="border-top-color: #000000; border-right-color: #000000; border-bottom-color: #000000; border-left-color: #000000; border-top-width: medium; border-right-width: medium; border-bottom-width: medium; border-left-width: medium; border-top-style: groove; border-right-style: groove; border-bottom-style: groove; border-left-style: groove; position: absolute; z-index: 100000000000; min-height: 5px; border-top-left-radius: 7px 7px; border-top-right-radius: 7px 7px; border-bottom-right-radius: 7px 7px; border-bottom-left-radius: 7px 7px; display: none; top: 0px; min-width: 993px; max-width: 993px; left: 10px; right: 100px; background-color: #ffffff; "></span><div id="chromeVisBackground2LensDiv" style="display: none; " data-textcolor="#000000" data-bgcolor="#FFFFFF"></div><img src ="http://www.cppblog.com/aswmtjdsj/aggbug/159321.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aswmtjdsj/" target="_blank">BUPT-[aswmtjdsj] @ Penalty</a> 2011-10-29 18:42 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/10/29/159321.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UVALIVE 5685 Difficult Routes ［最短路问题变形，坑爹题］</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/10/29/159297.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Fri, 28 Oct 2011 17:01:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/10/29/159297.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/159297.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/10/29/159297.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/159297.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/159297.html</trackback:ping><description><![CDATA[题目大意：<br />给你一个三维地图，里面N个点，给出对应的xyz坐标；给你M条边，连接对应编号的点。<br />每条边有两个值。<br />cost：两点的欧式距离。<br />d：两点的高度差（z轴差值的绝对值）除以两点在XY平面的投影的欧式距离，再乘以100，最后下取整，如果a点比b点高或者和b点持平，则d值为0。=&gt;所以边有向。<br />给你一个起始点编号一个终点编号，再给你一个目标值d。<br />让你找一条最短路径（cost和最小），要求起点终点为对应的点，且这条路径上的最大d值为给定d值。起终点可能相同。<br /><br />做法：<br />就是最短路嘛，特点是要求必须经过满足约束的边，那么就在松弛条件上面做手脚。<br />把dis数组开成两维的：dis[0][p]表示到该点还没满足条件时候的最短路，dis[1][p]表示到这点已经满足条件时候的最短路。<br />由于稀疏图，那么就开始spfa了。<br />从dis[0][s]=0开始，把其他所有值初始化置为－1或者inf。<br />松弛的时候这样，对于dis[0]，该咋松弛就咋松弛。<br />对于邻接表中当前边的d值等于给定d值，那么就用当前点的min(dis[0][now],dis[1][now])去更新下一点的dis[1][p]；<br />对于不等的情况，如果当前点的dis[1][now]不等于－1或者inf，那么就用dis[1][now]去更新dis[1][p]。<br />然后就完了。答案就是dis[1][t]。inf或者ans。<br /><br />坑爹之处在于题目中N和M的数据范围少给了个0，RE到死哇。。一开始还tmd TLE。。。擦。。。<br /><br />话说某些小盆友还用了spfa求最小环的想法，我觉得没必要的说。把满足条件后的点和不满足条件的点当成不同的点，那么根本就不存在环的问题了。。<br />对于起终点相同的情况，最短路径实际上的松弛方式就是i-&gt;j~k-&gt;i'。。。看嘛，哪里有环了。<br /><br />附代码：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">iostream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cstring</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cstdio</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cmath</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">queue</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;std;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n,m,s,t,d;<br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;maxn&nbsp;110005</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;maxm&nbsp;110005</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;eps&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;1e</span><span style="color: #000000; ">-</span><span style="color: #000000; ">8</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;sgn(</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;x){</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;fabs(x)&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;eps&nbsp;</span><span style="color: #000000; ">?</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;:&nbsp;x&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">eps&nbsp;</span><span style="color: #000000; ">?</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;:&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;}<br /></span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;edge<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;p,next,d;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;c;<br />&nbsp;&nbsp;&nbsp;&nbsp;edge(){}<br />&nbsp;&nbsp;&nbsp;&nbsp;edge(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;a,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;b,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;_c,</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;_d):p(a),next(b),d(_c),c(_d){}<br />}e[maxm];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;tot;<br /></span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;point<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;x,y,z;<br />&nbsp;&nbsp;&nbsp;&nbsp;point(){}<br />&nbsp;&nbsp;&nbsp;&nbsp;point(</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;a,</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;b,</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;c):x(a),y(b),z(c){}<br />&nbsp;&nbsp;&nbsp;&nbsp;point&nbsp;</span><span style="color: #0000FF; ">operator</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;point&nbsp;p)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;point(x&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;p.x,y&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;p.y,z&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;p.z);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;norm()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;sqrt(x&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;x&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;y&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;y&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;z&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;z);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;norm2()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;sqrt(x&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;x&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;y&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;y);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}p[maxn];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;st[maxn];<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;init()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;tot&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;fill(st,st&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;n&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />}<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;add(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;p,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;q,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;d,</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;c)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;e[tot]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;edge(q,st[p],d,c);<br />&nbsp;&nbsp;&nbsp;&nbsp;st[p]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;tot</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />}<br /></span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;dis[</span><span style="color: #000000; ">2</span><span style="color: #000000; ">][maxn];<br /></span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">[maxn];<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;bfs()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;j&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;j&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;n;j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dis[i][j]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1.0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;fill(</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;n&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;queue&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;Q;<br />&nbsp;&nbsp;&nbsp;&nbsp;Q.push(s);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">[s]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;dis[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">][s]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0.0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">Q.empty())<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;now&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Q.front();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Q.pop();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">[now]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;k&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;st[now];</span><span style="color: #000000; ">~</span><span style="color: #000000; ">k;k&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;e[k].next)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;mark&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;e[k].p;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;dd&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;e[k].d;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;cost&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;e[k].c;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(dd&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;d)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">continue</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">cout&nbsp;&lt;&lt;&nbsp;p&nbsp;&lt;&lt;&nbsp;'&nbsp;'&nbsp;&lt;&lt;&nbsp;dd&nbsp;&lt;&lt;&nbsp;'&nbsp;'&nbsp;&lt;&lt;&nbsp;cost&nbsp;&lt;&lt;&nbsp;endl;</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(sgn(dis[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">][p]</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">||</span><span style="color: #000000; ">&nbsp;sgn(dis[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">][p]&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;dis[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">][now]&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;cost)&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dis[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">][p]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;dis[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">][now]&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;cost,mark&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(dd&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;d)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;tmp&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(sgn(dis[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">][now]&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1.0</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;min(dis[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">][now],dis[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">][now]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;dis[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">][now];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(sgn(dis[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">][p]&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1.0</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">||</span><span style="color: #000000; ">&nbsp;sgn(dis[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">][p]&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;tmp&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;cost)&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dis[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">][p]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;tmp&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;cost,mark</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(sgn(dis[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">][now]</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;tmp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;dis[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">][now];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(sgn(dis[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">][p]&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1.0</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">||</span><span style="color: #000000; ">&nbsp;sgn(dis[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">][p]&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;tmp&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;cost)&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dis[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">][p]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;tmp&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;cost,mark</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(mark&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">!</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">[p])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Q.push(p);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">[p]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">if(Q.size()&nbsp;&gt;&nbsp;100000)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;"fuck"&nbsp;&lt;&lt;&nbsp;endl;</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;gao()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;x,y,z;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;n;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%lf&nbsp;%lf&nbsp;%lf</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">x,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">y,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">z);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[i]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;point(x,y,z);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;init();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;m;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;a,b;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d&nbsp;%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">a,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">b);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;fuck&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">)floor(</span><span style="color: #000000; ">100</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;fabs((p[b].z&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;p[a].z))&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;(p[a]&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;p[b]).norm2());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;l&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(p[a]&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;p[b]).norm();</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(sgn(p[a].z&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;p[b].z)&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(a,b,fuck,l);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(b,a,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,l);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(b,a,fuck,l);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(a,b,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,l);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d&nbsp;%d&nbsp;%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">s,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">t,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">d);<br />&nbsp;&nbsp;&nbsp;&nbsp;bfs();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;ans&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;dis[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">][t];<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">for(int&nbsp;i&nbsp;=&nbsp;1;i&nbsp;&lt;=&nbsp;n;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;printf("%.3lf&nbsp;%.3lf\n",dis[0][i],dis[1][i]);</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(sgn(ans&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1.0</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;puts(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">None</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%.3lf\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,ans);<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d&nbsp;%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">n,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">m)&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;(n&nbsp;</span><span style="color: #000000; ">||</span><span style="color: #000000; ">&nbsp;m))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gao();<br />}</span></div><div id="chromeVisPage2ExtensionDiv" style="display: none; ">Backspace</div><img src ="http://www.cppblog.com/aswmtjdsj/aggbug/159297.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aswmtjdsj/" target="_blank">BUPT-[aswmtjdsj] @ Penalty</a> 2011-10-29 01:01 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/10/29/159297.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>