﻿<?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++博客-【♂Not The Triumph♂O(∩_∩)O哈哈~But The Struggle♂】-文章分类-数论&amp;几何</title><link>http://www.cppblog.com/xiongnanbin/category/10004.html</link><description>竞赛决不是捷径，它只是另一种艰辛的生活方式。得到与失去，只有时间会去评判；成功与失败，只有历史能去仲裁。我不会永远成功，正如我不会永远失败一样</description><language>zh-cn</language><lastBuildDate>Mon, 24 Aug 2009 22:01:17 GMT</lastBuildDate><pubDate>Mon, 24 Aug 2009 22:01:17 GMT</pubDate><ttl>60</ttl><item><title>【NOIP 2001 一元三次方程求解】</title><link>http://www.cppblog.com/xiongnanbin/articles/94100.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Sat, 22 Aug 2009 09:00:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/94100.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/94100.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/94100.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/94100.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/94100.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">有形如：ax^3+bx^2+cx+d=0 这样的一个一元三次方程。给出该方程中各项的系数(a，b，c，d 均为实数)，并约定该方程存在三个不同实根(根的范围在-100至100之间)，且根与根之差的绝对值&gt;=1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格)，并精确到小数点后2位。<br>提示：记方程f(x)=0，若存在2个数x1和x2，且x1&lt;x2，f(x1)*(x2)&lt;0，则在(x1，x2)之间一定有一个根。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">input：<br>输入该方程中各项的系数(a，b，c，d 均为实数)，</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">output：<br>由小到大依次在同一行输出这三个实根(根与根之间留有空格)，并精确到小数点后2位。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">input：<br>1 -5 -4 20</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">output：<br>-2.00 2.00 5.00</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong style="COLOR: #ff00ff">【参考程序】：</strong></p>
<div style="BORDER-RIGHT: #00ffff 2px solid; PADDING-RIGHT: 5px; BORDER-TOP: #00ffff 2px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #00ffff 2px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #00ffff 2px solid; FONT-FAMILY: 宋体; BACKGROUND-COLOR: #eeeeee"><strong><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span></strong><span style="COLOR: #000000"><br><strong>#include</strong></span><strong><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstdio</span><span style="COLOR: #000000">&gt;</span></strong><span style="COLOR: #000000"><br></span><strong><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span></strong><strong><span style="COLOR: #000000">&nbsp;std;<br><br></span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;ans[</span><span style="COLOR: #000000">4</span></strong><strong><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">double</span></strong><strong><span style="COLOR: #000000">&nbsp;a,b,c,d;<br></span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;f(</span><span style="COLOR: #0000ff">double</span></strong><strong><span style="COLOR: #000000">&nbsp;xt)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span></strong><strong><span style="COLOR: #000000">&nbsp;s;<br>&nbsp;&nbsp;&nbsp;&nbsp;s</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">xt</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">xt</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">xt</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">xt</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">xt</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">c</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">xt</span><span style="COLOR: #000000">+</span></strong><strong><span style="COLOR: #000000">d;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span></strong><strong><span style="COLOR: #000000">&nbsp;s;<br>}<br></span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;main()<br>{<br>&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">a,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">b,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">c,</span><span style="COLOR: #000000">&amp;</span></strong><strong><span style="COLOR: #000000">d);<br>&nbsp;&nbsp;&nbsp;&nbsp;b</span><span style="COLOR: #000000">/=</span><span style="COLOR: #000000">a;&nbsp;c</span><span style="COLOR: #000000">/=</span><span style="COLOR: #000000">a;&nbsp;d</span><span style="COLOR: #000000">/=</span></strong><strong><span style="COLOR: #000000">a;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;x1,x2;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;p</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x</span><span style="COLOR: #000000">=-</span><span style="COLOR: #000000">10000</span><span style="COLOR: #000000">;x</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">10000</span><span style="COLOR: #000000">;x</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">0.05</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">100.0</span><span style="COLOR: #000000">;&nbsp;x2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(x</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">0.05</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">100.0</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(f(x</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">100.0</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;f(x1)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">f(x2)</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">0</span></strong><strong><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;p</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;&nbsp;ans[p]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">x</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">100.0</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(p</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #0000ff">break</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</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">2</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">++</span></strong><strong><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">&nbsp;(ans[i]</span><span style="COLOR: #000000">&gt;</span></strong><strong><span style="COLOR: #000000">ans[j])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;t</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ans[i];ans[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ans[j];ans[j]</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">t;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</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">p</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%.2lf&nbsp;</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">,ans[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%0.2lf\n</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">,ans[p]);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span></strong><span style="COLOR: #000000"><strong>;<br>}</strong></span></div>
<br><strong style="FONT-SIZE: 12pt">【参考程序】：<br>
<div style="BORDER-RIGHT: #00ffff 2px solid; PADDING-RIGHT: 5px; BORDER-TOP: #00ffff 2px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #00ffff 2px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #00ffff 2px solid; FONT-FAMILY: 宋体; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">var&nbsp;a,b,c,d,x1,x2,tt:</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;x,i,j,k:longint;<br>&nbsp;&nbsp;&nbsp;&nbsp;ans:array[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">..</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">]of&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">;<br>function&nbsp;f(xx:</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">):</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">;<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp;f:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">xx</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">xx</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">xx</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">xx</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">xx</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">c</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">xx</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">d;<br>end;<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">while&nbsp;not&nbsp;eof&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">begin</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;read(a,b,c,d);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">a;c:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">c</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">a;d:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">d</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">a;a:</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;k:</span><span style="COLOR: #000000">=</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">&nbsp;x:</span><span style="COLOR: #000000">=-</span><span style="COLOR: #000000">10000</span><span style="COLOR: #000000">&nbsp;to&nbsp;</span><span style="COLOR: #000000">10000</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x1:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">0.005</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">;x2:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(x</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">0.005</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">100</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">&nbsp;(f(x1)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">f(x2)</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)or(f(x2)</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inc(k);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans[k]:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">x</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;i:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;to&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;j:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;to&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">do</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">&nbsp;ans[i]</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">ans[j]&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tt:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ans[i];ans[i]:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ans[j];ans[j]:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">tt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;i:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;to&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000">&nbsp;write(ans[i]:</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writeln(ans[</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">]:</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">end;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">end.</span></div>
</strong>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/94100.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-08-22 17:00 <a href="http://www.cppblog.com/xiongnanbin/articles/94100.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Fencing the Cows 圈奶牛】</title><link>http://www.cppblog.com/xiongnanbin/articles/92005.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Mon, 03 Aug 2009 02:12:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/92005.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/92005.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/92005.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/92005.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/92005.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt">农夫约翰想要建造一个围栏用来围住他的奶牛，可是他资金匮乏。他建造的围栏必须包括他的奶牛喜欢吃草的所有地点。对于给出的这些地点的坐标，计算最短的能够围住这些点的围栏的长度。</p>
<p style="FONT-SIZE: 12pt">格式<br>PROGRAM NAME: fc<br>INPUT FORMAT</p>
<p style="FONT-SIZE: 12pt">输入数据的第一行包括一个整数 N。N（0 &lt;= N &lt;= 10,000）表示农夫约翰想要围住的放牧点的数目。接下来 N 行，每行由两个实数组成，Xi 和 Yi,对应平面上的放牧点坐标（-1,000,000 &lt;= Xi,Yi &lt;= 1,000,000）。数字用小数表示。</p>
<p style="FONT-SIZE: 12pt">OUTPUT FORMAT<br>输出必须包括一个实数，表示必须的围栏的长度。答案保留两位小数。</p>
<p style="FONT-SIZE: 12pt">SAMPLE INPUT (file fc.in)<br>4<br>4 8<br>4 12<br>5 9.3<br>7 8</p>
<p style="FONT-SIZE: 12pt">SAMPLE OUTPUT (file fc.out)<br>12.00<br><br><strong style="COLOR: #ff0000">分析：赤裸裸的凸包问题。<a style="COLOR: #0000ff" href="http://www.cppblog.com/xiongnanbin/articles/92001.html">参考资料</a></strong><br><br><strong>【参考程序】：</strong></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: Arial; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;fc<br>LANG:&nbsp;C++<br></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdlib.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">math.h</span><span style="COLOR: #000000">&gt;</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">double</span><span style="COLOR: #000000">&nbsp;x,y;<br>}&nbsp;stack[</span><span style="COLOR: #000000">10001</span><span style="COLOR: #000000">],p[</span><span style="COLOR: #000000">10001</span><span style="COLOR: #000000">],ST;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n,top;<br></span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;dis(point&nbsp;a1,point&nbsp;a2)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;s</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">pow((a1.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a2.x),</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">pow((a1.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a2.y),</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;sqrt(s);<br>}<br></span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;chaji(point&nbsp;a1,point&nbsp;a2,point&nbsp;a0)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;point&nbsp;x1,x2;<br>&nbsp;&nbsp;&nbsp;&nbsp;x1.x</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a1.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a0.x;&nbsp;x1.y</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a1.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a0.y;<br>&nbsp;&nbsp;&nbsp;&nbsp;x2.x</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a2.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a0.x;&nbsp;x2.y</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a2.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a0.y;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;(x1.x</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">x2.y)</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">(x2.x</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">x1.y);<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;cmp(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">t)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;point&nbsp;i</span><span style="COLOR: #000000">=*</span><span style="COLOR: #000000">(point&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)s,j</span><span style="COLOR: #000000">=*</span><span style="COLOR: #000000">(point&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)t;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;m</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">chaji(i,j,ST);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(m</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&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>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(m</span><span style="COLOR: #000000">==</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;dis(i,ST)</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">dis(j,ST))&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>&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>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;init()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;mx</span><span style="COLOR: #000000">=-</span><span style="COLOR: #000000">0xFFFFFFF</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k;<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">&nbsp;(</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">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%lf%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);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(p[i].x</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">mx)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mx</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">p[i].x;&nbsp;ST</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">p[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;p[k]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">p[n];&nbsp;n</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;qsort(p</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,n,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(point),cmp);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;graham()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;m;<br>&nbsp;&nbsp;&nbsp;&nbsp;stack[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ST;&nbsp;stack[top</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">p[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">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;stack[</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">top]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">p[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">chaji(stack[top],stack[top</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">],stack[top</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;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(m</span><span style="COLOR: #000000">&lt;</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;stack[top</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">stack[top];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">chaji(stack[top],stack[top</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">],stack[top</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;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;cout_ans()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;ans</span><span style="COLOR: #000000">=</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">&nbsp;(</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">top;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">dis(stack[i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">],stack[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">dis(stack[top],stack[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]);<br>&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">,ans);<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">fc.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">fc.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;init();<br>&nbsp;&nbsp;&nbsp;&nbsp;graham();<br>&nbsp;&nbsp;&nbsp;&nbsp;cout_ans();<br>&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>}</span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/92005.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-08-03 10:12 <a href="http://www.cppblog.com/xiongnanbin/articles/92005.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Two Dimensional Convex Hull 二维凸包(转NOCOW)】</title><link>http://www.cppblog.com/xiongnanbin/articles/92001.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Mon, 03 Aug 2009 01:54:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/92001.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/92001.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/92001.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/92001.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/92001.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp; * 1 准备知识<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *1.1 几何学<br>&nbsp;&nbsp;&nbsp; * 2 数学模型<br>&nbsp;&nbsp;&nbsp; * 3 例题：放牧奶牛<br>&nbsp;&nbsp;&nbsp; * 4 格拉汉扫描法<br>&nbsp;&nbsp;&nbsp; * 5 凸包算法流程<br>&nbsp;&nbsp;&nbsp; * 6 伪代码<br>&nbsp;&nbsp;&nbsp; * 7 跟踪<br>&nbsp;&nbsp;&nbsp; * 8 问题提示<br>&nbsp;&nbsp;&nbsp; * 9 推广<br>&nbsp;&nbsp;&nbsp; * 10 例题<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *10.1 树的难题 [IOI 1991, problem 2]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *10.2 吝啬的护城河建设</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">准备知识<br>几何学<br>数学模型</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">给出平面内的点集，找出面积最小的凸多边形，使得这些点在这个多边形之内（或者在它的边上）。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">可以看出，多边形的顶点必须是给定点集中的点。<br><img height=184 alt="" src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/Ch1.gif" width=202 border=0><br>例题：放牧奶牛</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">农夫约翰想要修建一个栅栏，来防止讨厌的当地大学生在他的奶牛们睡觉的时候把它们掀翻。他的每头奶牛都有一个最喜欢的吃草点，农夫约翰想要把这些点都围在栅栏内。农夫约翰要围出一个凸的形状，因为这样更容易把奶牛赶进牧场。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">帮助农夫约翰确定面积最小的而且包括所有奶牛喜爱的吃草点的栅栏形状。<br><br>格拉汉扫描法</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">解决二维凸包问题有好几种算法。这里，我们只介绍比较容易编码和记忆的&#8220;卷包裹&#8221;算法（其实就是我们所说的格拉汉扫描法——译者注）。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">算 法的基本思想是在一个肯定会在凸包内的点周围不断地由顺时针或逆时针方向增加顶点，并确保每个内角都小于 180 度（保证最终答案是凸的）。如果三个连续的顶点构成的角度大于 180 度，删掉中间的点。可以用两个沿着多边形边的连续向量的叉积来判断角度是否大于 180 度。<br><img height=199 alt="" src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/Ch2.gif" width=217 border=0><br><img height=199 alt="" src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/Ch3a.gif" width=217 border=0><br><img height=199 alt="" src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/Ch3b.gif" width=217 border=0></p>
<p style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体"><strong style="COLOR: #000000">凸包算法流程:</strong><br>* 找出一个必定会在凸包内的中点<br>* 计算每个点和中点的连线与x轴的夹角（在 0——360 度的范围内）<br>* 根据这些夹角对顶点排序<br>* 加入最初的两个顶点<br>* 对于除最后一个顶点以外的其余顶点<br>* 让其成为凸包上的下一个顶点<br>* 检查它和前面两个顶点组成的角是否大于 180 度<br>*如果它和前面两个顶点组成的角大于 180 度，那么把它前面那个顶点删掉<br>* 加入最后一个顶点<br>*完成上述的删除任务<br>*检查最后一个顶点和它的前一个顶点和第一个顶点所组成的角是否大于 180 度，或者最后一个顶点和第一、第二个顶点组成的角是否大于 180 度。<br>*如果第一种情况为真，删除最后一个顶点，并且检查倒数第二个顶点。<br>*如果第二种情况为真，删除第一个顶点，继续检查。<br>*当两种情况都不为真时，停止。<br>*由于角度的计算方式，增加顶点的时间复杂度是线性的（就是我们所说的 O(n) ）。因此，运行的时间复杂度决定于排序的时间复杂度，所以&#8220;卷包裹法&#8221;的时间复杂度是 O( n log n )，这是最优的。</p>
<p style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体"><strong style="COLOR: #000000">简单点概括点：<br><br></strong>1)求q中y坐标最小的点p0,若具有最小坐标的点有多个,则取最左边的点作为po.</p>
<p style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体">2)对q中剩余的点按逆时针相对p0的极角排序,若有数个保留其中距p0最远的点</p>
<p style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体">&nbsp;得到序列(p1,p2,...pn-1);</p>
<p style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体">3)p0,p1,p2相继入栈</p>
<p style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体">4)for i=3 to n-1 do</p>
<p style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp; 1) while 由次栈顶元素、栈顶元素和Pi所形成角不是向左转do栈顶元素出栈s；<br>&nbsp;&nbsp;&nbsp; 2)pi入栈</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><span style="COLOR: #ff0000">5)打印按逆时针排列的栈中的各顶点。<br></span></p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><br>代码：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
<p style="FONT-SIZE: 12pt; FONT-FAMILY: Arial"><span style="COLOR: #000000">program&nbsp;tubao;<br></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;maxn</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">500</span><span style="COLOR: #000000">;<br>type&nbsp;p</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">record<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x,y:real;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>var&nbsp;n,top:integer;<br>list:array[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">..maxn]of&nbsp;p;<br>s:array[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">..maxn]&nbsp;of&nbsp;integer;<br>f:text;<br>procedure&nbsp;swap(var&nbsp;a,b:p);<br>var&nbsp;t:p;<br>begin&nbsp;t:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a;a:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b;b:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">t&nbsp;end;<br>function&nbsp;m(p1,p2,p0:p):real;<br>begin<br>&nbsp;m:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(p1.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">p0.x)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(p2.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">p0.y)</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">(p2.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">p0.x)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(p1.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">p0.y);<br>end;<br>function&nbsp;comp(p1,p2:p):boolean;<br>var&nbsp;t:real;<br>begin<br>&nbsp;t:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">m(p1,p2,list[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]);<br>&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(t</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;or&nbsp;(t</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;and&nbsp;(sqr(p1.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">list[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].x)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">sqr(p1.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">list[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].y)</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;sqr(p2.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">list[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].x)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">sqr(p2.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">list[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].y))<br>&nbsp;&nbsp;&nbsp;then&nbsp;comp:</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;&nbsp;comp:</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>end;<br>procedure&nbsp;sort(l,r:integer);<br>var&nbsp;i,j:integer;<br>x:p;<br>begin<br>&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;r</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">l</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">&nbsp;then&nbsp;begin<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;j:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">l</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;to&nbsp;&nbsp;r&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;i:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">j;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(i</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;and&nbsp;comp(list[i],list[i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">])&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;swap(list[i],list[i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]);&nbsp;dec(i)&nbsp;end<br>&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;end&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;x:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">list[l</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">random(r</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">l</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)];<br>&nbsp;&nbsp;&nbsp;&nbsp;i:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">l;j:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">r;<br>&nbsp;&nbsp;&nbsp;&nbsp;repeat<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;comp(list[i],x)&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000">&nbsp;inc(j);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;comp(x,list[j])&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000">&nbsp;dec(j);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">j&nbsp;then&nbsp;swap(list[i],list[j])<br>&nbsp;&nbsp;&nbsp;&nbsp;until&nbsp;i</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">j;<br>&nbsp;&nbsp;&nbsp;&nbsp;sort(l,j);<br>&nbsp;&nbsp;&nbsp;&nbsp;sort(j</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,r);<br>&nbsp;&nbsp;&nbsp;&nbsp;end<br>end;<br>procedure&nbsp;init;<br>var&nbsp;i:integer;<br>begin<br>&nbsp;assign(f,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">input.txt</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);<br>&nbsp;reset(f);<br>&nbsp;readln(f,n);<br>&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;i:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;to&nbsp;n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;readln(f,list[i].x,list[i].y);<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(list[i].y</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">list[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].y)&nbsp;or<br>&nbsp;&nbsp;&nbsp;&nbsp;(list[i].y</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">list[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].y)&nbsp;and&nbsp;(list[i].x</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">list[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].x)<br>&nbsp;&nbsp;&nbsp;&nbsp;then&nbsp;swap(list[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">],list[i]);<br>&nbsp;&nbsp;&nbsp;end&nbsp;;<br>&nbsp;sort(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br>&nbsp;end;<br>&nbsp;procedure&nbsp;graham;<br>&nbsp;var&nbsp;i:integer;<br>&nbsp;begin<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;i:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;to&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000">&nbsp;s[i]:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;top:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;i:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">&nbsp;to&nbsp;n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;m(list[i],list[s[top]],list[s[top</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]])</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000">&nbsp;dec(top);<br>&nbsp;&nbsp;&nbsp;&nbsp;inc(top);<br>&nbsp;&nbsp;&nbsp;&nbsp;s[top]:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br>&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;i:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;to&nbsp;top&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;write(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,list[s[i]].x:</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,list[s[i]].y:</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;writeln<br>&nbsp;end;<br>&nbsp;begin<br>&nbsp;init;<br>&nbsp;graham;<br>&nbsp;readln<br>&nbsp;end.</span></p>
</div>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><br><br><strong style="COLOR: #ff0000">手动跟踪：</strong></p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">对于下面的跟踪，我们使用这些顶点：<br><img height=184 alt="" src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/Ch2a.gif" width=207 border=0></p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">选择一个中心，计算夹角，并排序。<br><img height=199 alt="" src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/Ch2.gif" width=217 border=0><br>现在，从加入最初的两个顶点开始。<br><img height=199 alt="" src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/Ch3a.gif" width=217 border=0></p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">现在，加入第三个顶点。由于这步操作没有和前两个顶点构成一个大于 180 度的角，我们只需加入这个顶点。<br><img height=199 alt="" src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/Ch3b.gif" width=217 border=0></p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">加入第四个顶点。这一次没有构成大于 180 度的角，所以不必做更多的工作。<br><img height=199 alt="" src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/Ch3c.gif" width=217 border=0></p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">加入第五个顶点。<br><img height=199 alt="" src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/Ch3d.gif" width=230 border=0></p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">由于第三个，第四个，和第五个顶点构成了一个大于 180 度的角（一个&#8220;向右的&#8221;转弯），我们删去第四个顶点。<br><img height=199 alt="" src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/Ch3e.gif" width=230 border=0><br>第二个，第三个，和第四个顶点没有构成一个大于 180 度的角，所以我们完成了加入第五个顶点的任务。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">加入第六个，第七个，和第八8个顶点。这个过程中没有附加的工作。<br><img height=209 alt="" src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/Ch3h.gif" width=230 border=0><br>接着，加入最后一个顶点。<br><img height=209 alt="" src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/Ch3j.gif" width=230 border=0><br></p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">第八个，第九个，和第一个顶点构成&#8220;右转&#8221;；删除第九个顶点。<br><img height=209 alt="" src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/Ch3k.gif" width=230 border=0></p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">第七个，第八个，和第一个顶点已经完成了，可是第八个，第一个，和第二个顶点构成&#8220;右转&#8221;，所以我们必须删除第一个顶点。<br><img height=209 alt="" src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/Ch3l.gif" width=230 border=0></p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">现在，第八个，第二个，和第三个顶点构成&#8220;右转&#8221;，所以我们又要删除第二个顶点。<br><img height=209 alt="" src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/Ch3m.gif" width=230 border=0></p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">剩下的顶点并不违反&#8220;左转&#8221;原则，所以我们已经完成了任务，并且建立了给出顶点的凸包。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">问题提示</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">类似把顶点放入多边形的题目通常是求凸包。如果题目要求一个面积最小的凸多边形，或者周长最小的凸多边形，那么我们几乎可以确定是要求凸包了。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">推广</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">不幸的是，这个算法不能简单地推广到三维的情形。幸运的是，三维凸包算法全都超级复杂（四维以上的更恶心），所以题目不太可能要你去求。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">如果你给多边形加上任何限制条件时，这个算法就玩完了（例如，多边形的顶点不多于 n 个，或者必须是矩形）。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">例题<br>树的难题 [IOI 1991, problem 2]</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">已知：有一些树，你必须用铁丝围绕这些树，使得你用的铁丝最短。计算哪些树会在多边形的顶点上和铁丝的长度，还有农夫的小屋是在多边形内，还是在它之外，还是跨过多边形的边？</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">分析：多边形的顶点和铁丝的长度可以由问题直接得到。农夫的小屋是坐标轴上的一个矩形，你需要一点几何学知识来确定矩形中的所有点都在凸包中，或者都在凸包外，或者一些在凸包内，一些在凸包外。这样你就可以得到你想要的答案。查查几何手册，找一下这类问题的解法。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">吝啬的护城河建设</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">已知：一些多边形房屋，计算包含这些多边形除去一个多边形的护城河的最小长度。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">分析：计算已知多边形的凸包相当于计算它的所有顶点的凸包。这是一个组合问题，需要一个循环和一个凸包生成程序。对于每座房屋，删去这座房屋并计算剩下顶点的凸包。选择使得凸包最小的那座房屋。注意，只要考虑那些顶点和整个凸包重合的房屋即可，考虑整个凸包内的房屋对于问题没有任何帮助</p>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/92001.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-08-03 09:54 <a href="http://www.cppblog.com/xiongnanbin/articles/92001.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【中学公式大全2】</title><link>http://www.cppblog.com/xiongnanbin/articles/78241.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Sun, 29 Mar 2009 01:13:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/78241.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/78241.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/78241.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/78241.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/78241.html</trackback:ping><description><![CDATA[<strong><font color=#0000ff>98 性质定理3 相似三角形面积的比等于相似比的平方 <br></font></strong>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　99 任意锐角的正弦值等于它的余角的余弦值，任意锐角的余弦值等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　于它的余角的正弦值 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　100任意锐角的正切值等于它的余角的余切值，任意锐角的余切值等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　于它的余角的正切值 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　101圆是定点的距离等于定长的点的集合 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　102圆的内部可以看作是圆心的距离小于半径的点的集合 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　103圆的外部可以看作是圆心的距离大于半径的点的集合 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　104同圆或等圆的半径相等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　105到定点的距离等于定长的点的轨迹，是以定点为圆心，定长为半 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　径的圆 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　106和已知线段两个端点的距离相等的点的轨迹，是着条线段的垂直 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　平分线 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　107到已知角的两边距离相等的点的轨迹，是这个角的平分线 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　108到两条平行线距离相等的点的轨迹，是和这两条平行线平行且距 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　离相等的一条直线 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　109定理 不在同一直线上的三点确定一个圆。 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　110垂径定理 垂直于弦的直径平分这条弦并且平分弦所对的两条弧 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　111推论1 ①平分弦（不是直径）的直径垂直于弦，并且平分弦所对的两条弧 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　②弦的垂直平分线经过圆心，并且平分弦所对的两条弧 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　③平分弦所对的一条弧的直径，垂直平分弦，并且平分弦所对的另一条弧 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　112推论2 圆的两条平行弦所夹的弧相等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　113圆是以圆心为对称中心的中心对称图形 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　114定理 在同圆或等圆中，相等的圆心角所对的弧相等，所对的弦 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　相等，所对的弦的弦心距相等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　115推论 在同圆或等圆中，如果两个圆心角、两条弧、两条弦或两 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　弦的弦心距中有一组量相等那么它们所对应的其余各组量都相等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　116定理 一条弧所对的圆周角等于它所对的圆心角的一半 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　117推论1 同弧或等弧所对的圆周角相等；同圆或等圆中，相等的圆周角所对的弧也相等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　118推论2 半圆（或直径）所对的圆周角是直角；90&#176;的圆周角所 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　对的弦是直径 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　119推论3 如果三角形一边上的中线等于这边的一半，那么这个三角形是直角三角形 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　120定理 圆的内接四边形的对角互补，并且任何一个外角都等于它 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　的内对角 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　121①直线L和⊙O相交 d＜r <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　②直线L和⊙O相切 d=r <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　③直线L和⊙O相离 d＞r <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　122切线的判定定理 经过半径的外端并且垂直于这条半径的直线是圆的切线 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　123切线的性质定理 圆的切线垂直于经过切点的半径 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　124推论1 经过圆心且垂直于切线的直线必经过切点 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　125推论2 经过切点且垂直于切线的直线必经过圆心 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　126切线长定理 从圆外一点引圆的两条切线，它们的切线长相等， <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　圆心和这一点的连线平分两条切线的夹角 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　127圆的外切四边形的两组对边的和相等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　128弦切角定理 弦切角等于它所夹的弧对的圆周角 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　129推论 如果两个弦切角所夹的弧相等，那么这两个弦切角也相等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　130相交弦定理 圆内的两条相交弦，被交点分成的两条线段长的积 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　相等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　131推论 如果弦与直径垂直相交，那么弦的一半是它分直径所成的 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　两条线段的比例中项 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　132切割线定理 从圆外一点引圆的切线和割线，切线长是这点到割 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　线与圆交点的两条线段长的比例中项 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　133推论 从圆外一点引圆的两条割线，这一点到每条割线与圆的交点的两条线段长的积相等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　134如果两个圆相切，那么切点一定在连心线上 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　135①两圆外离 d＞R+r ②两圆外切 d=R+r <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　③两圆相交 R-r＜d＜R+r(R＞r) <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　④两圆内切 d=R-r(R＞r) ⑤两圆内含d＜R-r(R＞r) <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　136定理 相交两圆的连心线垂直平分两圆的公共弦 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　137定理 把圆分成n(n&#8805;3): <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　⑴依次连结各分点所得的多边形是这个圆的内接正n边形 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　⑵经过各分点作圆的切线，以相邻切线的交点为顶点的多边形是这个圆的外切正n边形 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　138定理 任何正多边形都有一个外接圆和一个内切圆，这两个圆是同心圆 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　139正n边形的每个内角都等于（n-2）&#215;180&#176;／n <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　140定理 正n边形的半径和边心距把正n边形分成2n个全等的直角三角形 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　141正n边形的面积Sn=pnrn／2 p表示正n边形的周长 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　142正三角形面积&#8730;3a／4 a表示边长 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　143如果在一个顶点周围有k个正n边形的角，由于这些角的和应为 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　360&#176;，因此k&#215;(n-2)180&#176;／n=360&#176;化为（n-2）(k-2)=4 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　144弧长计算公式：L=n兀R／180 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　145扇形面积公式：S扇形=n兀R^2／360=LR／2 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　146内公切线长= d-(R-r) 外公切线长= d-(R+r) <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　（还有一些，大家帮补充吧） <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　实用工具:常用数学公式 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　公式分类 公式表达式 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　乘法与因式分 a2-b2=(a+b)(a-b) a3+b3=(a+b)(a2-ab+b2) a3-b3=(a-b(a2+ab+b2) <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　三角不等式 |a+b|&#8804;|a|+|b| |a-b|&#8804;|a|+|b| |a|&#8804;b&lt;=&gt;-b&#8804;a&#8804;b <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　|a-b|&#8805;|a|-|b| -|a|&#8804;a&#8804;|a| <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　一元二次方程的解 -b+&#8730;(b2-4ac)/2a -b-&#8730;(b2-4ac)/2a <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　根与系数的关系 X1+X2=-b/a X1*X2=c/a 注：韦达定理 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　判别式 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　b2-4ac=0 注：方程有两个相等的实根 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　b2-4ac&gt;0 注：方程有两个不等的实根 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　b2-4ac&lt;0 注：方程没有实根，有共轭复数根 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　三角函数公式 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　两角和公式 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　sin(A+B)=sinAcosB+cosAsinB sin(A-B)=sinAcosB-sinBcosA <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　cos(A+B)=cosAcosB-sinAsinB cos(A-B)=cosAcosB+sinAsinB <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　tan(A+B)=(tanA+tanB)/(1-tanAtanB) tan(A-B)=(tanA-tanB)/(1+tanAtanB) <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　ctg(A+B)=(ctgActgB-1)/(ctgB+ctgA) ctg(A-B)=(ctgActgB+1)/(ctgB-ctgA) <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　倍角公式 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　tan2A=2tanA/(1-tan2A) ctg2A=(ctg2A-1)/2ctga <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　cos2a=cos2a-sin2a=2cos2a-1=1-2sin2a <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　半角公式 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　sin(A/2)=&#8730;((1-cosA)/2) sin(A/2)=-&#8730;((1-cosA)/2) <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　cos(A/2)=&#8730;((1+cosA)/2) cos(A/2)=-&#8730;((1+cosA)/2) <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　tan(A/2)=&#8730;((1-cosA)/((1+cosA)) tan(A/2)=-&#8730;((1-cosA)/((1+cosA)) <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　ctg(A/2)=&#8730;((1+cosA)/((1-cosA)) ctg(A/2)=-&#8730;((1+cosA)/((1-cosA)) <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　和差化积 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　2sinAcosB=sin(A+B)+sin(A-B) 2cosAsinB=sin(A+B)-sin(A-B) <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　2cosAcosB=cos(A+B)-sin(A-B) -2sinAsinB=cos(A+B)-cos(A-B) <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　sinA+sinB=2sin((A+B)/2)cos((A-B)/2 cosA+cosB=2cos((A+B)/2)sin((A-B)/2) <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　tanA+tanB=sin(A+B)/cosAcosB tanA-tanB=sin(A-B)/cosAcosB <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　ctgA+ctgBsin(A+B)/sinAsinB -ctgA+ctgBsin(A+B)/sinAsinB <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　某些数列前n项和 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　1+2+3+4+5+6+7+8+9+&#8230;+n=n(n+1)/2 1+3+5+7+9+11+13+15+&#8230;+(2n-1)=n2 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　2+4+6+8+10+12+14+&#8230;+(2n)=n(n+1) 12+22+32+42+52+62+72+82+&#8230;+n2=n(n+1)(2n+1)/6 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　13+23+33+43+53+63+&#8230;n3=n2(n+1)2/4 1*2+2*3+3*4+4*5+5*6+6*7+&#8230;+n(n+1)=n(n+1)(n+2)/3 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　正弦定理 a/sinA=b/sinB=c/sinC=2R 注： 其中 R 表示三角形的外接圆半径 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　余弦定理 b2=a2+c2-2accosB 注：角B是边a和边c的夹角 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　圆的标准方程 (x-a)2+(y-b)2=r2 注：（a,b）是圆心坐标 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　圆的一般方程 x2+y2+Dx+Ey+F=0 注：D2+E2-4F&gt;0 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　抛物线标准方程 y2=2px y2=-2px x2=2py x2=-2py <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　直棱柱侧面积 S=c*h 斜棱柱侧面积 S=c'*h <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　正棱锥侧面积 S=1/2c*h' 正棱台侧面积 S=1/2(c+c')h' <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　圆台侧面积 S=1/2(c+c')l=pi(R+r)l 球的表面积 S=4pi*r2 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　圆柱侧面积 S=c*h=2pi*h 圆锥侧面积 S=1/2*c*l=pi*r*l <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　弧长公式 l=a*r a是圆心角的弧度数r &gt;0 扇形面积公式 s=1/2*l*r <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　锥体体积公式 V=1/3*S*H 圆锥体体积公式 V=1/3*pi*r2h <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　斜棱柱体积 V=S'L 注：其中,S'是直截面面积， L是侧棱长 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　柱体体积公式 V=s*h 圆柱体 V=pi*r2h</strong></font> 
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/78241.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-03-29 09:13 <a href="http://www.cppblog.com/xiongnanbin/articles/78241.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【中学公式大全1】</title><link>http://www.cppblog.com/xiongnanbin/articles/78240.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Sun, 29 Mar 2009 01:11:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/78240.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/78240.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/78240.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/78240.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/78240.html</trackback:ping><description><![CDATA[<strong><font color=#0000ff>1 过两点有且只有一条直线 <br></font></strong>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　2 两点之间线段最短 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　3 同角或等角的补角相等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　4 同角或等角的余角相等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　5 过一点有且只有一条直线和已知直线垂直 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　6 直线外一点与直线上各点连接的所有线段中，垂线段最短 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　7 平行公理 经过直线外一点，有且只有一条直线与这条直线平行 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　8 如果两条直线都和第三条直线平行，这两条直线也互相平行 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　9 同位角相等，两直线平行 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　10 内错角相等，两直线平行 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　11 同旁内角互补，两直线平行 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　12两直线平行，同位角相等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　13 两直线平行，内错角相等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　14 两直线平行，同旁内角互补 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　15 定理 三角形两边的和大于第三边 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　16 推论 三角形两边的差小于第三边 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　17 三角形内角和定理 三角形三个内角的和等于180&#176; <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　18 推论1 直角三角形的两个锐角互余 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　19 推论2 三角形的一个外角等于和它不相邻的两个内角的和 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　20 推论3 三角形的一个外角大于任何一个和它不相邻的内角 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　21 全等三角形的对应边、对应角相等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　22边角边公理(SAS) 有两边和它们的夹角对应相等的两个三角形全等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　23 角边角公理( ASA)有两角和它们的夹边对应相等的两个三角形全等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　24 推论(AAS) 有两角和其中一角的对边对应相等的两个三角形全等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　25 边边边公理(SSS) 有三边对应相等的两个三角形全等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　26 斜边、直角边公理(HL) 有斜边和一条直角边对应相等的两个直角三角形全等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　27 定理1 在角的平分线上的点到这个角的两边的距离相等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　28 定理2 到一个角的两边的距离相同的点，在这个角的平分线上 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　29 角的平分线是到角的两边距离相等的所有点的集合 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　30 等腰三角形的性质定理 等腰三角形的两个底角相等 (即等边对等角） <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　31 推论1 等腰三角形顶角的平分线平分底边并且垂直于底边 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　32 等腰三角形的顶角平分线、底边上的中线和底边上的高互相重合 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　33 推论3 等边三角形的各角都相等，并且每一个角都等于60&#176; <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　34 等腰三角形的判定定理 如果一个三角形有两个角相等，那么这两个角所对的边也相等（等角对等边） <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　35 推论1 三个角都相等的三角形是等边三角形 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　36 推论 2 有一个角等于60&#176;的等腰三角形是等边三角形 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　37 在直角三角形中，如果一个锐角等于30&#176;那么它所对的直角边等于斜边的一半 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　38 直角三角形斜边上的中线等于斜边上的一半 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　39 定理 线段垂直平分线上的点和这条线段两个端点的距离相等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　40 逆定理 和一条线段两个端点距离相等的点，在这条线段的垂直平分线上 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　41 线段的垂直平分线可看作和线段两端点距离相等的所有点的集合 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　42 定理1 关于某条直线对称的两个图形是全等形 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　43 定理 2 如果两个图形关于某直线对称，那么对称轴是对应点连线的垂直平分线 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　44定理3 两个图形关于某直线对称，如果它们的对应线段或延长线相交，那么交点在对称轴上 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　45逆定理 如果两个图形的对应点连线被同一条直线垂直平分，那么这两个图形关于这条直线对称 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　46勾股定理 直角三角形两直角边a、b的平方和、等于斜边c的平方，即a^2+b^2=c^2 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　47勾股定理的逆定理 如果三角形的三边长a、b、c有关系a^2+b^2=c^2 ，那么这个三角形是直角三角形 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　48定理 四边形的内角和等于360&#176; <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　49四边形的外角和等于360&#176; <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　50多边形内角和定理 n边形的内角的和等于（n-2）&#215;180&#176; <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　51推论 任意多边的外角和等于360&#176; <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　52平行四边形性质定理1 平行四边形的对角相等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　53平行四边形性质定理2 平行四边形的对边相等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　54推论 夹在两条平行线间的平行线段相等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　55平行四边形性质定理3 平行四边形的对角线互相平分 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　56平行四边形判定定理1 两组对角分别相等的四边形是平行四边形 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　57平行四边形判定定理2 两组对边分别相等的四边形是平行四边形 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　58平行四边形判定定理3 对角线互相平分的四边形是平行四边形 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　59平行四边形判定定理4 一组对边平行相等的四边形是平行四边形 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　60矩形性质定理1 矩形的四个角都是直角 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　61矩形性质定理2 矩形的对角线相等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　62矩形判定定理1 有三个角是直角的四边形是矩形 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　63矩形判定定理2 对角线相等的平行四边形是矩形 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　64菱形性质定理1 菱形的四条边都相等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　65菱形性质定理2 菱形的对角线互相垂直，并且每一条对角线平分一组对角 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　66菱形面积=对角线乘积的一半，即S=（a&#215;b）&#247;2 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　67菱形判定定理1 四边都相等的四边形是菱形 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　68菱形判定定理2 对角线互相垂直的平行四边形是菱形 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　69正方形性质定理1 正方形的四个角都是直角，四条边都相等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　70正方形性质定理2正方形的两条对角线相等，并且互相垂直平分，每条对角线平分一组对角 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　71定理1 关于中心对称的两个图形是全等的 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　72定理2 关于中心对称的两个图形，对称点连线都经过对称中心，并且被对称中心平分 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　73逆定理 如果两个图形的对应点连线都经过某一点，并且被这一 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　点平分，那么这两个图形关于这一点对称 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　74等腰梯形性质定理 等腰梯形在同一底上的两个角相等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　75等腰梯形的两条对角线相等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　76等腰梯形判定定理 在同一底上的两个角相等的梯形是等腰梯形 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　77对角线相等的梯形是等腰梯形 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　78平行线等分线段定理 如果一组平行线在一条直线上截得的线段 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　相等，那么在其他直线上截得的线段也相等 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　79 推论1 经过梯形一腰的中点与底平行的直线，必平分另一腰 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　80 推论2 经过三角形一边的中点与另一边平行的直线，必平分第 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　三边 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　81 三角形中位线定理 三角形的中位线平行于第三边，并且等于它 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　的一半 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　82 梯形中位线定理 梯形的中位线平行于两底，并且等于两底和的 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　一半 L=（a+b）&#247;2 S=L&#215;h <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　83 (1)比例的基本性质 如果a:b=c:d,那么ad=bc <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　如果ad=bc,那么a:b=c:d <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　84 (2)合比性质 如果a／b=c／d,那么(a&#177;b)／b=(c&#177;d)／d <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　85 (3)等比性质 如果a／b=c／d=&#8230;=m／n(b+d+&#8230;+n&#8800;0),那么 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　(a+c+&#8230;+m)／(b+d+&#8230;+n)=a／b <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　86 平行线分线段成比例定理 三条平行线截两条直线，所得的对应 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　线段成比例 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　87 推论 平行于三角形一边的直线截其他两边（或两边的延长线），所得的对应线段成比例 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　88 定理 如果一条直线截三角形的两边（或两边的延长线）所得的对应线段成比例，那么这条直线平行于三角形的第三边 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　89 平行于三角形的一边，并且和其他两边相交的直线，所截得的三角形的三边与原三角形三边对应成比例 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　90 定理 平行于三角形一边的直线和其他两边（或两边的延长线）相交，所构成的三角形与原三角形相似 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　91 相似三角形判定定理1 两角对应相等，两三角形相似（ASA） <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　92 直角三角形被斜边上的高分成的两个直角三角形和原三角形相似 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　93 判定定理2 两边对应成比例且夹角相等，两三角形相似（SAS） <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　94 判定定理3 三边对应成比例，两三角形相似（SSS） <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　95 定理 如果一个直角三角形的斜边和一条直角边与另一个直角三 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　角形的斜边和一条直角边对应成比例，那么这两个直角三角形相似 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　96 性质定理1 相似三角形对应高的比，对应中线的比与对应角平 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　分线的比都等于相似比 <br></strong></font>
<div class=spctrl></div>
<font color=#0000ff size=3><strong>　　97 性质定理2 相似三角形周长的比等于相似比</strong></font> 
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/78240.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-03-29 09:11 <a href="http://www.cppblog.com/xiongnanbin/articles/78240.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用牛顿迭代法快速求平方根</title><link>http://www.cppblog.com/xiongnanbin/articles/78239.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Sun, 29 Mar 2009 01:08:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/78239.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/78239.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/78239.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/78239.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/78239.html</trackback:ping><description><![CDATA[<p>&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; 利用牛顿迭代法快速求平方根<font face="Courier New" size=2><br>下面我来介绍一种比起C里面库函数sqrt()快一些的算法来求一个数的平方根。</font></p>
<p><font face="Courier New" size=2>算法的主要过程是：首先我们设要求的这个数为a，它的平方根为x；然后我们一开始令x=a；然后我们进入一个循环，不断的令x=(x+a/x)/2，就是令x等于 x和a/x的平均值，这样迭代了7-10次左右就可以得到a的平方根x的近似值。</font></p>
<p><font face="Courier New" size=2>假如我们求10的平方根，那么a=10，x=10；</font></p>
<p><span style="FONT: 10pt Courier New"><span class=cpp1-symbol>( 10&nbsp;&nbsp;&nbsp;&nbsp; +&nbsp;&nbsp; 10/10&nbsp;&nbsp; ) / 2 = 5.5<br>( 5.5&nbsp;&nbsp;&nbsp;&nbsp; +&nbsp;&nbsp; 10/5.5 ) / 2 = 3.659090909&#8230;.<br>( 3.659090909 + 10/3.659090909)/2=3.1960050818631&#8230;..<br>&#8230;&#8230;</span></span></p>
<p><span style="FONT: 10pt Courier New"><span class=cpp1-symbol><br></span></span><font face="Courier New" size=2>写成code的话就是这样:</font></p>
<blockquote dir=ltr style="MARGIN-RIGHT: 0px">
<p><span style="FONT: 10pt Courier New"><span class=cpp1-reservedword><font color=#0000ff>double</font></span><span class=cpp1-space> sqrt(</span><span class=cpp1-reservedword><font color=#0000ff>double</font></span><span class=cpp1-space> a){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class=cpp1-reservedword><font color=#0000ff>double</font></span><span class=cpp1-space> x;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x=a;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class=cpp1-reservedword><font color=#0000ff>for</font></span><span class=cpp1-symbol>(</span><span class=cpp1-reservedword><font color=#0000ff>int</font></span><span class=cpp1-space> i=1;i&lt;=10;i++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x=(x+a/x)/2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class=cpp1-reservedword><font color=#0000ff>return</font></span><span class=cpp1-space> x;<br>}</span></span></p>
</blockquote>
<p dir=ltr><span style="FONT: 10pt Courier New"><span class=cpp1-space>这个算法的原理很简单，我们令f(x)=x^2-a,那么我们就是利用牛顿迭代法来求x^2-a=0的根。</span></span></p>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/78239.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-03-29 09:08 <a href="http://www.cppblog.com/xiongnanbin/articles/78239.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RQNOJ【 轰炸】</title><link>http://www.cppblog.com/xiongnanbin/articles/78238.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Sun, 29 Mar 2009 01:07:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/78238.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/78238.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/78238.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/78238.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/78238.html</trackback:ping><description><![CDATA[<font size=3><span class=Text4>&#8220;我该怎么办？&#8221;飞行员klux向你求助。<br>事实上，klux面对的是一个很简单的问题，但是他实在太菜了。<br>klux要想轰炸某个区域内的一些地方，它们是位于平面上的一些点，但是（显然地）klux遇到了抵抗，所以klux只能飞一次，而且由于飞机比较破，一点起飞就只能沿直线飞行，无法转弯。现在他想一次轰炸最多的地方。<br></span><br>input：<br><span class=Text4>输入数据由n对整数组成(1&lt;n&lt;700)，每对整数表示一个点的坐标。没有一个点会出现两次。</span></font>
<p><font size=3>output：<br></font><font size=3><span class=Text4>一个整数，表示一条直线能覆盖的最多的点数。<br></span><br>input：<br>5<br>1 1<br>2 2<br>3 3<br>9 10<br>10 11</font></p>
<p><font size=3>output:<br>3</font></p>
<p><font size=3>分析：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 简单的计算几何题目，利用了直线方程式（同一直线上任意点都满足方程式）<br><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 直线的方程我们先看看两点式方程：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (y-y1)/(y2-y1)=(x-x1)/(x2-x1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 交叉相乘并整理可以得到:(y-y1)(x2-x1)=(y2-y1)(x-x1)<br></font></font><font size=3><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 化为一般式:ax+by+c=0 得：<br><br>&nbsp;&nbsp;&nbsp;&nbsp; 其中:<br>&nbsp;&nbsp;&nbsp;&nbsp; A=y2-y1<br>&nbsp;&nbsp;&nbsp;&nbsp; B=x2-x1<br>&nbsp;&nbsp;&nbsp; C=-ax1+by1</font></font><font size=3><font color=#000000><br>&nbsp;&nbsp;&nbsp; 这样就可以尽量避免除法，因为众所周知，除法是很费时间的，而且有精度问题。<br>&nbsp;&nbsp;&nbsp; 再一次枚举n个点，找出最多。</font></font></p>
<p><font color=#ff00ff size=3><strong>【参考程序】:</strong></font>&nbsp;&nbsp;<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdlib.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">.h</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">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>};<br>point&nbsp;p[</span><span style="COLOR: #000000">710</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n,i,j,max,ans;<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">n);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</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">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d</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;ans</span><span style="COLOR: #000000">=</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">&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">n</span><span style="COLOR: #000000">-</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;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i</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">n;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;max</span><span style="COLOR: #000000">=</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;a,b,c;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">p[j].y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">p[i].y;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">p[j].x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">p[i].x;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c</span><span style="COLOR: #000000">=-</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">p[i].x</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">p[i].y;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;k</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;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;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(a</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">p[k].x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">p[k].y</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">c</span><span style="COLOR: #000000">==</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;max</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">&nbsp;(ans</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">max)&nbsp;ans</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">max;<br>&nbsp;&nbsp;&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>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&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>}<br></span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/78238.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-03-29 09:07 <a href="http://www.cppblog.com/xiongnanbin/articles/78238.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【交汇的火力】(计算几何)  </title><link>http://www.cppblog.com/xiongnanbin/articles/78237.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Sun, 29 Mar 2009 01:06:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/78237.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/78237.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/78237.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/78237.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/78237.html</trackback:ping><description><![CDATA[<span class=Text4>小D正在玩CS,喜欢思考的他看到无数子弹从他眼前飞过时想到了一个奇怪的问题:这么多子弹在空中飞来飞去,难道它们不会相撞吗?当然这是可能的.小D把两颗子弹轨迹相交的地方叫做&#8221;火力汇点&#8221;,显然如果让敌人站在火力汇点上那么他将受到更严重的伤害.小D想知道平面上的所有火力汇点以便对敌人造成更重的打击,但是小D数学很差,所以他找到了你,请你帮他计算出平面上所有火力汇点的坐标.小D用直线来描述子弹的轨迹,这种子弹很特别,它发射后会迸裂成两颗并沿相反方向飞行(汗!!那不是打自己),小D数学很差(已知),只会用直线的一般式表示每条直线y=kx+b.<br>[数据规模]<br>对所有数据k,b&lt;=maxint n&lt;=100<br><img height=299 src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/111.jpg" width=397 border=0><br>
<p>input：<br><span class=Text4>n<br>k1 b1<br>k2 b2<br>.<br>kn bn<br>第一行一个数n,表示直线数量<br>接下来n行,每行描述一条直线</span></p>
<p><span class=Text4>output：<br>最多的火力交点数目<br>没有输出 No Fire Point.</span></p>
<span class=Text4><strong><font color=#ff00ff size=3>【参考程序】：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;wc</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1e</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br>var&nbsp;p:array[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">..</span><span style="COLOR: #000000">5000</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">..</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]&nbsp;of&nbsp;real;<br>&nbsp;&nbsp;&nbsp;&nbsp;line:array[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">..</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">..</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]&nbsp;of&nbsp;integer;<br>&nbsp;&nbsp;&nbsp;&nbsp;i,j,n:integer;<br>procedure&nbsp;put(x,y:real);<br>var&nbsp;i:integer;f:boolean;<br>begin<br>f:</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;i:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;to&nbsp;trunc(p[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">])&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(abs(p[i,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">x)</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">wc)&nbsp;and&nbsp;(abs(p[i,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">y)</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">wc)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f:</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;f&nbsp;then<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp;p[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">p[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;p[trunc(p[</span><span style="COLOR: #000000">0</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">]:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">x;<br>&nbsp;&nbsp;&nbsp;&nbsp;p[trunc(p[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]),</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">y;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>end;<br>procedure&nbsp;work(i,j:integer);<br>var&nbsp;x,y:real;<br>begin<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(line[i,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">line[j,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">])</span><span style="COLOR: #000000">&lt;&gt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(line[j,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">line[i,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">])</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">(line[i,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">line[j,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">line[i,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">x</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">line[i,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;put(x,y);<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>end;<br>begin<br></span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;not&nbsp;eof&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readln(n);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</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;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;i:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;to&nbsp;n&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readln(line[i,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">],line[i,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;i:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;to&nbsp;n&nbsp;</span><span style="COLOR: #0000ff">do</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">&nbsp;j:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;to&nbsp;n&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;work(i,j);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">trunc(p[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;n</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;then&nbsp;writeln(n)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;writeln(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">No&nbsp;Fire&nbsp;Point.</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);<br>end;<br>end.</span></div>
</font></strong></span></span>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/78237.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-03-29 09:06 <a href="http://www.cppblog.com/xiongnanbin/articles/78237.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Valentine’s Present】 </title><link>http://www.cppblog.com/xiongnanbin/articles/78235.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Sun, 29 Mar 2009 01:03:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/78235.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/78235.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/78235.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/78235.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/78235.html</trackback:ping><description><![CDATA[<font size=3>今天是情人节，小杉已经想好了要给喜欢的人送一份特殊的情人节礼物。<br>礼物是n个颜色各异的箱子，每个箱子里装一个蛋糕，蛋糕是可以上色的。<br>一个可爱的上色方案应该满足如下条件：<br>1． 任意一个蛋糕上的颜色应与一个箱子相同（可以是装它的那个箱子的颜色）。<br>2． 任意开启一个箱子，按里面蛋糕的颜色打开对应的箱子，这两个箱子（也可以是同一个）里的蛋糕颜色相同。<br>小杉现在想知道总共有多少种可爱的上色方案</font>
<p><font size=3>input:<br>一行一个整数n(1&lt;=n&lt;=25) </font></p>
<p><font size=3>output:<br>仅有一行，一个整数，为上色方案数对19900801取模的结果</font></p>
<p><font size=3>input:<br>2</font></p>
<p><font size=3>output:<br>3</font></p>
<p><font size=3><font color=#ff0000><strong>分析(转dfs35123)：</strong></font><br><font face="Courier New" color=#ffcc00 size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一些箱子里的蛋糕和箱子的颜色是相同的。其他箱子里的蛋糕颜色必须和这些箱子中某一个箱子的的颜色相同。设有k个箱子里的蛋糕和箱子的颜色相同，则一共有C(n,k)种情况。其他箱子里的蛋糕的颜色选择，根据乘法原理有k^(n-k)种，乘起来就是C(n,k)*k^(n-k)</font> <br><br><strong><font color=#ff00ff>【参考程序】：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdlib.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;f[</span><span style="COLOR: #000000">26</span><span style="COLOR: #000000">],n;<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">n);<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(f,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(f));<br>&nbsp;&nbsp;&nbsp;&nbsp;f[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;f[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;j</span><span style="COLOR: #000000">&gt;=</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;f[j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(f[j]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">f[j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">])</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">19900801</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">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;t,i,j,ans</span><span style="COLOR: #000000">=</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">&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">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;t</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">f[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</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">n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">i;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;t</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(t</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">i)</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">19900801</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(ans</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">t)</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">19900801</span><span style="COLOR: #000000">;<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>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&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>}<br></span></div>
</font></strong></font>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/78235.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-03-29 09:03 <a href="http://www.cppblog.com/xiongnanbin/articles/78235.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>