﻿<?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/category/17252.html</link><description>My Way to Final</description><language>zh-cn</language><lastBuildDate>Wed, 09 Nov 2011 03:24:22 GMT</lastBuildDate><pubDate>Wed, 09 Nov 2011 03:24:22 GMT</pubDate><ttl>60</ttl><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>UVA 12304 2D Geometry 110 in 1! 【几何基础知识题】【敲个两三百行也没啥是吧？咱们都是纯爷们儿】</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/10/17/158526.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Mon, 17 Oct 2011 04:15:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/10/17/158526.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/158526.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/10/17/158526.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/158526.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/158526.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这题是RujiaLiu的几何专场中，第四简单的题目了。果断无脑流，果断需要敲无数行模板，果断需要考虑各种情况。还好srgba给的sample照顾到了所有情况，并且没有太卡精度，不过没有spj，不得不说老uva在这一点上太二了。题目六部分，六个和圆有关的问题。以及附上我的模板：预备知识（模板）：epssgn符号函数点（向量）类：构造、加、减、数乘（放缩）、点积、叉积、比较器、反向、法向、单位向量、向...&nbsp;&nbsp;<a href='http://www.cppblog.com/aswmtjdsj/archive/2011/10/17/158526.html'>阅读全文</a><img src ="http://www.cppblog.com/aswmtjdsj/aggbug/158526.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-17 12:15 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/10/17/158526.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RuJia Liu's Contest 4 For CG lovers［全是几何有木有！］［A-E done!!］［5/15］</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/10/01/157321.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Sat, 01 Oct 2011 15:53:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/10/01/157321.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/157321.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/10/01/157321.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/157321.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/157321.html</trackback:ping><description><![CDATA[srgba哥越来越重口了。<br />自从数据结构专场之后又出了一套几何专场。。我了个去。<br />目前本菜ac的只有前三题。。<br /><span class="Apple-style-span" style="color: #444444; font-family: 'Trebuchet MS', Verdana, Helvetica, Arial, sans-serif; font-size: 17px; line-height: normal; background-color: #ffffff; "><table cellpadding="4" cellspacing="0" border="0" width="100%" style="font-size: 17px; width: 1097px; margin-bottom: 0.5em; "><tbody style="font-size: 17px; "><tr class="sectiontableentry1" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f3f3; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; background-position: initial initial; background-repeat: initial initial; "><td align="center" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f3f3; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">A</td><td style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f3f3; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">Smallest Regular Polygon</td></tr></tbody></table></span>推个公式，本质就是拆分成n个小三角形的面积，n为偶时显然；n为奇时，长边对中心的角为(2pi/n)*floor(n/2)，易得中心到顶点的距离。<br /><span class="Apple-style-span" style="color: #444444; font-family: 'Trebuchet MS', Verdana, Helvetica, Arial, sans-serif; font-size: 17px; line-height: normal; background-color: #ffffff; "><table cellpadding="4" cellspacing="0" border="0" width="100%" style="font-size: 17px; width: 1097px; margin-bottom: 0.5em; "><tbody style="font-size: 17px; "><tr class="sectiontableentry2" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #eaeaea; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; background-position: initial initial; background-repeat: initial initial; "><td align="center" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #eaeaea; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">B</td><td style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #eaeaea; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">An Angular Puzzle</td></tr></tbody></table></span>就是初中时候的平面几何。可惜纯手推推不出公式来，无奈用了正弦＋余弦定理。无解是指内角和不为180，多解是骗人的。<br /><span class="Apple-style-span" style="color: #444444; font-family: 'Trebuchet MS', Verdana, Helvetica, Arial, sans-serif; font-size: 17px; line-height: normal; background-color: #ffffff; "><table cellpadding="4" cellspacing="0" border="0" width="100%" style="font-size: 17px; width: 1097px; margin-bottom: 0.5em; "><tbody style="font-size: 17px; "><tr class="sectiontableentry1" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f3f3; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; background-position: initial initial; background-repeat: initial initial; "><td align="center" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f3f3; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">C</td><td style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f3f3; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">Nine-Point Circle</td></tr></tbody></table></span>三点确定一个圆是大水题。<br /><span class="Apple-style-span" style="color: #444444; font-family: 'Trebuchet MS', Verdana, Helvetica, Arial, sans-serif; font-size: 17px; line-height: normal; background-color: #ffffff; "><table cellpadding="4" cellspacing="0" border="0" width="100%" style="font-size: 17px; width: 1097px; margin-bottom: 0.5em; "><tbody style="font-size: 17px; "><tr class="sectiontableentry2" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #eaeaea; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; background-position: initial initial; background-repeat: initial initial; "><td align="center" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #eaeaea; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">D</td><td style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #eaeaea; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">Composite Transformations<br /><br /></td></tr></tbody></table></span><strike>三维的仿射变换，还没写，好麻烦的。<br /></strike>终于搞定了。时隔一个月。<br /><div>http://www.cppblog.com/aswmtjdsj/archive/2011/11/04/159593.html</div><span class="Apple-style-span" style="color: #444444; font-family: 'Trebuchet MS', Verdana, Helvetica, Arial, sans-serif; font-size: 17px; line-height: normal; background-color: #ffffff; "><table cellpadding="4" cellspacing="0" border="0" width="100%" style="font-size: 17px; width: 1097px; margin-bottom: 0.5em; "><tbody style="font-size: 17px; "><tr class="sectiontableentry1" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; background-color: #f3f3f3; "><td align="center" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f3f3; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">E</td><td style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f3f3; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">2D Geometry 110 in 1!</td></tr></tbody></table></span><div><a href="http://www.cppblog.com/aswmtjdsj/archive/2011/10/17/158526.html">http://www.cppblog.com/aswmtjdsj/archive/2011/10/17/158526.html<br />花了</a>十天终于写完了。。。这。。。</div><span class="Apple-style-span" style="color: #444444; font-family: 'Trebuchet MS', Verdana, Helvetica, Arial, sans-serif; font-size: 17px; line-height: normal; background-color: #ffffff; "><table cellpadding="4" cellspacing="0" border="0" width="100%" style="font-size: 17px; width: 1097px; margin-bottom: 0.5em; "><tbody style="font-size: 17px; "><tr class="sectiontableentry2" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; background-color: #eaeaea; "><td align="center" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #eaeaea; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">F</td><td style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #eaeaea; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">Polishing a Extruded Polygon</td></tr></tbody></table></span>金属铸造属于线性规划问题。－－某《计算几何》书言<br /><span class="Apple-style-span" style="color: #444444; font-family: 'Trebuchet MS', Verdana, Helvetica, Arial, sans-serif; font-size: 17px; line-height: normal; background-color: #ffffff; "><table cellpadding="4" cellspacing="0" border="0" width="100%" style="font-size: 17px; width: 1097px; margin-bottom: 0.5em; "><tbody style="font-size: 17px; "><tr class="sectiontableentry1" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; background-color: #f3f3f3; "><td align="center" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f3f3; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">G</td><td style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f3f3; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">My SketchUp</td></tr></tbody></table></span>- -sketchup是个好软件啊。自己写就蛋疼了- -这尼玛模拟也太难了吧。<br /><span class="Apple-style-span" style="color: #444444; font-family: 'Trebuchet MS', Verdana, Helvetica, Arial, sans-serif; font-size: 17px; line-height: normal; background-color: #ffffff; "><table cellpadding="4" cellspacing="0" border="0" width="100%" style="font-size: 17px; width: 1097px; margin-bottom: 0.5em; "><tbody style="font-size: 17px; "><tr class="sectiontableentry2" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #eaeaea; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; background-position: initial initial; background-repeat: initial initial; "><td align="center" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #eaeaea; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">H</td><td style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #eaeaea; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">Smallest Enclosing Rectangle</td></tr></tbody></table></span>最小面积／周长包围矩形是旋转卡壳。<br /><span class="Apple-style-span" style="color: #444444; font-family: 'Trebuchet MS', Verdana, Helvetica, Arial, sans-serif; font-size: 17px; line-height: normal; background-color: #ffffff; "><table cellpadding="4" cellspacing="0" border="0" width="100%" style="font-size: 17px; width: 1097px; margin-bottom: 0.5em; "><tbody style="font-size: 17px; "><tr class="sectiontableentry1" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f3f3; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; background-position: initial initial; background-repeat: initial initial; "><td align="center" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f3f3; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">I</td><td style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f3f3; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">Smallest Enclosing Box</td></tr></tbody></table></span>最小包围长方体？？？这是神马？！（三维旋转卡壳？？？）<br /><span class="Apple-style-span" style="color: #444444; font-family: 'Trebuchet MS', Verdana, Helvetica, Arial, sans-serif; font-size: 17px; line-height: normal; background-color: #ffffff; "><table cellpadding="4" cellspacing="0" border="0" width="100%" style="font-size: 17px; width: 1097px; margin-bottom: 0.5em; "><tbody style="font-size: 17px; "><tr class="sectiontableentry2" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; background-color: #eaeaea; "><td align="center" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #eaeaea; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">J</td><td style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; background-color: #eaeaea; ">A Strange Opera House II</td></tr></tbody></table></span>光线反射，又一个坑爹题。（邓老师的书上有伪代码的样子。。）<br /><span class="Apple-style-span" style="color: #444444; font-family: 'Trebuchet MS', Verdana, Helvetica, Arial, sans-serif; font-size: 17px; line-height: normal; background-color: #ffffff; "><table cellpadding="4" cellspacing="0" border="0" width="100%" style="font-size: 17px; width: 1097px; margin-bottom: 0.5em; "><tbody style="font-size: 17px; "><tr class="sectiontableentry1" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f3f3; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; background-position: initial initial; background-repeat: initial initial; "><td align="center" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f3f3; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">K</td><td style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f3f3; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">Point Location</td></tr></tbody></table></span>平面点定位，邓老师的书：梯形剖分。<br /><span class="Apple-style-span" style="color: #444444; font-family: 'Trebuchet MS', Verdana, Helvetica, Arial, sans-serif; font-size: 17px; line-height: normal; background-color: highlight; "><table cellpadding="4" cellspacing="0" border="0" width="100%" style="font-size: 17px; width: 1097px; margin-bottom: 0.5em; "><tbody style="font-size: 17px; "><tr class="sectiontableentry2" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #eaeaea; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; background-position: initial initial; background-repeat: initial initial; "><td align="center" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #eaeaea; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">L</td><td style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #eaeaea; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">All-Pair Farthest Points</td></tr></tbody></table></span>卡了好久，旋转卡壳处理共线点的时候会有各种bug，尤其这题还给了一个凸包。。。正解到底是神马？voronoi图？（据说三分可过）<br /><span class="Apple-style-span" style="color: #444444; font-family: 'Trebuchet MS', Verdana, Helvetica, Arial, sans-serif; font-size: 17px; line-height: normal; background-color: #ffffff; "><table cellpadding="4" cellspacing="0" border="0" width="100%" style="font-size: 17px; width: 1097px; margin-bottom: 0.5em; "><tbody style="font-size: 17px; "><tr class="sectiontableentry1" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f3f3; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; background-position: initial initial; background-repeat: initial initial; "><td align="center" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f3f3; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">M</td><td style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f3f3; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">Bounding Volume Hierarchy</td></tr></tbody></table></span>这题太nb了。。。。。空间子区域划分。。。。。八叉树神马？！？<br /><span class="Apple-style-span" style="color: #444444; font-family: 'Trebuchet MS', Verdana, Helvetica, Arial, sans-serif; font-size: 17px; line-height: normal; background-color: #ffffff; "><table cellpadding="4" cellspacing="0" border="0" width="100%" style="font-size: 17px; width: 1097px; margin-bottom: 0.5em; "><tbody style="font-size: 17px; "><tr class="sectiontableentry2" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #eaeaea; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; background-position: initial initial; background-repeat: initial initial; "><td align="center" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #eaeaea; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">N</td><td style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #eaeaea; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">A Tiny Raytracer</td></tr></tbody></table></span>lrj坑爹题。。。<br /><span class="Apple-style-span" style="color: #444444; font-family: 'Trebuchet MS', Verdana, Helvetica, Arial, sans-serif; font-size: 17px; line-height: normal; background-color: #ffffff; "><table cellpadding="4" cellspacing="0" border="0" width="100%" style="font-size: 17px; width: 1097px; margin-bottom: 0.5em; "><tbody style="font-size: 17px; "><tr class="sectiontableentry1" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; background-color: #f3f3f3; "><td align="center" style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f3f3; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">O</td><td style="font-size: 17px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f3f3; border-bottom-style: solid; border-bottom-color: #eaeaea; padding-top: 0.2em; padding-right: 0.25em; padding-bottom: 0.2em; padding-left: 0.25em; ">The Cleaning Robot</td></tr></tbody></table></span>机器人运动路径规划。。。脑中瞬间浮现了四个字&#8220;随意所之&#8221;。<br /><br />感觉乳鸽就是把那本计算几何书上的算法出了一遍。。全身心坑爹。。。 <div id="chromeVisPage2ExtensionDiv" style="display: none; ">.</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: 1226px; max-width: 1226px; left: 10px; right: 100px; "></span><div id="chromeVisBackground2LensDiv" 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> <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: 1226px; max-width: 1226px; left: 10px; right: 100px; "></span><img src ="http://www.cppblog.com/aswmtjdsj/aggbug/157321.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-01 23:53 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/10/01/157321.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BOJ 1790 Blow up the bridge 【弧扫描】</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/09/24/156714.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Sat, 24 Sep 2011 12:46:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/09/24/156714.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/156714.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/09/24/156714.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/156714.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/156714.html</trackback:ping><description><![CDATA[链接：<a href="http://o.boj.me/onlinejudge/showproblem.php?problem_id=1790">http://o.boj.me/onlinejudge/showproblem.php?problem_id=1790</a><br />这是我们那年（10年）校赛网络预赛的一道不是很难的题。可是事后我做了一个星期也还是WAWATLETLE。。。<br /><span style="color: #000000; ">现在想来当年还是太naive了，用了一些乱七八糟甚至不是算法的算法外加了一大堆补丁妄图水过此题。但是事实证明歪门邪道不会带来AC。<br />经历了那么多以后，虽然我还是蒟蒻，但是好歹掌握了多一点的东西了，于是这题隐约可捉了。<br /><br />题目大意：<br />一条线段，N个圆，问这条线段上没被圆覆盖的部分的长度是多少。<br /><br />做法：<br />弧扫描。<br />求出这N个圆与线段所在直线的两个交点（如果有），定一个序，低优先级的为入点，标0，高的为出点，标1；把线段的两个端点标为其他标记，比如2。然后将这最多2*N+2个点排序，按序扫描一遍。<br />当遇到第一次2且没有遇到第二次2的时候进行统计，初始化in=0，out=0，遇0，in++；遇1，out++；当in==out的时候，加上该点到下一点的距离，而这个就是距离就是未被覆盖的长度的一部分。归纳可知，正确性显然。此即为弧扫描的最简单应用。类似思想出现在poj1981，定长半径圆覆盖最多点问题。<br />直线方程竟然解错了导致wa了一次，太二了。<br />x + b * y + c = 0 =&gt; b = -(x1-x2)/(y1-y2)!!!!!<br /><br />犯了错误，我们才会思考；找到不足，我们才能进步。<br /><br /><br /></span><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"><span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cstdio</span><span style="color: #000000; ">&gt;<br /></span><span style="color: #000000; "><div><span style="color: #000000; ">#include &lt;</span><span style="color: #000000; ">iostream</span><span style="color: #000000; ">&gt;</span></div>#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; ">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; ">algorithm</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;sqr(x)&nbsp;((x)&nbsp;*&nbsp;(x))</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; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;pi&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;acos(</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1.0</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; ">#define</span><span style="color: #000000; ">&nbsp;maxn&nbsp;1005</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;comp(</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;x)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</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</span><span style="color: #000000; ">?</span><span style="color: #000000; ">0</span><span style="color: #000000; ">:x&nbsp;</span><span style="color: #000000; ">&lt;-</span><span style="color: #000000; ">eps</span><span style="color: #000000; ">?-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">:</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />}<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;<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):x(a),y(b){}<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; ">(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);<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(sqr(x)&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;sqr(y));<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />};<br /></span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;circle<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;point&nbsp;c;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;r;<br />&nbsp;&nbsp;&nbsp;&nbsp;circle(){}<br />&nbsp;&nbsp;&nbsp;&nbsp;circle(point&nbsp;_c,</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;_r):c(_c),r(_r){}<br />}c[maxn];<br /></span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;line<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;point&nbsp;p,q;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;a,b,c;<br />&nbsp;&nbsp;&nbsp;&nbsp;line(){}<br />&nbsp;&nbsp;&nbsp;&nbsp;line(point&nbsp;_p,point&nbsp;_q):p(_p),q(_q)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(comp(p.x&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;q.x)&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;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1.0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">p.x;<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; ">&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(comp(p.y&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;q.y)&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;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1.0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">p.y;<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;a&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1.0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">(p.x&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;q.x)&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;(p.y&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;q.y);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">(b&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;p.y&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;p.x);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}L;<br /></span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;sol<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;point&nbsp;p;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;flag;<br />&nbsp;&nbsp;&nbsp;&nbsp;sol(){}<br />&nbsp;&nbsp;&nbsp;&nbsp;sol(point&nbsp;_p,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;_f):p(_p),flag(_f){}<br />}s[maxn&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">];<br /></span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">operator</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;point&nbsp;a,</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;point&nbsp;b)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;comp(a.x&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;b.x)&nbsp;</span><span style="color: #000000; ">&lt;</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;(comp(a.x&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;b.x)&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; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;comp(a.y&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;b.y)&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 />}<br /></span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">operator</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;sol&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">a,</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;sol&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">b)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;a.p&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;b.p;<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n;<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;calc(circle&nbsp;o,point&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">p,point&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">q)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;A,B,C,det;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(comp(L.a)&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;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;sqr(L.a)&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;sqr(L.b);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2.0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;L.a&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;(L.c&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;L.b&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;o.c.y)&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2.0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;sqr(L.b)&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;o.c.x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;sqr(L.c&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;L.b&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;o.c.y)&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;sqr(L.b)&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;(sqr(o.c.x)&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;sqr(o.r));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;det&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;sqr(B)&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">4.0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;A&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;C;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(comp(det)&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;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;q&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;L.p;<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;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(comp(det)&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;det&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.x&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">-</span><span style="color: #000000; ">B&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;sqrt(det))</span><span style="color: #000000; ">/</span><span style="color: #000000; ">(</span><span style="color: #000000; ">2.0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;A);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q.x&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">-</span><span style="color: #000000; ">B&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;sqrt(det))</span><span style="color: #000000; ">/</span><span style="color: #000000; ">(</span><span style="color: #000000; ">2.0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;A);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.y&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">(L.a&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;p.x&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;L.c)&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;L.b;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q.y&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">(L.a&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;q.x&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;L.c)&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;L.b;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(q&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;p)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap(p,q);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;sqr(L.a)&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;sqr(L.b);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2.0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;(L.b&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;L.c&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;L.a&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;L.b&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;o.c.x&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;sqr(L.a)&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;o.c.y);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;sqr(L.c&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;L.a&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;o.c.x)&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;sqr(L.a)&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;(sqr(o.c.y)&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;sqr(o.r));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;det&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;sqr(B)&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">4.0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;A&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;C;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(comp(det)&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;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;q&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;L.p;<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;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(comp(det)&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;det&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.y&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">-</span><span style="color: #000000; ">B&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;sqrt(det))&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">2.0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;A);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q.y&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">-</span><span style="color: #000000; ">B&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;sqrt(det))&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">2.0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;A);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.x&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">(L.b&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;p.y&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;L.c)&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;L.a;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q.x&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">(L.b&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;q.y&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;L.c)&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;L.a;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(q&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;p)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap(p,q);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<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</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">n)&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;n)<br />&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;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;n;i</span><span style="color: #000000; ">++</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;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;x,y,r;<br />&nbsp;&nbsp;&nbsp;&nbsp;&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; ">r);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c[i]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;circle(point(x,y),r);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;x1,x2,y1,y2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%lf&nbsp;%lf</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">x1,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">y1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%lf&nbsp;%lf</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">x2,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">y2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;L&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;line(point(x1,y1),point(x2,y2));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;cnt&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;s[cnt</span><span style="color: #000000; ">++</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;sol(point(x1,y1),</span><span style="color: #000000; ">2</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s[cnt</span><span style="color: #000000; ">++</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;sol(point(x2,y2),</span><span style="color: #000000; ">2</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;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;n;i</span><span style="color: #000000; ">++</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;point&nbsp;p,q;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;calc(c[i],p,q);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s[cnt</span><span style="color: #000000; ">++</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;sol(p,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s[cnt</span><span style="color: #000000; ">++</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;sol(q,</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(s,s&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;cnt);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;mark&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</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;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">out</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;</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;</span><span style="color: #000000; ">0.0</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;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;cnt&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">++</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;</span><span style="color: #0000FF; ">switch</span><span style="color: #000000; ">(s[i].flag)<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; ">case</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;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">++</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;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">case</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</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;</span><span style="color: #0000FF; ">out</span><span style="color: #000000; ">++</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;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">case</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</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;mark</span><span style="color: #000000; ">++</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;</span><span style="color: #0000FF; ">break</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; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">out</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;(s[i].p&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;s[i</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].p).norm();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%.4lf\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,ans);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span></div> <div id="chromeVisPage2ExtensionDiv" style="display: none; ">&#229;</div><div id="chromeVisExtension2PageDiv" style="display: none; ">forward word</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/156714.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-09-24 20:46 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/09/24/156714.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HDU 4024 Dwarven Sniper’s hunting【水二分】</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/09/10/155528.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Sat, 10 Sep 2011 13:09:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/09/10/155528.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/155528.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/09/10/155528.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/155528.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/155528.html</trackback:ping><description><![CDATA[这。。。。。这题难道自带&#8220;错误题意引导&#8221;？？？为啥我就算读对了题意，想对了做法，结果敲的时候又按照错误的想法敲了呢？伤不起。。<br />其实04题才是本场最水题，但是- -题意太坑爹了。唉。<br /><br />题意：<br />二维平面追击。<br />被追击的人有起始坐标，有一个速度矢量，从开始就一直在走。<br />追击者有起始坐标，有运动速率，射出的子弹也有一个速率。子弹有一个有效射击半径。<br />就问，在子弹飞行距离最远的情况下，让总追击时间（被追击者被击中前的运动时间）最短，最远距离是多少，最短时间是多少。（一直搞反了题意。妹的。）<br />条件保证，1e9的时间内一定有解，被追者速率&lt;追者速率&lt;子弹速率。<br />第二个条件保证了，时间短的时候打不中的话，将时间拉长就一定能打中。<br />做法：<br />由于一定有解，为了让飞行距离最长，那么就让它等于射击半径。<br />果断二分总时间。<br />得出被追者当前坐标，算出与追击者起始坐标的距离。以射击半径画圆，判断追击者是在圆内还是圆外。并算出小圆半径（即去除子弹时间的剩余时间乘以追击者的运动速率）。判断两圆状态，相离或相切则l = mid，相交则r=mid。（前者表示打不着还需要继续跑，后者表示打到了但不是最优所以要缩短）。<br />二分中间的某些状态大概可以表示追击者跑到某个地方停了下来，然后等被追击者跑到指定位置再开始秀枪法；但鉴于最优解一定不需要让追击者有等待时间，所以最后的最优状态一定是相切的。<br />话说因为不小心用到了除法，所以eps开到1e-6会被卡精度，所以没办法只能1e-8了。。第一次写的时候开到1e-6竟然连样例都有精度差，这。。。<br /><br />唉，被题意坑啊，自己脑子笨，想不清楚二分啊，我弱爆了。<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; ">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; ">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; ">cmath</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; ">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; ">6</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;inf&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;1e9;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;comp(</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;x)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(fabs(x)&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;eps)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&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; ">(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)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</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;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />}<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;<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):x(a),y(b){}<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);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<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; ">(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;a)<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;a,y&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;a);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<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; ">(</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);<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);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}p1,p2,L;<br /></span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;vd,vb,limit;<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; ">%lf&nbsp;%lf&nbsp;%lf&nbsp;%lf&nbsp;%lf&nbsp;%lf&nbsp;%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; ">p1.x,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">p1.y,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">p2.x,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">p2.y,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">L.x,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">L.y,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">vd,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">vb,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">limit)&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">9</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">comp(p1.x)&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">!</span><span style="color: #000000; ">comp(p1.y)&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">!</span><span style="color: #000000; ">comp(p2.x)&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">!</span><span style="color: #000000; ">comp(p2.y)&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">!</span><span style="color: #000000; ">comp(L.x)&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">!</span><span style="color: #000000; ">comp(L.y)&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">!</span><span style="color: #000000; ">comp(vd)&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">!</span><span style="color: #000000; ">comp(vb)&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">!</span><span style="color: #000000; ">comp(limit))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;t2&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;limit&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;vb;<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;</span><span style="color: #000000; ">0.0</span><span style="color: #000000; ">,r&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;inf,mid;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(comp(l&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;r)&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;mid&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(l&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;r)&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2.0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;point&nbsp;now&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;p1&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;L&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;mid;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(comp(t2&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;mid)&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;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;mid;<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;}<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;d&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(now&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;p2).norm();<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;most&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(mid&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;t2)&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;vd;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(comp(d&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;limit)&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;&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; ">if</span><span style="color: #000000; ">(comp(d&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;most&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;limit)&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;mid;<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;r&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;mid;<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; "><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; ">if</span><span style="color: #000000; ">(comp(most&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;limit&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;d)&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;mid;<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;r&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;mid;<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;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%.3lf&nbsp;%.3lf\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,limit,mid);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span></div><div id="chromeVisPage2ExtensionDiv" style="display: none; ">&#229;</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/155528.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-09-10 21:09 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/09/10/155528.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>二维 &amp; 三维费马点问题【没有理论研究，只有代码研究】</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/09/09/155475.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Fri, 09 Sep 2011 12:23:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/09/09/155475.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/155475.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/09/09/155475.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/155475.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/155475.html</trackback:ping><description><![CDATA[模拟退火什么的我只知道一个大概思想，然后会很矬的去实现它。近似算法真心伤不起啊唉。<br />例题：poj 2420 【二维多边形费马点】 ， uva 5102 【福州现场赛E题，四边形费马点，有结论，所以模拟退火应该不算正解】， ZOJ 2928 【三维费马点】。<br /><br />模拟退火神马的就是一个迭代过程，在每次迭代中向所有可能的方向试探，然后选取其中最优的一个作为下一次的迭代起点；为了让迭代能够终止，设定了一个步长，每次迭代之后步长乘以一个小于1的系数来减小步长。<br />迭代方式是相同的，就是向所有可能的方向试探，再按规则模拟计算结果，比如二维点就是向8个方向试探之后再计算到所有点的距离和，而三维点就是26个方向了。<br />初始步长作为上界，这个该怎么设定我一直不太清楚，我反正是用最大可能步长作为上界的；初始迭代点，随手设置一个吧，我用的是所有点坐标的算术平均数，也可以用原点之类，但是我觉得无论选择啥点都不能保证绝对的正确性的吧（否则，&#8220;图灵奖&#8221;。。。）；迭代步长系数，好像我的写法比较矬？导致我必须把系数设到0.993以上才能过题，真是弱爆了；至于精度下界就设为1e-10就好了，反正不要钱，哈。<br /><br />模拟退火的一大弊端在于，如果进入了某个次优解点的邻域，且此时步长已经很小的话，那很有可能就会陷入这个次优解邻域的漩涡里（俗话说叫掉坑里？好像有专业名词叫鞍点或者涡点什么的？我数学不太好不好意思。。），然后再也跑不出来。所以近似算法毕竟是&#8220;近似&#8221;算法，想避免掉入坑里，只能去优化写法或者找出答案的某种规律性，来分段或者剪枝迭代什么的。。我是玩不转这个了，如上所述的三题，我加起来交了五六十次了吧？总之是没有找到一组又能ac又快的好参数。唉。<br />我若爆了。。<br /><br />附代码吧，以2928题为例：<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; ">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; ">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; ">cmath</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;maxn&nbsp;105</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; ">12</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;comp(</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;x)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(fabs(x)&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;eps)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&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; ">(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)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</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;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />}<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; ">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(</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;a&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;b&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;c&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">):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;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;point&nbsp;</span><span style="color: #0000FF; ">operator</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;a)<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;a,y&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;a,z&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;a);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}p[maxn],fermat,dir[</span><span style="color: #000000; ">30</span><span style="color: #000000; ">];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n;<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</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">n)&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br />&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;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;n;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&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; ">p[i].x,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">p[i].y,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">p[i].z);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;cnt&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;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">=-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&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</span><span style="color: #000000; ">=-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;j</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;k&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;k</span><span style="color: #000000; ">++</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;dir[cnt</span><span style="color: #000000; ">++</span><span style="color: #000000; ">]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;point(i,j,k);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;step&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">100</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;point&nbsp;now,ans;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;temp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;1e10,calc;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;point&nbsp;sel;<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;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;n;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ans&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;p[i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;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: #0000FF; ">double</span><span style="color: #000000; ">)n);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(step&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;eps)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sel&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ans;<br />&nbsp;&nbsp;&nbsp;&nbsp;&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;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;cnt;i</span><span style="color: #000000; ">++</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;calc&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;now&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ans&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;dir[i]&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;step;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;idx&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;idx&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;n;idx</span><span style="color: #000000; ">++</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;calc&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;(p[idx]&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;now).norm();<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; ">(comp(calc&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;temp)&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;&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;&nbsp;&nbsp;sel&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;now;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;calc;<br />&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;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;sel;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;step&nbsp;</span><span style="color: #000000; ">*=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0.993</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%.3f&nbsp;%.3f&nbsp;%.3f\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,ans.x,ans.y,ans.z);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</span></div><img src ="http://www.cppblog.com/aswmtjdsj/aggbug/155475.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-09-09 20:23 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/09/09/155475.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UVA 5100 &amp;&amp; FZU 2002 Shade of Hallelujah Mountain 【三维旋转、投影+凸包】</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/09/07/155232.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Wed, 07 Sep 2011 02:03:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/09/07/155232.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/155232.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/09/07/155232.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/155232.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/155232.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 好恶心的一题。给一个点，一个多面体，一个平面，假设点是光源，那么就问，多面体在平面上的投影面积为多少。做法：hint还是比较人道的，提示了旋转平面把三维凸包转成二维凸包的方法。（其实不能算是三维凸包，只不过是三维空间内的二维凸包；hint转化之后就变成了二维空间的二维凸包。）平面给的是平面方程Ax+By+Cz=D，那么平面法向量为(A,B,C)。目标是把平面旋转到和Z平面平行。根据hint的提示，...&nbsp;&nbsp;<a href='http://www.cppblog.com/aswmtjdsj/archive/2011/09/07/155232.html'>阅读全文</a><img src ="http://www.cppblog.com/aswmtjdsj/aggbug/155232.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-09-07 10:03 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/09/07/155232.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HDU 4007 Dave 【双扫描线暴力】</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/09/04/155049.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Sun, 04 Sep 2011 04:04:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/09/04/155049.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/155049.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/09/04/155049.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/155049.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/155049.html</trackback:ping><description><![CDATA[比赛的时候用线段树做这题要么是不嫌麻烦就是贴标程了。。。那么水的题，1000的数据范围，果断N^2暴力啊。。<br />场上的时候claire大神瞬间1A，太犀利了。<br />维护四根双维度扫描线。<br />把读入的点copy一遍，一组x排序，一组y排序，用于两种扫描线的统计。<br />两根水平的，一左一右，保证距离不大于R；两根竖直的，用于统计，保证距离不大于R，且对于线框内的每个点判断是否在水平两根线的范围内，如果是则计数器加1，且当下扫描线上移时，如果是已经统计过的点则计数器减1。整体的思想类似队列。<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; ">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; ">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; ">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; ">algorithm</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; ">#define</span><span style="color: #000000; ">&nbsp;maxn&nbsp;1005</span><span style="color: #000000; "><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; ">int</span><span style="color: #000000; ">&nbsp;x,y;<br />&nbsp;&nbsp;&nbsp;&nbsp;point(){}<br />&nbsp;&nbsp;&nbsp;&nbsp;point(</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):x(a),y(b){}<br />}ver[maxn],par[maxn];<br /></span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;cmpx(point&nbsp;a,point&nbsp;b)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;a.x&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;b.x;<br />}<br /></span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;cmpy(point&nbsp;a,point&nbsp;b)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;a.y&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;b.y;<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n,R;<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; ">R)&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">)<br />&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;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;n;i</span><span style="color: #000000; ">++</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;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;a,b;<br />&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;ver[i]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;point(a,b);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;par[i]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;point(a,b);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(ver,ver&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;n,cmpy);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(par,par&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;n,cmpx);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;posl,posr,posu,posd;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;l&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,r&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,u&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,d&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;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;ans&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;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(l&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;l&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;n;l</span><span style="color: #000000; ">++</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;posl&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;par[l].x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(par[r].x&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;posl&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;R&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;r&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;n)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;posr&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;par[r&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u&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;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;temp&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;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(d&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;d&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;n;d</span><span style="color: #000000; ">++</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;posd&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ver[d].y;<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; ">(d&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; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;ver[d&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].x&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;posr&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;ver[d&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].x&nbsp;</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">&nbsp;posl)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(;u&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;n;u</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(ver[u].y&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;posd&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;R)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</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;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(ver[u].x&nbsp;</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">&nbsp;posl&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;ver[u].x&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;posr)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;max(ans,temp);<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; ">(u&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; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</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;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,ans);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span></div><div id="chromeVisPage2ExtensionDiv" style="display: none; ">&#229;</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/155049.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-09-04 12:04 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/09/04/155049.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FZU 1981 Three Kingdoms 【排序+二分】</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/09/02/154969.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Fri, 02 Sep 2011 12:06:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/09/02/154969.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/154969.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/09/02/154969.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/154969.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/154969.html</trackback:ping><description><![CDATA[2010福州网预的题目<br />M个点，向N个点发出射线，方向向量为同一向量。(M &lt;= 10000,N &lt;= 10000)坐标都是三维。<br />问这N个点中最多有多少个点被射中。<br /><br />做法：排序+二分，O((M+N)logM)<br />因为方向向量的模恒不为0。那么就可以利用方向向量来投影。<br />将M个点投射到同一平面内（方向向量的三维，哪一维不为0，就投射到哪一维对应的品面），构造一个新的数据组，维护其他两维和放缩比例。然后将这个新数组排序。比较级为先p，后q，再val。<br />接下来，对N个点中的每个也按同样方式投射，二分查找在平面内的所在位置，判断所在位置是否与M个点中的某个点的投影重合，再判断放缩比例是否符合要求（放缩变量越大说明点越靠&#8220;后&#8221;），统计即可。<br />这题坑爹的卡STL，set、map均超时，用了lower_bound才过，而且竟然比我手写的二分还快。泪目。。卡了一年的题终于过了。<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; ">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; ">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; ">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; ">algorithm</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;maxn&nbsp;10005</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;t,n,m;<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;comp(</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;x)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</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;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />}<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;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;read()<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;}<br />}cro[maxn],ene[maxn],vec;<br /></span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;sol<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;x,y,val;<br />&nbsp;&nbsp;&nbsp;&nbsp;sol(){}<br />&nbsp;&nbsp;&nbsp;&nbsp;sol(</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;e):x(a),y(b),val(e){}<br />}s[maxn];<br /></span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">operator</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;sol&nbsp;a,</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;sol&nbsp;b)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;comp(a.x&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;b.x)&nbsp;</span><span style="color: #000000; ">&lt;</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;(comp(a.x&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;b.x)&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; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;comp(a.y&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;b.y)&nbsp;</span><span style="color: #000000; ">&lt;</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;(comp(a.x&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;b.x)&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; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;comp(a.y&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;b.y)&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; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;comp(a.val&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;b.val)&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 />}<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;gao()<br />{<br />&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; ">n,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">m);<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;&nbsp;&nbsp;&nbsp;&nbsp;ene[i].read();<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;m;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cro[i].read();<br />&nbsp;&nbsp;&nbsp;&nbsp;vec.read();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;mod&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;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(comp(vec.x)&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;mod&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&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; ">(comp(vec.y)&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;mod&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br />&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; ">(comp(vec.z)&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;mod&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">3</span><span style="color: #000000; ">;<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;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; ">double</span><span style="color: #000000; ">&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;p,q;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">switch</span><span style="color: #000000; ">(mod)<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; ">case</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">0.0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;cro[i].x)&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;vec.x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;cro[i].y&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;temp&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;vec.y;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;cro[i].z&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;temp&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;vec.z;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">case</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">0.0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;cro[i].y)&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;vec.y;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;cro[i].x&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;temp&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;vec.x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;cro[i].z&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;temp&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;vec.z;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">case</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">3</span><span style="color: #000000; ">:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">0.0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;cro[i].z)&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;vec.z;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;cro[i].x&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;temp&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;vec.x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;cro[i].y&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;temp&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;vec.y;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s[i]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;sol(p,q,temp);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;sort(s&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,s&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;m&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;ans&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;</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;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;temp,p,q;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">switch</span><span style="color: #000000; ">(mod)<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; ">case</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">0.0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;ene[i].x)&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;vec.x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ene[i].y&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;temp&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;vec.y;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ene[i].z&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;temp&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;vec.z;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">case</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">0.0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;ene[i].y)&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;vec.y;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ene[i].x&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;temp&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;vec.x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ene[i].z&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;temp&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;vec.z;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">case</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">3</span><span style="color: #000000; ">:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">0.0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;ene[i].z)&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;vec.z;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ene[i].x&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;temp&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;vec.x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ene[i].y&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;temp&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;vec.y;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sol&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">low&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;lower_bound(s&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,s&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;m&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,sol(p,q,temp));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(sol&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;it&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;low;it&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;s&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;m&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;it</span><span style="color: #000000; ">++</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;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(comp(it&nbsp;</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">&nbsp;x&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;p)&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;comp(it&nbsp;</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">&nbsp;y&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;q)&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;</span><span style="color: #0000FF; ">break</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; ">(comp(it&nbsp;</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">&nbsp;x&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;p)&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; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;comp(it&nbsp;</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">&nbsp;y&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;q)&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; ">if</span><span style="color: #000000; ">(comp(it&nbsp;</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">&nbsp;val&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;temp)&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;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000; ">++</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;</span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />&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;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d\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;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">t);<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;t;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;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Case&nbsp;%d:&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gao();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span></div> <div id="chromeVisPage2ExtensionDiv" style="display: none; "></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: 0px; left: 10px; right: 100px; max-width: 700px; "></span><div id="chromeVisBackground2LensDiv" style="display: none; "></div><img src ="http://www.cppblog.com/aswmtjdsj/aggbug/154969.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-09-02 20:06 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/09/02/154969.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ZOJ 3521 Fairy Wars【并查集，扫描线，set维护】</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/08/29/154638.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Mon, 29 Aug 2011 12:45:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/08/29/154638.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/154638.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/08/29/154638.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/154638.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/154638.html</trackback:ping><description><![CDATA[题目链接：<a href="http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3521">http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3521<br /></a>以前一直以为扫描线这么神奇的想法应该有很复杂的代码，今天亲身写了一下，发现只要数据结构维护的好，代码真的很短。<br />感谢wolf5x大神、schnee大神对我这蒟蒻的指导。<br /><br />题目大意：有一个圆形炸弹，给定二维坐标和半径；平面上N个点（N&lt;=50000），每个点的二维坐标给出；给定一个L，是这些点的影响范围，影响范围是以这个点为中心的长度为L的正方形；影响范围内的点可以互相影响，连锁具有传递性。问，把炸弹引爆的话，会有多少个点被连锁。<br /><br />做法：扫描线+set维护+并查集+枚举（最后一个随便说说。。。）<br /><br />具体：裸的想法就是连边并查集，这个是O(N^2)的复杂度，铁挂；几何题的自然想法就是想到极角排序和扫描线以及线段树上面去。<br />极角排序没有好想法，线段树不会搞，就想扫描线+set维护的神想法。<br />一开始想环形扫描线想不出个所以然来，经大神们点拨后开始拿传统的坐标序扫描线搞之。<br /><br />将这N个点按x坐标排序，维护两根扫描线或者说一个队列，一开始队列头尾都指向最左点，队列尾向右移动的时候先判断头尾两点的横坐标差值是否大于L，大于则把对头右移直到满足条件，同时将弹队的这些点在set中删除：<br /><br />set中的元素是一个pair，first是点的纵坐标，second是点的id，这样就保证了内部没有重复元素，内部序按照y排序；然后将队尾的元素插入set中，因为插入函数的返回值是一个pair，pair的first即为队尾的点在set中的插入位置，second是插入成功与否的bool。<br /><br />所以it-1(it != set.begin() )和it+1(it+1 != set.end() )分别是set中与当前插入点y坐标最相近的两个点，比较当前点与这两个的y坐标之差是否小于等于L，是则union之。可以归纳证明，需要判断的只有最近的两个点，因为更远的点已经在之前判断过了。<br /><br />这样扫描一遍过后，就剩下几个联通块；再扫描一遍，判断圆是否与某个联通块相交，若相交则将联通块大小加到答案上，最后输出答案即可。<br /><br />注意点：<br />1.为了防止浮点数误差，判断点在圆内的时候，直接用整数平方判断的，所以会超int，注意long long。<br />2.维护的时候注意尽量少写特判语句，比如初始点什么的，用一个统一化的判断语句来判断弹队与否，比如front 与 tail的距离什么的。。<br />3.set的insert函数的返回值的first是个指针，所以当我们插入的元素即为一个pair时，访问pair的first需要用-&gt;而非.<br />4.set的元素是一一对应的，无重复元素；用insert来实现find的功能，原因在于set没有单关键字查询功能，或者说没有我们想要的对于pair内某一元素的查询功能，所以用insert来实现find，是一个更巧妙的想法。<br />5.我是个蒟蒻，又tmd把并查集写错了。<br />6.思维比较神的题、各种算法联合在一起的题目不一定需要很大的代码量，不要被吓住。<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; ">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; ">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: #0000FF; ">set</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 />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">algorithm</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; ">cstdlib</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; ">vector</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;maxn&nbsp;50005</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; ">struct</span><span style="color: #000000; ">&nbsp;point<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;x,y;<br />&nbsp;&nbsp;&nbsp;&nbsp;point(){}<br />&nbsp;&nbsp;&nbsp;&nbsp;point(</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;_x,</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;_y):x(_x),y(_y){}<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; ">(</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);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</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;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],c;<br />typedef&nbsp;</span><span style="color: #0000FF; ">set</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">pair</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;SET;<br />SET&nbsp;S;<br />SET::iterator&nbsp;it;<br /></span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;ab(</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;x)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;x&nbsp;</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">?</span><span style="color: #000000; ">x&nbsp;:&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">x;<br />}<br /></span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;cmp(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;point&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">a,</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;point&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">b)</span><span style="color: #008000; ">//</span><span style="color: #008000; ">for&nbsp;sort</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;a.x&nbsp;</span><span style="color: #000000; ">&lt;</span>&nbsp;b.x;<br />}<font class="Apple-style-span" color="#0000ff"><br /></font><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n,l;<br /></span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;r;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;f[maxn],ra[maxn];<br /></span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;has[maxn];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;find(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;x&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;f[x]&nbsp;</span><span style="color: #000000; ">?</span><span style="color: #000000; ">&nbsp;x&nbsp;:&nbsp;f[x]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;find(f[x]);<br />}<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;un(</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)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;find(a);<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;find(b);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(a&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;b)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(ra[a]&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;ra[b])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[b]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;a;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ra[a]&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;ra[b];<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;f[a]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;b;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ra[b]&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;ra[a];<br />&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;S.clear();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;front&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;a,b;<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;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(ab(p[i].x&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;p[front].x)&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;l)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S.erase(make_pair(p[front].y,front));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;front</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;S.insert(make_pair(p[i].y,i)).first;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(it&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;S.begin())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it</span><span style="color: #000000; ">--</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; ">(ab(p[i].y&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;(it&nbsp;</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">&nbsp;first))&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;l)<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;a&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;it&nbsp;</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">&nbsp;second;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;un(a,b);<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;it</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(it&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;S.end()&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;ab(p[i].y&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;(it&nbsp;</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">&nbsp;first))&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;l)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;it&nbsp;</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">&nbsp;second;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;un(a,b);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<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;%lld&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; ">r,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">l)&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">3</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fill(ra,ra&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; ">1</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;</span><span style="color: #000000; ">/=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</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;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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[i]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;i;<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;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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%lld&nbsp;%lld</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">p[i].x,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">p[i].y);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(p&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,p&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; ">,cmp);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%lld&nbsp;%lld</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">c.x,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">c.y);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gao();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;ans&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;memset(has,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(has));<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;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;&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; ">((p[i]&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;c).norm2()&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;r&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;r)<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; ">int</span><span style="color: #000000; ">&nbsp;fuck&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;find(i);<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; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">has[fuck])<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;ra[fuck];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;has[fuck]&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;&nbsp;&nbsp;&nbsp;&nbsp;}<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;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,ans);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span></div><div id="chromeVisPage2ExtensionDiv" style="display: none; ">Backspace</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> <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: 0px; left: 10px; right: 100px; max-width: 700px; "></span><img src ="http://www.cppblog.com/aswmtjdsj/aggbug/154638.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-08-29 20:45 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/08/29/154638.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HDU 3961 Crisis【恶心的几何模拟】</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/08/24/154247.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Wed, 24 Aug 2011 13:26:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/08/24/154247.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/154247.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/08/24/154247.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/154247.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/154247.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 链接：http://acm.hdu.edu.cn/showproblem.php?pid=3961这题竟然有队伍场上过掉了。。大神们的脑子得有多清楚。。。我这题是做了一天才理清思路，过了样例。。这题的样例就已然强的一B了。。题目大意即做法，题意很裸，直接把做法说出来了，所以就是模拟题咯。先给你一个圆和圆外一点，然后给你一个多边形（不一定凸凹），将多边形绕圆心公转，同时自转，给你转动周期和时间。让你...&nbsp;&nbsp;<a href='http://www.cppblog.com/aswmtjdsj/archive/2011/08/24/154247.html'>阅读全文</a><img src ="http://www.cppblog.com/aswmtjdsj/aggbug/154247.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-08-24 21:26 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/08/24/154247.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ural 1588 Jamaica［平面图最短路？］</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/08/21/153993.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Sat, 20 Aug 2011 17:15:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/08/21/153993.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/153993.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/08/21/153993.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/153993.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/153993.html</trackback:ping><description><![CDATA[<a href="http://acm.timus.ru/problem.aspx?space=1&amp;num=1588">http://acm.timus.ru/problem.aspx?space=1&amp;num=1588<br /></a><br />题目一点也不不像所说的那么神。。。虽然标准的O(N^2 * logN)的算法不会吧。不过O(N^3)的算法还是能过的。<br /><br />给你平面上N个点(&lt;=300)。两两连边，求生成网络的路径总长，注意在同一直线上的边长不要重复计算。<br /><br />O(N^2)预处理出每两点间最短路。然后利用类似floyd的想法N^3枚举出需要处理掉的边，即诸如d[i][j] = d[i][k] + d[k][j]的边，统计所有边长的时候不要加入此种d[i][j]的值。<br />关键点1：用double的坏处就在这了，自带常矬卡精度。随随便便就可以构造出那种三点构成的三角形最大内角近似180度的情况用来卡这种处理方式。<br />即三点近似共线的情况用于卡这个式子fabs(d[i][j] - d[i][k] - d[k][j]) &lt; eps。。一开始eps=1e-6果断被卡了，处理到1e-9才在题目给出的数据范围(10^4)下可以不被精度所影响。<br /><span style="color: red; font-size: 14pt; ">&#8220;精度&#8221;啊&#8220;精度&#8221;！！！<br /></span><span style="font-size: 14pt; color: #0000ff; ">关键点2：平常不注意cout输出流的格式自适应，用的太习惯以致于察觉不到这种最常见的小事。这你妹。我真是个蒟蒻啊。<br />cout输出流对于大double数如果不iomanip的话是会自动用科学计数法输出的！！！平常用cout输出二分中间结果的时候经常会看到，现在怎么想不到了呢！！！我真是太弱了。。。<br />所以对于哪怕题目要求最后输出四舍五入后的整数，也不要&#8220;cout&lt;&lt;floor(x+eps)&lt;&lt;endl&#8221;，而要"printf("%.0lf\n",floor(x+eps))"。。今天唯一一次想偷懒结果就悲剧了。这，人懒不得啊。。。。<br /><br /></span><span style="font-size: 14pt; "><strong>少年啊，要记住，非常习惯的事物的小小细节也许是你不曾注意到的坑你的地方。世界上的事情不要想当然。无论在什么方面。</strong></span><span style="color: red; font-size: 14pt; "></span><div id="chromeVisPage2ExtensionDiv" style="display: none; ">.</div><img src ="http://www.cppblog.com/aswmtjdsj/aggbug/153993.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-08-21 01:15 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/08/21/153993.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我是蒟蒻！！！！别再在脑子里面出乱子了！！！【判断点在线段上的写法！】</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/08/20/153913.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Sat, 20 Aug 2011 02:27:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/08/20/153913.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/153913.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/08/20/153913.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/153913.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/153913.html</trackback:ping><description><![CDATA[<div><div>bool check(point p,point a,point b)</div><div>{</div><div><span style="white-space:pre">	</span>if((comp(a.x - p.x) &lt;= 0 &amp;&amp; comp(p.x - b.x) &lt;= 0) || (comp(a.x - p.x) &gt;= 0 &amp;&amp; comp(p.x - b.x) &gt;= 0))</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>if((comp(b.y - p.y) &gt;= 0 &amp;&amp; comp(p.y - a.y) &gt;= 0) || (comp(b.y - p.y) &lt;= 0 &amp;&amp; comp(p.y - a.y) &lt;= 0))</div><div><span style="white-space:pre">			</span>return true;</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>return false;</div><div>}</div></div><div><br /><br />别二了少年！！！洗洗睡吧！！！</div> <div id="chromeVisPage2ExtensionDiv" style="display: none; ">&#229;</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/153913.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-08-20 10:27 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/08/20/153913.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>URAL 1215 Exactness of Projectile Hit 【点到线段的距离和点在多边形内与否的判断】</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/08/19/153885.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Fri, 19 Aug 2011 13:30:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/08/19/153885.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/153885.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/08/19/153885.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/153885.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/153885.html</trackback:ping><description><![CDATA[题目链接：<a href="http://acm.timus.ru/problem.aspx?space=1&amp;num=1215">http://acm.timus.ru/problem.aspx?space=1&amp;num=1215<br /></a><br />坑爹的题，让我交了17次才过。。。。这。。<br />几个关键点。（判断点在&#8220;凸&#8221;多边形内，果断用叉积判断而非&#8220;角和&#8221;判断吧。我不知道ural怎么做到的，我把eps开到了1都能把我的&#8220;角和&#8221;判断卡掉，太nb了。）<br />1.叉积判断点在多边形内或上<br />如果旋转叉积过程中出现&#8220;正&#8221;以及&#8220;负&#8221;号情况发生，则点在&#8220;凸&#8221;多边形外。前提，点按顺/逆时针给出。<br />2.点到线段的距离<br />根据点积判断点与线段两端点组成的三角形的两个底角（相对于用于判断的点而言）是否均非钝角。<br />若有一个钝角，则点到线段的距离为点到两端点距离中的小者；若无，则为垂足距离。<br /><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; ">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 /></span><span style="color: #0000FF; ">#define</span><span style="color: #000000; ">&nbsp;sqr(x)&nbsp;((x)&nbsp;*&nbsp;(x))</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; ">#define</span><span style="color: #000000; ">&nbsp;maxn&nbsp;105</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; ">6</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;pi&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;acos(</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1.0</span><span style="color: #000000; ">);<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;comp(</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;x)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(fabs(x)&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;eps)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&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; ">(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)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</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;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />}<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; ">int</span><span style="color: #000000; ">&nbsp;x,y;<br />&nbsp;&nbsp;&nbsp;&nbsp;point(){}<br />&nbsp;&nbsp;&nbsp;&nbsp;point(</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):x(a),y(b){}<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; ">(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;point&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">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);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">operator</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;point&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">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;x&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;p.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;p.y;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">operator</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">^</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;point&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">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;x&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;p.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;p.x;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</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;sqr(x)&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;sqr(y);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}p[maxn],o;<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;multi(point&nbsp;a,point&nbsp;b,point&nbsp;o)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;(a&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;o)&nbsp;</span><span style="color: #000000; ">^</span><span style="color: #000000; ">&nbsp;(b&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;o);<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;scalar(point&nbsp;a,point&nbsp;b,point&nbsp;o)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;(a&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;o)&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;(b&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;o);<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n;<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; ">int</span><span style="color: #000000; ">&nbsp;a,b;<br />&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;o&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;point(a,b);<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">n);<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;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; ">%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;p[i]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;point(a,b);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;pos&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">,neg&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;</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;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;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;a&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;i,b&nbsp;</span><span style="color: #000000; ">=</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; ">)&nbsp;</span><span style="color: #000000; ">%</span><span style="color: #000000; ">&nbsp;n;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;flag&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;multi(p[a],p[b],o);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(flag&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">!</span><span style="color: #000000; ">pos)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos&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;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(flag&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">!</span><span style="color: #000000; ">neg)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;neg&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;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">(neg&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;pos))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<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; ">,</span><span style="color: #000000; ">0.0</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;r&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;1e10;<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;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;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;a&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;i,b&nbsp;</span><span style="color: #000000; ">=</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; ">)&nbsp;</span><span style="color: #000000; ">%</span><span style="color: #000000; ">&nbsp;n;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;lab&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;sqrt((</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">)(p[a]&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;p[b]).norm2()),lbo&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;sqrt((</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">)(o&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;p[b]).norm2()),lao&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;sqrt((</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">)(o&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;p[a]).norm2());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;sbao&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;scalar(p[b],o,p[a]),sabo&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;scalar(p[a],o,p[b]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;bao&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;acos((</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">)&nbsp;sbao&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;(lab&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;lao)),abo&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;acos((</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">)sabo&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;(&nbsp;lab&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;lbo));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(comp(bao&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;pi&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2.0</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;comp(abo&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;pi&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2.0</span><span style="color: #000000; ">)&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;&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;min(r,fabs((</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">)multi(p[a],p[b],o))&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">&nbsp;lab);<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;&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;min(r,min(lbo,lao));<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&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; ">,r&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2.0</span><span style="color: #000000; ">);<br />}<br /></span></div><div id="chromeVisPage2ExtensionDiv" style="display: none; ">Down</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/153885.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-08-19 21:30 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/08/19/153885.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ural 1640 Circle of Winter【坑爹题。。。】</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/08/14/153367.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Sun, 14 Aug 2011 13:32:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/08/14/153367.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/153367.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/08/14/153367.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/153367.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/153367.html</trackback:ping><description><![CDATA[<div><h2>1640. Circle of Winter</h2><div style="line-height: 1.4em; margin-top: 0px; margin-right: 0px; margin-bottom: 14px; margin-left: 0px; text-align: center; font-family: 'Times New Roman'; font-size: medium; ">Time Limit: 1.0 second<br />Memory Limit: 64 MB</div><div id="problem_text" style="font-family: 'Times New Roman'; line-height: normal; font-size: medium; "><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; line-height: 1.4em; "><div style="text-align: justify; ">Lich Sandro declared war to the King of Hell, and now hordes of demons are fighting fiercely against Sandro's army of the undead. Sandro has mastered the Magic of Fire, but the creatures of Hell can't be damaged by fire. That's why Sandro decided to use a &#8220;Circle of Winter&#8221; spell against them. This spell creates an indestructable circular-shaped ice wall. The demons who are touched by the circumference die immediately; the demons enclosed in a circle stay alive, but can't participate in the fight anymore.</div></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; line-height: 1.4em; "><div style="text-align: justify; ">Sandro can teleport to any point of the battlefield instantly and cast a &#8220;Circle of Winter&#8221; there. An ice wall centered in that point will appear in that case. Note that Sandro's magic skills allow him to cast a wall with a radius not exceeding 10000 metres. Now Sandro wants to choose a point to teleport to and a radius of a spell in such way that at least one demon would be killed and all the rest would be enclosed in a circle.</div></div><h3>Input</h3><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; line-height: 1.4em; "><div style="text-align: justify; ">The first line contains an integer&nbsp;<em>n</em>&nbsp;&#8212; the number of demons&nbsp;<nobr>(1 &#8804;&nbsp;<em>n</em>&nbsp;&#8804; 100)</nobr>. Demons can be considered as points on the battlefield. The next&nbsp;<em>n</em>&nbsp;lines contain&nbsp;<em>n</em>&nbsp;pairs of space-separated integers (<em>x</em>,&nbsp;<em>y</em>)&nbsp;&#8212; the coordinates of the demons relative to the point Sandro occupies before teleportation. Coordinates are given in metres and don't exceed 1000 in absolute value. Each point of the battlefield contains no more than one demon; also a demon can't occupy a point the Sandro occupies before teleportation.</div></div><h3>Output</h3><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; line-height: 1.4em; "><div style="text-align: justify; ">Output 3 real numbers precise up to 10<sup style="position: relative; top: -0.4em; vertical-align: baseline; ">&#8722;9</sup>&nbsp;&#8212; the coordinates of a point Sandro should teleport to and the radius of a &#8220;Circle of Winter&#8221; he should create. Sandro can't teleport to a point that is occupied by a demon. It is guaranteed that the solution always exists.</div></div><h3>Samples</h3><table style="border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #1a5cc8; border-right-color: #1a5cc8; border-bottom-color: #1a5cc8; border-left-color: #1a5cc8; border-collapse: collapse; "><colgroup><col width="350"><col width="350"></colgroup><tbody><tr><th style="border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #1a5cc8; border-right-color: #1a5cc8; border-bottom-color: #1a5cc8; border-left-color: #1a5cc8; padding-top: 3px; padding-right: 3px; padding-bottom: 3px; padding-left: 3px; vertical-align: top; color: #1a5cc8; ">input</th><th style="border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #1a5cc8; border-right-color: #1a5cc8; border-bottom-color: #1a5cc8; border-left-color: #1a5cc8; padding-top: 3px; padding-right: 3px; padding-bottom: 3px; padding-left: 3px; vertical-align: top; color: #1a5cc8; ">output</th></tr><tr><td style="border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #1a5cc8; border-right-color: #1a5cc8; border-bottom-color: #1a5cc8; border-left-color: #1a5cc8; padding-top: 3px; padding-right: 3px; padding-bottom: 3px; padding-left: 3px; vertical-align: top; "><pre style="font-family: monospace, 'monospace for firefox'; font-size: 0.81em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">7 <br />1 1 <br />1 5 <br />3 6 <br />5 3 <br />8 0 <br />9 5 <br />5 9</pre></td><td style="border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #1a5cc8; border-right-color: #1a5cc8; border-bottom-color: #1a5cc8; border-left-color: #1a5cc8; padding-top: 3px; padding-right: 3px; padding-bottom: 3px; padding-left: 3px; vertical-align: top; "><pre style="font-family: monospace, 'monospace for firefox'; font-size: 0.81em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">5 4 5</pre></td></tr><tr><td style="border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #1a5cc8; border-right-color: #1a5cc8; border-bottom-color: #1a5cc8; border-left-color: #1a5cc8; padding-top: 3px; padding-right: 3px; padding-bottom: 3px; padding-left: 3px; vertical-align: top; "><pre style="font-family: monospace, 'monospace for firefox'; font-size: 0.81em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">2 <br />0 2 <br />2 0 </pre></td><td style="border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #1a5cc8; border-right-color: #1a5cc8; border-bottom-color: #1a5cc8; border-left-color: #1a5cc8; padding-top: 3px; padding-right: 3px; padding-bottom: 3px; padding-left: 3px; vertical-align: top; "><pre style="font-family: monospace, 'monospace for firefox'; font-size: 0.81em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">1 1 1.41421356237309 </pre></td></tr></tbody></table><div style="line-height: 1.4em; margin-top: 10px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><strong>Problem Author:&nbsp;</strong>Dmitry Ivankov (prepared by Alexander Ipatov)<br /><strong>Problem Source:&nbsp;</strong>USU Junior Contest, October 2008</div></div><span style="font-family: 'Times New Roman'; line-height: normal; font-size: medium; "><strong>Tags:&nbsp;</strong></span><span style="font-family: 'Times New Roman'; line-height: normal; font-size: medium; "><a href="http://acm.timus.ru/problemset.aspx?space=1&amp;tag=geometry">geometry<br /><br /><br /><br /></a>去年看到的时候就不会。今年会了最小覆盖圆的模板，试着做，结果依然WA，估计是找到的最小覆盖圆和给定的点中的某一个重复了。<br />仔细一想，试了试，竟然是坑爹题。<br />题目给你N个二维整点（坐标绝对值不大于1000），让你找一个点使这N个点中至少有一个在圆上，其他均在圆内，且圆半径小于10000，且圆心不与已知点重合。输出圆心坐标和半径（实数，精确到1e-9）<br /><br />这题坑爹之处在于，不要求输出半径最小解。<br />那么即可随意构造解了。<br />只要任意实数解都可，因为题目给出的点都是整点。<br />这样你就令c.x = 0.1,c.y = 0.1，然后求出这个圆心到这N个点的最远距离，即为半径，然后AC。<br />我了个去。<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; ">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; ">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; ">cmath</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; ">#define</span><span style="color: #000000; ">&nbsp;maxn&nbsp;105</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; ">9</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;x[maxn],y[maxn],cx,cy,r;<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; ">int</span><span style="color: #000000; ">&nbsp;n;<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">n);<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;n;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%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[i],</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">y[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;cx&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;cy&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0.1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;r&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; ">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;n;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;max(r,sqrt((cx&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;x[i])&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;(cx&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;x[i])&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;(cy&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;y[i])&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;(cy&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;y[i])));<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%.10lf&nbsp;%.10lf&nbsp;%.10lf\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,cx,cy,r);<br />}<br /></span></div></span></div> <div id="chromeVisPage2ExtensionDiv" style="display: none; ">Down</div><div id="chromeVisExtension2PageDiv" style="display: none; ">forward character</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/153367.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-08-14 21:32 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/08/14/153367.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ 1981 Circle and Points 【定长圆覆盖最多点问题】</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/07/05/150206.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Tue, 05 Jul 2011 05:14:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/07/05/150206.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/150206.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/07/05/150206.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/150206.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/150206.html</trackback:ping><description><![CDATA[<div><h2>定长圆覆盖最多点问题</h2><p>    <strong>问题描述，给出二维平面内</strong><strong>N</strong><strong>个点的</strong><strong>(x,y)</strong><strong>坐标，给一固定半径</strong><strong>R</strong><strong>。求一圆，圆心位置任意，要求尽可能多的覆盖平面点集中的点。输出最多的覆盖点数。</strong><strong>&nbsp;</strong></p><p>    <strong>（限制条件，保证无任意两点距离等于</strong><strong>2R</strong><strong>，即无两点连线恰为直径。亦无任意三点同时在一个半径为</strong><strong>R</strong><strong>的圆上。）</strong><strong></strong></p><p>    <strong>朴素算法：由限制条件可知，最后目标圆圆心一定可由某两点唯一确定（即目标圆的圆弧上一定恰有两个平面点集中的点）。具体实现：</strong><strong>C(N,2)</strong><strong>枚举任意两圆，构造可行圆，枚举</strong><strong>N</strong><strong>个点，判断是否在圆上或者圆内（即是否被覆盖）。复杂度</strong><strong>O(N^3)</strong><strong>。</strong><strong></strong></p><p>    <strong>（如果过了就算是水过去的吧，没过就怪常数太大。。</strong><strong>= =||</strong><strong>）</strong><strong></strong></p><p>    <strong>我所知的标准做法：</strong><strong>O(n^2*logn)</strong><strong>的圆上交点扫描法。</strong><strong></strong></p><p>    <strong>转化为圆上的弧最多被覆盖几次的问题。</strong></p><p>    <strong><img src="http://fmn.rrimg.com/fmn048/20101117/2220/b_large_wGq2_2f9c000733545c16.jpg" alt="" /><br />    </strong></p><p>    <strong></strong><strong>直觉可解，圆上某个弧如果被某个圆覆盖过，那么我们把目标圆圆心放在该段弧上时，目标圆一定能把该弧所在圆圆心覆盖（即平面点集中的某点）。</strong><strong></strong></p><p>    <strong>所以，被覆盖次数最多的弧的被覆盖次数即为目标圆（最优）最多能够覆盖的点数。</strong><strong></strong></p><p>    <strong>具体做法：</strong><strong></strong></p><p>    <strong>依旧是</strong><strong>C(N,2)</strong><strong>枚举任意两点，以</strong><strong>BA</strong><strong>为例，此时</strong><strong>i=1,j=0</strong><strong>。</strong><strong></strong></p><p>    <strong>求取</strong><strong>BA</strong><strong>的极角</strong><strong>theta</strong><strong>，利用</strong><strong>atan2</strong><strong>（因变量范围</strong><strong>(-pi,pi]</strong><strong>）。</strong><strong></strong></p><p>    <strong>为方便极角排序，对于负角要</strong><strong>+2pi</strong><strong>。</strong><strong></strong></p><p>    <strong>B</strong><strong>、</strong><strong>A</strong><strong>构造的圆交于</strong><strong>X1</strong><strong>，</strong><strong>X4</strong><strong>两点，求取</strong><strong>X1B</strong><strong>与</strong><strong>BA</strong><strong>的夹角和</strong><strong>X4B</strong><strong>与</strong><strong>AB</strong><strong>的夹角（相同）。</strong><strong></strong></p><p>    <strong>Phi </strong><strong>，</strong><strong>acos(D/2.0/R)</strong><strong>，</strong><strong>D=dis(A,B)</strong><strong>。</strong><strong></strong></p><p>    <strong>以上可得出两圆交点在当前圆上对于圆心的极角。</strong><strong></strong></p><p>    <strong>为方便极角排序，每个极角均加</strong><strong>2pi</strong><strong>，使域扩张到</strong><strong>[0</strong><strong>，</strong><strong>4pi]</strong><strong>，从而防止了跨</strong><strong>0</strong><strong>角的出现。</strong><strong></strong></p><p>    <strong>alpha[t].value=theta &#8211; phi + 2pi,alpha[t].flag = 1(</strong><strong>弧的进入端</strong><strong>)</strong></p><p>    <strong>alpha[t+1].value = theta + phi + 2pi,alpha[t+1].flag = false</strong><strong>（弧的退出端）。</strong><strong></strong></p><p>    <strong>接下来，对于每个圆上的</strong><strong>t</strong><strong>（偶数）个极角进行排序，再顺序扫描，动态更新最大值。</strong><strong></strong></p><p>    <span style="color: #ff0000;"><strong>for(i,0,t)</strong></span></p><p>    <span style="color: #ff0000;"><strong>if(alpha[i].flag)</strong></span></p><p>    <span style="color: #ff0000;"><strong>sum++</strong></span></p><p>    <span style="color: #ff0000;"><strong>else</strong></span></p><p>    <span style="color: #ff0000;"><strong>sum--</strong></span></p><p>    <span style="color: #ff0000;"><strong>if(sum &gt; ans)</strong></span></p><p>    <span style="color: #ff0000;"><strong>ans = sum</strong></span></p><p>    <strong>最后输出答案时，输出ans+1</strong><strong>即可。（因为要算上弧所在圆自身）</strong></p><p>    <strong>复杂度：O(n *(nlogn + t))=O(n^2*logn)</strong></p></div><br />题目链接：<a href="http://poj.org/problem?id=1981">http://poj.org/problem?id=1981</a><br /><a href="http://boj.me/onlinejudge/showproblem.php?problem_id=1679">http://boj.me/onlinejudge/showproblem.php?problem_id=1679</a><br /><br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<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 /><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 /><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 /><br />#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">algorithm</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br /><br /></span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;Mn&nbsp;300</span><span style="color: #008000;">//</span><span style="color: #008000;">平面点集中点数</span><span style="color: #000000;"><br /><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 /><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;">9</span><span style="color: #000000;">;</span><span style="color: #008000;">//</span><span style="color: #008000;">精度调高点没跑~</span><span style="color: #008000;"><br /></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;pi&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;acos(</span><span style="color: #000000;">-</span><span style="color: #000000;">1.0</span><span style="color: #000000;">);<br /><br /></span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;sqr(x)&nbsp;((x)&nbsp;*&nbsp;(x))</span><span style="color: #000000;"><br /><br /></span><span style="color: #0000ff;">double</span><span style="color: #000000;">&nbsp;R;</span><span style="color: #008000;">//</span><span style="color: #008000;">定长</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br /></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;point<br /><br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">double</span><span style="color: #000000;">&nbsp;x,y;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;read()<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%lf%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);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;print()<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%lf%lf\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,x,y);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">double</span><span style="color: #000000;">&nbsp;friend&nbsp;dis(</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;point&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">a,</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;point&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">b)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;sqrt(sqr(a.x&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;b.x)&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;sqr(a.y&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;b.y));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}p[Mn&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">5</span><span style="color: #000000;">];<br /><br /></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;alpha<br /><br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">double</span><span style="color: #000000;">&nbsp;v;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;flag;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;friend&nbsp;</span><span style="color: #0000ff;">operator</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">(</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;alpha&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">a,</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;alpha&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">b)</span><span style="color: #008000;">//</span><span style="color: #008000;">排序专用偏序关系</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;a.v&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;b.v;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}alp[Mn&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;Mn&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">5</span><span style="color: #000000;">];</span><span style="color: #008000;">//</span><span style="color: #008000;">C(N,2)*2的可能交点（可能极角）</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br /></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;solve(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n)<br /><br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;R&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1.0</span><span style="color: #000000;">;</span><span style="color: #008000;">//</span><span style="color: #008000;">本题内为单位圆</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><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;n;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[i].read();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;MAX&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<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;n;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;t&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br /><br />&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;">0</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 /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(i&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;j)<br /><br />&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 /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">double</span><span style="color: #000000;">&nbsp;theta,phi,D;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;dis(p[i],p[j]);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(D&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2.0</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;R)</span><span style="color: #008000;">//</span><span style="color: #008000;">距离超界直接秒杀</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />&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 /><br /></span><span style="color: #008000;">//</span><span style="color: #008000;">关键部分</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;theta&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;atan2(p[j].y&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;p[i].y,p[j].x&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;p[i].x);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(theta&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 /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;theta&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;">*</span><span style="color: #000000;">&nbsp;pi;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;phi&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;acos(D&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">2.0</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;R));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alp[t].v&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;theta&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;phi&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;">*</span><span style="color: #000000;">&nbsp;pi;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alp[t].flag&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alp[t&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">].v&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;theta&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;phi&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;">*</span><span style="color: #000000;">&nbsp;pi;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alp[t&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">].flag&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(alp,alp&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;t);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;sum&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br /><br />&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;">0</span><span style="color: #000000;">;j&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;t;j</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(alp[j].flag)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;</span><span style="color: #000000;">--</span><span style="color: #000000;">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(sum&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;MAX)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sum;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,MAX&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br /><br />}<br /><br /></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br /><br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n;<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</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">n)&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;n)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solve(n);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}<br /><br /></span><span style="color: #008000;">//</span><span style="color: #008000;">欢迎围观，请大神轻拍~~~</span></div><img src ="http://www.cppblog.com/aswmtjdsj/aggbug/150206.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-07-05 13:14 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/07/05/150206.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HDU 3471 England vs Germany 【三维线段判定】</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/07/05/150203.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Tue, 05 Jul 2011 05:08:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/07/05/150203.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/150203.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/07/05/150203.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/150203.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/150203.html</trackback:ping><description><![CDATA[<div><p>    <strong><span style="font-family: Calibri;">2010MU（ACM2010多校联合训练）-Fourth-UESTC-C Problem-England vs Germany-Solution Report</span></strong></p><p>    <strong><span style="font-family: Calibri;">前言：这个2B题。谁出的谁自杀去。题目描述和数据还有官方解题报告都对着干。我们这帮做题的情何以堪！？</span></strong></p><p>    <strong><span style="font-family: Calibri;">Description</span></strong></p><p>    &nbsp;</p><p>    <span><span style="font-family: Calibri;">The  big fight between England and Germany was destroyed by the guy called  Larrionda. England could have made a tie of 2:2. But that poor guy  disqualified Lampard's wonderful goal. The ball passed through the goal  line by half a meter, however, Larrionda turned a blind eye to this  goal.</span></span></p><p>    <span><span style="font-family: Calibri;">As  a fan of Three Lion Regimen, silentsky want to develop a system which  uses sensors to get the information to check if it scored or not.</span></span></p><p>    &nbsp;</p><p>    <span style="font-family: Calibri;">The information includes a point as the location of ball, a vector as the velocity and a cuboid as the goal.</span></p><p>    <span style="color: #0000ff;">译文大意：</span></p><p>    <span style="color: #0000ff;">三狮军团和德意志战车单挑的时候，裁判拉里昂达2B了。因为拉里昂达的2B，那个完美进球被吹没了，本来有可能打平的比赛变成了日耳曼人屠戮了盎格鲁撒克逊人。</span></p><p>    <span style="color: #0000ff;">出题的人是个英粉，现在，他想让你编程构建一个系统来确定那个球到底是进还是没进。</span></p><p>    <span style="color: #0000ff;">所给信息包括，足球起始位置，速度矢量，以及，球门长方体八点。（均为三维坐标）</span></p><p>&nbsp;</p><p>    <strong><span style="font-family: Calibri;">Input</span></strong><strong><span style="font-family: 宋体;">：</span></strong></p><p>    <span style="font-family: Calibri;">The first line gives an integer t (t&lt;=10000) indicating the number of test cases.</span></p><p>    <span style="font-family: Calibri;">For each case:</span></p><p>    <span style="font-family: Calibri;">The first line gives three real numbers x, y , z, indicating a point to represent the ball.</span></p><p>    <span style="font-family: Calibri;">The second line gives three real numbers a, b, c. indicates a vector to represent the velocity.</span></p><p>    <span style="font-family: Calibri;">The following 8 lines give 8 points according the sequence A, B, C, D, E, F, G, H as is shown in the figure.</span></p><p>    <span style="font-family: Calibri;">&nbsp;Absolute value of all real numbers are smaller than 10000.</span></p><p>    <span style="font-family: Calibri;">&nbsp;It is guaranteed that the initial location of the ball is not inside the goal.</span></p><p>    <span style="color: #0000ff;">&nbsp;译文：</span></p><p>    <span style="color: #0000ff;">第一行为测试数据组数（小于等于10000的整数）。</span></p><p>    <span style="color: #0000ff;">第二行是球的坐标。</span></p><p>    <span style="color: #0000ff;">第三行是速度矢量。</span></p><p>    <span style="color: #0000ff;">第4~11行是按序给出的A~H八点的坐标。</span></p><p>    <span style="color: #0000ff;">（以上数据除组数外均为实数）</span></p><p>    <span style="color: #0000ff;">所有实数的绝对值均小于10000。</span></p><p>    <span style="font-family: Calibri;"><span style="color: #0000ff;">确保球的初始位置不在球门<span style="color: #0000ff;">内<span style="color: #ff0000;"><span style="color: #0000ff;">。</span> （这句话是让无数人WA的关键。实际的测试数据中给出了在球门内的数据。）（怎么说呢。是写解题报告和出题的人没有和写标程测试数据的人统一好意见呢。还是根本就没认真对待出题这种神圣的事情，纯粹2B了呢？！）</span></span>             <br />            <img src="http://fmn.xnimg.cn/fmn043/20100723/1615/b_large_btc2_590c0002529a2d10.jpg" alt="" /><br />            <span style="color: #0000ff;">（自己建的图，特意下载了个AutoCAD2010.花了一个小时玩明白一点点建了个图）</span>             <br />        </span></span></p><p>    <strong><span style="font-family: Calibri;">Output</span></strong><strong><span style="font-family: 宋体;">：</span></strong></p><p>    <span><span style="font-family: Calibri;">&nbsp;if  it scored then output &#8220;Case X: Stupid Larrionda!!!&#8221;.otherwise output  &#8220;Case X: Intelligent Larrionda!!!&#8221;.(X is the case number starting from  1).</span></span></p><p>    <span>&nbsp;</span><span style="font-family: 宋体;">（</span><span><span style="font-family: Calibri;">We  consider ABCD as the front of the goal and AB,BC,CD,DA as the  goalposts. A shoot scores if and only if it passes through the front of  the goal and doesn't crash on the goalpost)</span></span></p><p>    <span style="color: #0000ff;">译文：如果球进了，我们就输出&#8220;Case X: Stupid Larrionda!!!&#8221;（第X种情况：愚蠢的拉里昂达！！！）否则就输出&nbsp;&#8220;Case X: Intelligent Larrionda!!!&#8221;（第X种情况：聪明的拉里昂达！！！）（X从1开始计数）</span></p><p>    <span style="color: #0000ff;">（我们认为ABCD为球门，AB、BC、CD、DA为球门框，球进了的意思是，球从球门穿过并且未触碰到球门框。）</span></p><p>    <span style="color: #ff0000;">（可是扯淡的地方在于，门线竟然被当做了球门，我们很无奈，但是要尊重题意（去你妈的题意），没办法，还是把门线当做了门框。</span></p><p>    <span style="color: #ff0000;">这道题的关键就在于判断球是否从球门进入，而非从侧面或者背面或者上下面进入。）</span></p><p>    <span style="color: #ff0000;"><strong>（但是因为，球在球门内向球门里射这种情况的存在，使这道经典计算几何练习题变成了ws的扯淡题。下面将提到。）</strong></span></p><p>    <strong><span style="font-family: Calibri;">Sample Input</span></strong><strong><span style="font-family: 宋体;">：</span></strong></p><p>    <span style="font-family: Calibri;">1</span></p><p>    <span style="font-family: Calibri;">20 0 5 </span></p><p>    <span style="font-family: Calibri;">-10 5 0 </span></p><p>    <span style="font-family: Calibri;">10 0 10</span></p><p>    <span style="font-family: Calibri;">10 10 10</span></p><p>    <span style="font-family: Calibri;">10 10 0 </span></p><p>    <span style="font-family: Calibri;">10 0 0 </span></p><p>    <span style="font-family: Calibri;">0 0 10 </span></p><p>    <span style="font-family: Calibri;">0 10 10 </span></p><p>    <span style="font-family: Calibri;">0 10 0</span></p><p>    <span style="font-family: Calibri;">0 0 0 </span></p><p>    <span style="font-family: Calibri;"><span style="color: #0000ff;">（模拟图在上面）&nbsp;</span></span></p><p>    <strong><span style="font-family: Calibri;">Sample Output</span></strong><strong><span style="font-family: 宋体;">：</span></strong></p><p>    <span style="font-family: Calibri;">Case 1: Stupid Larrionda!!!</span></p></div><br />题目链接：<a href="http://acm.hdu.edu.cn/showproblem.php?pid=3471">http://acm.hdu.edu.cn/showproblem.php?pid=3471</a><br /><br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<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;">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;">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;">cctype</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;">cstdlib</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;">algorithm</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;">vector</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br /></span><span style="color: #0000ff;">#define</span><span style="color: #000000;">&nbsp;MAX&nbsp;1&lt;&lt;30</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;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">double</span><span style="color: #000000;">&nbsp;eps</span><span style="color: #000000;">=</span><span style="color: #000000;">1e</span><span style="color: #000000;">-</span><span style="color: #000000;">8</span><span style="color: #000000;">;<br />typedef&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;ll;<br /></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;</span><span style="color: #0000ff;">struct</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">double</span><span style="color: #000000;">&nbsp;x;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">double</span><span style="color: #000000;">&nbsp;y;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">double</span><span style="color: #000000;">&nbsp;z;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;plus;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">三维点坐标的结构。。话说有没有这样的STL啊？</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;plus&nbsp;r[</span><span style="color: #000000;">100</span><span style="color: #000000;">],xa[</span><span style="color: #000000;">100</span><span style="color: #000000;">],p[</span><span style="color: #000000;">100</span><span style="color: #000000;">];<br /><br /></span><span style="color: #008000;">//</span><span style="color: #008000;">下面是我比赛的时候去恶补的高数知识。。下学期高数没学好啊。几何部分一窍不通。泪目。。。</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;面法向量（本题中简易做法是AEvector)&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;*&nbsp;本题中因为给出的是严格长方体，所以ABCD面法向量就是AEvector<br /><br />&nbsp;&nbsp;&nbsp;*&nbsp;下面的法向量求法就没用了，不过学会了更好，我这个数学2B<br />&nbsp;&nbsp;&nbsp;*&nbsp;x0=(y2-y1)*(z3-z1)-(z2-z1)*(y3-y1),<br />&nbsp;&nbsp;&nbsp;*&nbsp;y0=(z3-z1)*(x2-x1)-(x3-x1)*(z2-z1),<br />&nbsp;&nbsp;&nbsp;*&nbsp;z0=(x2-x1)*(y3-y1)-(x3-x1)*(y2-y1)<br />&nbsp;&nbsp;&nbsp;*&nbsp;x0*(x-x1)+y0(y-y1)+z0(z-z1)=0<br /><br />&nbsp;&nbsp;&nbsp;*&nbsp;直线参数方程是本题中判断球所在位置的关键<br />&nbsp;&nbsp;&nbsp;*&nbsp;直线参数方程&nbsp;(p为始点,f为末点，即交点)<br />&nbsp;&nbsp;&nbsp;*&nbsp;xf=xp+mt<br />&nbsp;&nbsp;&nbsp;*&nbsp;yf=yp+nt<br />&nbsp;&nbsp;&nbsp;*&nbsp;zf=zp+qt<br /><br />&nbsp;&nbsp;&nbsp;*&nbsp;以下为求参数方程中t的关键<br />&nbsp;&nbsp;&nbsp;*&nbsp;线面相交方程<br />&nbsp;&nbsp;&nbsp;*&nbsp;x0*(xp+mt-x1)+y0*(yp+nt-y1)+z0*(zp+qt-z1)=0<br />&nbsp;&nbsp;&nbsp;*&nbsp;(x0*m+y0*n+z0*q)t=(x1-xp)*x0+(y1-yp)*y0+(z1-zp)*z0<br />&nbsp;&nbsp;&nbsp;*&nbsp;参数解法（即，交点确定方法）&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;freopen("eg.in","r",stdin);<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;freopen("fuck3.out","w",stdout);</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;t,i,j,k,ca</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">double</span><span style="color: #000000;">&nbsp;temp[</span><span style="color: #000000;">6</span><span style="color: #000000;">],pp[</span><span style="color: #000000;">100</span><span style="color: #000000;">];</span><span style="color: #008000;">//</span><span style="color: #008000;">,r[4],l;</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;plus&nbsp;o,v,m,f;<br />&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">t);<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(t</span><span style="color: #000000;">--</span><span style="color: #000000;">)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%lf%lf%lf</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">o.x,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">o.y,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">o.z);<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%lf%lf%lf</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">v.x,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">v.y,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">v.z);<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">Case&nbsp;%d:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">++</span><span style="color: #000000;">ca);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">8</span><span style="color: #000000;">;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%lf%lf%lf</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">p[i].x,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">p[i].y,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">p[i].z);<br />&nbsp;&nbsp;&nbsp;&nbsp;m.x</span><span style="color: #000000;">=</span><span style="color: #000000;">p[</span><span style="color: #000000;">4</span><span style="color: #000000;">].x</span><span style="color: #000000;">-</span><span style="color: #000000;">p[</span><span style="color: #000000;">0</span><span style="color: #000000;">].x;<br />&nbsp;&nbsp;&nbsp;&nbsp;m.y</span><span style="color: #000000;">=</span><span style="color: #000000;">p[</span><span style="color: #000000;">4</span><span style="color: #000000;">].y</span><span style="color: #000000;">-</span><span style="color: #000000;">p[</span><span style="color: #000000;">0</span><span style="color: #000000;">].y;<br />&nbsp;&nbsp;&nbsp;&nbsp;m.z</span><span style="color: #000000;">=</span><span style="color: #000000;">p[</span><span style="color: #000000;">4</span><span style="color: #000000;">].z</span><span style="color: #000000;">-</span><span style="color: #000000;">p[</span><span style="color: #000000;">0</span><span style="color: #000000;">].z;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">AEvector<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">将AEvector与速度矢量进行点积，判断速度与法向量是否同向<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">从而判断球是否射向球门内</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;">(m.x</span><span style="color: #000000;">*</span><span style="color: #000000;">v.x</span><span style="color: #000000;">+</span><span style="color: #000000;">m.y</span><span style="color: #000000;">*</span><span style="color: #000000;">v.y</span><span style="color: #000000;">+</span><span style="color: #000000;">m.z</span><span style="color: #000000;">*</span><span style="color: #000000;">v.z</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">eps)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">Intelligent&nbsp;Larrionda!!!\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">continue</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">求由球点与速度矢量确定的直线方程与ABCD及EFGH面的交点<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">temp[0]为与ABCD的交点的参数t的值<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">temp[1]为与EFGH的交点的参数t的值&nbsp;</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;temp[</span><span style="color: #000000;">0</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">(&nbsp;(p[</span><span style="color: #000000;">0</span><span style="color: #000000;">].x</span><span style="color: #000000;">-</span><span style="color: #000000;">o.x)</span><span style="color: #000000;">*</span><span style="color: #000000;">m.x</span><span style="color: #000000;">+</span><span style="color: #000000;">(p[</span><span style="color: #000000;">0</span><span style="color: #000000;">].y</span><span style="color: #000000;">-</span><span style="color: #000000;">o.y)</span><span style="color: #000000;">*</span><span style="color: #000000;">m.y</span><span style="color: #000000;">+</span><span style="color: #000000;">(p[</span><span style="color: #000000;">0</span><span style="color: #000000;">].z</span><span style="color: #000000;">-</span><span style="color: #000000;">o.z)</span><span style="color: #000000;">*</span><span style="color: #000000;">m.z&nbsp;)</span><span style="color: #000000;">/</span><span style="color: #000000;">(m.x</span><span style="color: #000000;">*</span><span style="color: #000000;">v.x</span><span style="color: #000000;">+</span><span style="color: #000000;">m.y</span><span style="color: #000000;">*</span><span style="color: #000000;">v.y</span><span style="color: #000000;">+</span><span style="color: #000000;">m.z</span><span style="color: #000000;">*</span><span style="color: #000000;">v.z);<br />&nbsp;&nbsp;&nbsp;&nbsp;temp[</span><span style="color: #000000;">1</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">(&nbsp;(p[</span><span style="color: #000000;">4</span><span style="color: #000000;">].x</span><span style="color: #000000;">-</span><span style="color: #000000;">o.x)</span><span style="color: #000000;">*</span><span style="color: #000000;">m.x</span><span style="color: #000000;">+</span><span style="color: #000000;">(p[</span><span style="color: #000000;">4</span><span style="color: #000000;">].y</span><span style="color: #000000;">-</span><span style="color: #000000;">o.y)</span><span style="color: #000000;">*</span><span style="color: #000000;">m.y</span><span style="color: #000000;">+</span><span style="color: #000000;">(p[</span><span style="color: #000000;">4</span><span style="color: #000000;">].z</span><span style="color: #000000;">-</span><span style="color: #000000;">o.z)</span><span style="color: #000000;">*</span><span style="color: #000000;">m.z&nbsp;)</span><span style="color: #000000;">/</span><span style="color: #000000;">(m.x</span><span style="color: #000000;">*</span><span style="color: #000000;">v.x</span><span style="color: #000000;">+</span><span style="color: #000000;">m.y</span><span style="color: #000000;">*</span><span style="color: #000000;">v.y</span><span style="color: #000000;">+</span><span style="color: #000000;">m.z</span><span style="color: #000000;">*</span><span style="color: #000000;">v.z);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">判断球是否在球网EFGH的后面<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;本来我只判断了球是否在球门之后，毕竟题目里说了球初始点不可能在球门内<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;可是我事后去翻看了标程以及标程数据生成器，果然有这样的数据存在<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;所以一开始sunyuqi和linyiyong同学竟然能把这道题过了，我表示非常震惊<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;他们这叫歪打正着呢？还是有先见之明？<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;学长们，以及我，都被那组不符合题意的数据卡死了。10+的WA。光辉的一B啊！<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;1W组数据中的100组。被那2B的标程搞死。NND。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(temp[</span><span style="color: #000000;">0</span><span style="color: #000000;">]</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">eps</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">temp[</span><span style="color: #000000;">1</span><span style="color: #000000;">]</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">eps)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">Intelligent&nbsp;Larrionda!!!\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">continue</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">前面一路判断都为真的话，则求ABCD与射球轨迹的交点</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;f.x&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;o.x&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;temp[</span><span style="color: #000000;">0</span><span style="color: #000000;">]</span><span style="color: #000000;">*</span><span style="color: #000000;">v.x;<br />&nbsp;&nbsp;&nbsp;&nbsp;f.y&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;o.y&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;temp[</span><span style="color: #000000;">0</span><span style="color: #000000;">]</span><span style="color: #000000;">*</span><span style="color: #000000;">v.y;<br />&nbsp;&nbsp;&nbsp;&nbsp;f.z&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;o.z&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;temp[</span><span style="color: #000000;">0</span><span style="color: #000000;">]</span><span style="color: #000000;">*</span><span style="color: #000000;">v.z;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;现在判断交点是否在ABCD面内<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;*（严格内部，而非在这个平面上，但不在所包围的区域内）<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;想法是，求出FAvector，FBvector，FCvector，FDvector（交点在F）<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;再顺时针对这四个矢量求叉积，叉积即该平面（ABCD）的一侧法向量<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;再判断这四个法向量是否在同侧即可<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;判断方法为这四个叉积所得向量进行顺时针点积。均为正，则同向。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">4</span><span style="color: #000000;">;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r[i].x&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;p[i].x&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;f.x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r[i].y&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;p[i].y&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;f.y;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r[i].z&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;p[i].z&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;f.z;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">3</span><span style="color: #000000;">;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xa[i].x</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;r[i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">].z</span><span style="color: #000000;">*</span><span style="color: #000000;">r[i].y</span><span style="color: #000000;">-</span><span style="color: #000000;">r[i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">].y</span><span style="color: #000000;">*</span><span style="color: #000000;">r[i].z;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xa[i].y</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;r[i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">].x</span><span style="color: #000000;">*</span><span style="color: #000000;">r[i].z</span><span style="color: #000000;">-</span><span style="color: #000000;">r[i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">].z</span><span style="color: #000000;">*</span><span style="color: #000000;">r[i].x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xa[i].z</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;r[i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">].y</span><span style="color: #000000;">*</span><span style="color: #000000;">r[i].x</span><span style="color: #000000;">-</span><span style="color: #000000;">r[i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">].x</span><span style="color: #000000;">*</span><span style="color: #000000;">r[i].y;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;xa[</span><span style="color: #000000;">3</span><span style="color: #000000;">].x</span><span style="color: #000000;">=-</span><span style="color: #000000;">(&nbsp;r[</span><span style="color: #000000;">3</span><span style="color: #000000;">].z</span><span style="color: #000000;">*</span><span style="color: #000000;">r[</span><span style="color: #000000;">0</span><span style="color: #000000;">].y</span><span style="color: #000000;">-</span><span style="color: #000000;">r[</span><span style="color: #000000;">3</span><span style="color: #000000;">].y</span><span style="color: #000000;">*</span><span style="color: #000000;">r[</span><span style="color: #000000;">0</span><span style="color: #000000;">].z);<br />&nbsp;&nbsp;&nbsp;&nbsp;xa[</span><span style="color: #000000;">3</span><span style="color: #000000;">].y</span><span style="color: #000000;">=-</span><span style="color: #000000;">(&nbsp;r[</span><span style="color: #000000;">3</span><span style="color: #000000;">].x</span><span style="color: #000000;">*</span><span style="color: #000000;">r[</span><span style="color: #000000;">0</span><span style="color: #000000;">].z</span><span style="color: #000000;">-</span><span style="color: #000000;">r[</span><span style="color: #000000;">3</span><span style="color: #000000;">].z</span><span style="color: #000000;">*</span><span style="color: #000000;">r[</span><span style="color: #000000;">0</span><span style="color: #000000;">].x);<br />&nbsp;&nbsp;&nbsp;&nbsp;xa[</span><span style="color: #000000;">3</span><span style="color: #000000;">].z</span><span style="color: #000000;">=-</span><span style="color: #000000;">(&nbsp;r[</span><span style="color: #000000;">3</span><span style="color: #000000;">].y</span><span style="color: #000000;">*</span><span style="color: #000000;">r[</span><span style="color: #000000;">0</span><span style="color: #000000;">].x</span><span style="color: #000000;">-</span><span style="color: #000000;">r[</span><span style="color: #000000;">3</span><span style="color: #000000;">].x</span><span style="color: #000000;">*</span><span style="color: #000000;">r[</span><span style="color: #000000;">0</span><span style="color: #000000;">].y);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">3</span><span style="color: #000000;">;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(xa[i].x</span><span style="color: #000000;">*</span><span style="color: #000000;">xa[i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">].x</span><span style="color: #000000;">+</span><span style="color: #000000;">xa[i].y</span><span style="color: #000000;">*</span><span style="color: #000000;">xa[i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">].y</span><span style="color: #000000;">+</span><span style="color: #000000;">xa[i].z</span><span style="color: #000000;">*</span><span style="color: #000000;">xa[i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">].z</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br />&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;{printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">Intelligent&nbsp;Larrionda!!!\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(i</span><span style="color: #000000;">==</span><span style="color: #000000;">3</span><span style="color: #000000;">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">Stupid&nbsp;Larrionda!!!\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;system("pause");<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;fclose(stdin);<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;fclose(stdout);</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br />}<br /></span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;本题，我中间错了无数次。<br /><br />&nbsp;*&nbsp;算法一改再改，从一开始判断球与球门的相对位置时计算点面距离，到中间的通过叉积矢量xyz坐标单纯相加判断是否同向，本人对高数以及计算几何进行了各种各样的练习。<br /><br />&nbsp;*&nbsp;这还不算上，对于测试文件输入输出的学习，对于标程与自己程序对拍方法的学习。<br /><br />&nbsp;*&nbsp;这道题消耗了我一天的时间，但是我觉得值，因为我深入理解了这个问题。虽然不代表我以后遇到这类问题能照AC不误，但至少，我从中收获了不少东西。<br /><br />&nbsp;*&nbsp;顺便鄙视一下某些出题人。<br /><br />&nbsp;*&nbsp;另外，本人的队友sunyuqi同学，做这题时运用了三维矩阵坐标变换的方法，鉴于本人线性代数超烂，故没学会，也就不摆上来献丑了。等以后学会了再来研究一下不迟。<br /><br />&nbsp;*&nbsp;第一次写解题报告，如有错误，烦请指正。<br /><br />&nbsp;*&nbsp;感谢各位百忙之中浏览本文。<br /><br />&nbsp;<br /><br />&nbsp;</span><span style="color: #008000;">*/</span></div><img src ="http://www.cppblog.com/aswmtjdsj/aggbug/150203.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-07-05 13:08 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/07/05/150203.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ZOJ 3409 KKV 【高中物理题】</title><link>http://www.cppblog.com/aswmtjdsj/archive/2011/07/05/150199.html</link><dc:creator>BUPT-[aswmtjdsj] @ Penalty</dc:creator><author>BUPT-[aswmtjdsj] @ Penalty</author><pubDate>Tue, 05 Jul 2011 04:56:00 GMT</pubDate><guid>http://www.cppblog.com/aswmtjdsj/archive/2011/07/05/150199.html</guid><wfw:comment>http://www.cppblog.com/aswmtjdsj/comments/150199.html</wfw:comment><comments>http://www.cppblog.com/aswmtjdsj/archive/2011/07/05/150199.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/aswmtjdsj/comments/commentRss/150199.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aswmtjdsj/services/trackbacks/150199.html</trackback:ping><description><![CDATA[<div><p>    <strong>ZOJ Problem Set &#8211; 3409</strong></p><p align="center">    KKV</p><p>             </p><hr />    <p align="center">    Time Limit: 10 Seconds &nbsp;&nbsp;&nbsp;&nbsp; Memory Limit: 65536 KB &nbsp;&nbsp;&nbsp;&nbsp; Special Judge </p><p>原题链接：<a href="http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3409">http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3409</a></p><p>    <strong>算法：模拟题、高中动量守恒公式套上三维模板、计算机模拟手解一元二次方程</strong></p><p>    <strong>题目大意：你从</strong><strong>(0,0,0)</strong><strong>出发，途中经过</strong><strong>N-1</strong><strong>个点，最后到达第</strong><strong>N</strong><strong>个点。</strong><strong>(N&lt;=40)</strong><strong></strong></p><p>    <strong>这些点均在三维空间中，这</strong><strong>N</strong><strong>个 点的三维坐标均给出。题目背景是太空中的宇宙飞行，故无重力影响，每个点只靠火箭助推器的喷射来改变速度大小和方向。（而且每次动量守恒求解过程中，保证 助推器的速度大小均达到最大。速度根据情况而定）故每个拐点的运动改变方式完全符合动量守恒定律（只不过是三维空间的）。</strong><strong></strong></p><p>    <strong>现给你</strong><strong>M</strong><strong>，总质量，</strong><strong>m1</strong><strong>，不含所有燃料的火箭剩余质量（</strong><strong>1&lt;=M1&lt;M-n*m0</strong><strong>）</strong><strong>,m0</strong><strong>，单块燃料（火箭助推器）的质量，</strong><strong>v0</strong><strong>，每次喷射时火箭助推器的速度。</strong><strong>N</strong><strong>个点的坐标。</strong><strong></strong><strong></strong></p><p>    <strong>现求解，从第</strong><strong>0</strong><strong>个点到第</strong><strong>N-1</strong><strong>个点都有火箭助推器参与的速度改变过程，故问到第</strong><strong>N</strong><strong>点时所花费的总时间为多少。若无解，则输出无解时对应的报错语句。</strong><strong></strong></p><p>    <strong>现给出代码及注释：</strong><strong></strong></p><p>    //解法在注释中给出，分别求解一个一元一次方程和一元二次方程即可</p><p>    <strong>/*</strong></p><p>    <strong>还是在之前模拟一下方程吧。防止看不懂</strong><strong></strong></p><p>    <strong>动量守恒定律基本方程。</strong><strong></strong></p><p>    <strong>m1v1+m2v2=m1v1&#8217;+m2v2&#8217;</strong></p><p>    <strong>此处分别有两次应用（实际上可以规约为一种应用，但是怕挫，就分成两种了）</strong><strong></strong></p><p>    <strong>第一种是初始点</strong><strong>0=(m-m0) * v(x,y,z)+m0 * v0(x,y,z)//v</strong><strong>和</strong><strong>v0</strong><strong>分别为三维速度矢量，</strong><strong>v</strong><strong>为第一次喷射后剩余火箭箭体的速度矢量，</strong><strong>v0</strong><strong>为第一次喷射燃料时燃料的速度矢量（所以这其实是三个方程联立，解法为同时两边平方再相加）</strong><strong></strong></p><p>    <strong>式中各参量分别满足</strong><strong>v0(x)^2+v0(y)^2+v0(z)^2=v0^2//v0</strong><strong>已知</strong><strong></strong></p><p>    <strong>v(x,y,z) = k * vec(x,y,z)//vec(x,y,z)</strong><strong>为第</strong><strong>0</strong><strong>点到第一个点的位移矢量</strong><strong></strong></p><p>    <strong>解得</strong><strong>K^2= M0^2*V0^2/(Vec^2*(m-m0)^2), k= sqrt(K^2)</strong></p><p>    <strong>所有值均已知，代入即可解得</strong><strong>//vec</strong><strong>为</strong><strong>vec</strong><strong>矢量的模长，</strong><strong>v0</strong><strong>为标量</strong><strong></strong></p><p>    <strong>第二种为一般情况，针对第</strong><strong>i</strong><strong>个点（</strong><strong>1&lt;=I&lt;=n-1</strong><strong>）</strong><strong></strong></p><p>    <strong>M&#8217;v&#8217;(x,y,z)=(m&#8217;-m0)v(x,y,z)+m0v0(x,y,z)//</strong><strong>实际上三方程联立</strong><strong></strong></p><p>    <strong>v&#8217;</strong><strong>即为第</strong><strong>i-1</strong><strong>个点的速度矢量，</strong><strong>v</strong><strong>为第</strong><strong>I</strong><strong>个点的速度矢量，</strong><strong>m&#8217;</strong><strong>为第</strong><strong>i-1</strong><strong>个点剩余的火箭质量</strong><strong></strong></p><p>    <strong>v(x,y,z)=k * vec(x,y,z)//vec</strong><strong>为第</strong><strong>i</strong><strong>个点到第</strong><strong>I+1</strong><strong>个点的位移矢量</strong><strong></strong></p><p>    <strong>v0x^2+v0Y^2+v0z^2=|v0|^2</strong></p><p>    <strong>将联立方程组左右平方并加和将常数项移到一侧，从而转化为求解</strong><strong>k</strong><strong>为主元的一元二次方程问题，化归式如下：</strong><strong></strong></p><p>    <strong>(m&#8217;- m0) ^ 2 * |vec| ^ 2 * k ^ 2 &#8211; 2 * M&#8217; * (m&#8217;- m0) * scalar(v&#8217;,vec) * k + m&#8217; ^ 2 * |v&#8217;| ^ 2 - m0 ^ 2 * |V0| ^ 2 = 0</strong></p><p>    <strong>一元二次方参数：</strong><strong></strong></p><p>    <strong>A=(M&#8217;-m0)^2 * |vec| ^ 2</strong></p><p>    <strong>B=-2*M&#8217;*(m&#8217;-m0)*scalar(v&#8217;,vec)</strong></p><p>    <strong>C=M&#8217;^2*|v&#8217;|^2-M0^2*|v0|^2</strong></p><p>    <strong>det = b^2 &#8211; 4 * a * c</strong></p><p>    <strong>判断</strong><strong>det</strong><strong>有解与否即可</strong><strong></strong></p><p>    <strong>有解则可由</strong><strong>v(x,y,z)=k*vec(x,y,z)</strong><strong>知道</strong><strong>v</strong><strong>的矢量及大小</strong><strong></strong></p><p>    <strong>从而算出</strong><strong>ti = |vec| / |v|</strong></p><p>    <strong>将第一段与之后的</strong><strong>n-1</strong><strong>段的时间即可</strong><strong></strong></p><p>    <strong>*/</strong></p></div><br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<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 /><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 /><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 /><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 /><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;">10</span><span style="color: #000000;">;<br /><br />inline&nbsp;</span><span style="color: #0000ff;">double</span><span style="color: #000000;">&nbsp;sqr(</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;x&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;x;}<br /><br /></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;point<br /><br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">double</span><span style="color: #000000;">&nbsp;x,y,z;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;input()<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%lf%lf%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 /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}p[</span><span style="color: #000000;">50</span><span style="color: #000000;">];<br /><br /></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;vect</span><span style="color: #008000;">//</span><span style="color: #008000;">矢量定义</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">double</span><span style="color: #000000;">&nbsp;x,y,z,mod;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;init(point&nbsp;p,point&nbsp;q)&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">矢量初始化并计算模长</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;q.x&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;p.x;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;q.y&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;p.y;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;z&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;q.z&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;p.z;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mod&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sqrt(sqr(x)&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;sqr(y)&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;sqr(z));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">double</span><span style="color: #000000;">&nbsp;cal()</span><span style="color: #008000;">//</span><span style="color: #008000;">对于速度矢量进行计算速率</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;mod&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sqrt(sqr(x)&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;sqr(y)&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;sqr(z));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />}vec[</span><span style="color: #000000;">50</span><span style="color: #000000;">],v[</span><span style="color: #000000;">50</span><span style="color: #000000;">];&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">位移矢量和速度矢量</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br /></span><span style="color: #0000ff;">double</span><span style="color: #000000;">&nbsp;scalar(vect&nbsp;a,vect&nbsp;b)&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">点积</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;a.x&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;b.x&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;a.y&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;b.y&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;a.z&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;b.z;<br /><br />}<br /><br /></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;function(</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,</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">mark,</span><span style="color: #0000ff;">double</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">k1,</span><span style="color: #0000ff;">double</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">k2)<br /><br />{&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">求解二次方程专用函数</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">double</span><span style="color: #000000;">&nbsp;det&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sqr(b)&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">4.0</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;a&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;c;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">delta</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(det&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;eps&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;fabs(det)&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;eps)&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">delta&lt;0则无解，无解即对应题目中无解情况</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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 /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&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;">(fabs(det)&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;eps)&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">唯一解</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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 /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;k2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">b&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">2.0</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;a);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">二解的话一正解一负解舍弃负解即可（貌似最后算出来delta都等于0？我没测试，大概吧。。。我甚至没去手工模拟一下负解所对应的实际情况是怎样的，就直接否决了，因为负解一定不会符合题意，根据我方程的参数即可知道）</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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 /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">-</span><span style="color: #000000;">b&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;sqrt(det))&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">2.0</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;a);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k2&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">-</span><span style="color: #000000;">b&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;sqrt(det))&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">2.0</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;a);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}<br /><br /></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;solve(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n)<br /><br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">double</span><span style="color: #000000;">&nbsp;m,m1,mt,m0,v0,k,t&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0.0</span><span style="color: #000000;">,temp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%lf%lf%lf%lf</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">m,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">m1,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">m0,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">v0);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[</span><span style="color: #000000;">0</span><span style="color: #000000;">].x&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;p[</span><span style="color: #000000;">0</span><span style="color: #000000;">].y&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;p[</span><span style="color: #000000;">0</span><span style="color: #000000;">].z&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 /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(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 /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[i].input();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vec[i&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">].init(p[i&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">],p[i]);&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">位移矢量初始化</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">p[0]&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">对于原点处速度矢量和第一段距离的时间的求解</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;=&nbsp;(M-m0)*Vx&nbsp;-&nbsp;m0*V0x&nbsp;//其实可以列一个三元一次方程组用行列式解，我嫌麻烦<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;=&nbsp;(M-m0)*Vy&nbsp;-&nbsp;m0*V0y&nbsp;//也可以用纯几何的点积叉积做，我不会~算了~<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;=&nbsp;(M-m0)*Vz&nbsp;-&nbsp;m0*V0z<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Vx,Vy,Vz)&nbsp;=&nbsp;k&nbsp;*&nbsp;(Vecx,Vecy,Vecz)&nbsp;//求解对象即为k，因为速度矢量方向确定，但是大小不确定，解出大小即可<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V0x^2&nbsp;+&nbsp;V0y^2&nbsp;+&nbsp;V0z^2&nbsp;=&nbsp;V0^2&nbsp;//V0作为已知量，要做好未知量的化归转化，才方便求出可行解<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t0&nbsp;=&nbsp;|Vec0|&nbsp;/&nbsp;|V[0]|&nbsp;//标量除法<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;+=&nbsp;t0<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mt&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;m&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;m0;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">第一次后剩余质量</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sqrt(sqr(m0)&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;sqr(v0)&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;sqr(mt)&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;sqr(vec[</span><span style="color: #000000;">0</span><span style="color: #000000;">].mod));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v[</span><span style="color: #000000;">0</span><span style="color: #000000;">].x&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;k&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;vec[</span><span style="color: #000000;">0</span><span style="color: #000000;">].x;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v[</span><span style="color: #000000;">0</span><span style="color: #000000;">].y&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;k&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;vec[</span><span style="color: #000000;">0</span><span style="color: #000000;">].y;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v[</span><span style="color: #000000;">0</span><span style="color: #000000;">].z&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;k&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;vec[</span><span style="color: #000000;">0</span><span style="color: #000000;">].z;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;vec[</span><span style="color: #000000;">0</span><span style="color: #000000;">].mod&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;v[</span><span style="color: #000000;">0</span><span style="color: #000000;">].cal();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;temp;<br /><br /></span><span style="color: #008000;">//</span><span style="color: #008000;">对于一般点处，求解一般方程</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ti&nbsp;=&nbsp;|Veci|&nbsp;/&nbsp;|V[i]|<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mt&nbsp;*&nbsp;Vx[i&nbsp;-&nbsp;1]&nbsp;=&nbsp;(Mt&nbsp;-&nbsp;m0)&nbsp;*&nbsp;Vx[i]&nbsp;+&nbsp;m0&nbsp;*&nbsp;V0x<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mt&nbsp;*&nbsp;Vy[i&nbsp;-&nbsp;1]&nbsp;=&nbsp;(Mt&nbsp;-&nbsp;m0)&nbsp;*&nbsp;Vy[i]&nbsp;+&nbsp;m0&nbsp;*&nbsp;V0y<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mt&nbsp;*&nbsp;Vz[i&nbsp;-&nbsp;1]&nbsp;=&nbsp;(Mt&nbsp;-&nbsp;m0)&nbsp;*&nbsp;Vz[i]&nbsp;+&nbsp;m0&nbsp;*&nbsp;V0z<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V[i](x,y,z)&nbsp;=&nbsp;k&nbsp;*&nbsp;Vec[i](x,y,z)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V0x^2&nbsp;+&nbsp;V0y^2&nbsp;+&nbsp;V0z^2&nbsp;=&nbsp;V0^2<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k^2*|Vec[i]|^2*(Mt-m0)^2&nbsp;-&nbsp;2*Mt(Mt-m0)*k*(scalar(Vec[i],V[i-1]))&nbsp;+&nbsp;Mt^2*|V[i-1]|^2&nbsp;-&nbsp;m0^2*|V0|^2&nbsp;=&nbsp;0<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(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 /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&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;k1,k2;<br /><br />&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;a,b,c;<br /><br />&nbsp;&nbsp;&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;">true</span><span style="color: #000000;">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sqr(vec[i].mod)&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;sqr(mt&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;m0);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">2.0</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;mt&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;(mt&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;m0)&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;scalar(vec[i],v[i&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">]);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sqr(mt)&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;sqr(v[i&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">].cal())&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;sqr(m0)&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;sqr(v0);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function(a,b,c,mark,k1,k2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&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;">(mark)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;">(k1&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 /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;k1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;">(k2&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 /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;k2;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v[i].x&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;k&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;vec[i].x;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v[i].y&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;k&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;vec[i].y;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v[i].z&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;k&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;vec[i].z;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;vec[i].mod&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;v[i].cal();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;temp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&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 /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">Another&nbsp;kind&nbsp;of&nbsp;KKV.\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mt&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;mt&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;m0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%.2lf\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,t);<br /><br />}<br /><br /></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br /><br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">freopen("3409.in","r",stdin);</span><span style="color: #008000;"><br /></span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n;<br /><br />&nbsp;&nbsp;&nbsp;&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</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">n)&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;EOF)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solve(n);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}</span></div><img src ="http://www.cppblog.com/aswmtjdsj/aggbug/150199.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-07-05 12:56 <a href="http://www.cppblog.com/aswmtjdsj/archive/2011/07/05/150199.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>