﻿<?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++博客-Residence for sdfond-随笔分类-算法 - 几何</title><link>http://www.cppblog.com/sdfond/category/10014.html</link><description>世事洞明皆学问，人情练达即文章</description><language>zh-cn</language><lastBuildDate>Thu, 22 Apr 2010 07:35:00 GMT</lastBuildDate><pubDate>Thu, 22 Apr 2010 07:35:00 GMT</pubDate><ttl>60</ttl><item><title>UVa 11232</title><link>http://www.cppblog.com/sdfond/archive/2009/05/25/85715.html</link><dc:creator>sdfond</dc:creator><author>sdfond</author><pubDate>Mon, 25 May 2009 08:10:00 GMT</pubDate><guid>http://www.cppblog.com/sdfond/archive/2009/05/25/85715.html</guid><wfw:comment>http://www.cppblog.com/sdfond/comments/85715.html</wfw:comment><comments>http://www.cppblog.com/sdfond/archive/2009/05/25/85715.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sdfond/comments/commentRss/85715.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sdfond/services/trackbacks/85715.html</trackback:ping><description><![CDATA[　　题目不难，就是给定一个w * h的纸，中间切一刀，切出来的两个矩形，从一个中剪下一个圆做圆柱的底，然后让另一个弯起来套住底，做柱面，最后求能形成的最大体积。<br>　　练习的时候做了一下，总是WA。后来仔细想了一想，发现要讨论几种情况。首先要确保圆的直径要不大于w，之后因为弯曲矩形可以有两种方式，要分别讨论。一种是高为w，这样只需底面直径越大越好。一种是高不定，这时候需要列一个方程，求出极值点。可以证明极值就是极大值。但是要注意的是底面圆直径是有范围的，要注意极值点是否落在范围内。如果不在，由于极值点左侧单调递增，那么取直径为w就是这种情况的最优解。<br>　　这种题目比赛的时候很容易出错，需要静下心来仔细想好才行，这方面能力以后还要多多锻炼。<br>题目代码：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">iostream</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">cmath</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;std;<br></span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">double</span><span style="color: #000000;">&nbsp;pi&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;acos(</span><span style="color: #000000;">-</span><span style="color: #000000;">1.0</span><span style="color: #000000;">),&nbsp;eps&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;1e</span><span style="color: #000000;">-</span><span style="color: #000000;">6</span><span style="color: #000000;">;<br><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">double</span><span style="color: #000000;">&nbsp;w,&nbsp;h,&nbsp;s,&nbsp;d;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%lf&nbsp;%lf</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">w,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">h)&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(fabs(w)&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;eps&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;fabs(h)&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;eps)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(h&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;w)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap(w,&nbsp;h);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;h&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;(pi&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;min(d,&nbsp;w);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pi&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;d&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;d&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0.25</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;w;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2.0</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;h&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">3.0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(pi&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;d&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;w)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;min(d,&nbsp;w);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;max(s,&nbsp;pi&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;h&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;h&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;h&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">27.0</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;max(s,&nbsp;w&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;w&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;(pi&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;h&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;w)&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">4</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pi&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pi));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%.3lf\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;s);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><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/sdfond/aggbug/85715.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sdfond/" target="_blank">sdfond</a> 2009-05-25 16:10 <a href="http://www.cppblog.com/sdfond/archive/2009/05/25/85715.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PKU 1584</title><link>http://www.cppblog.com/sdfond/archive/2009/03/29/78248.html</link><dc:creator>sdfond</dc:creator><author>sdfond</author><pubDate>Sun, 29 Mar 2009 03:58:00 GMT</pubDate><guid>http://www.cppblog.com/sdfond/archive/2009/03/29/78248.html</guid><wfw:comment>http://www.cppblog.com/sdfond/comments/78248.html</wfw:comment><comments>http://www.cppblog.com/sdfond/archive/2009/03/29/78248.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sdfond/comments/commentRss/78248.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sdfond/services/trackbacks/78248.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一道思路很简单的计算几何题目，就是先判是不是&#8220;凸多边形&#8221;，然后计算点到直线的最短距离。但是我错了很多次。一个问题就是有可能peg不在多边形内，这要单独判断一下；还有一个问题找了很久才发现，原来题目中说满足条件的多边形不是纯粹的凸多边形，题目中的多边形是&#8220;任意内部两点连线不会和多边形的边相交&#8221;，这样如果多边形的多个顶点存在共线的情况，其实也是可以的，但...&nbsp;&nbsp;<a href='http://www.cppblog.com/sdfond/archive/2009/03/29/78248.html'>阅读全文</a><img src ="http://www.cppblog.com/sdfond/aggbug/78248.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sdfond/" target="_blank">sdfond</a> 2009-03-29 11:58 <a href="http://www.cppblog.com/sdfond/archive/2009/03/29/78248.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>