﻿<?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++博客-guodongshan</title><link>http://www.cppblog.com/guodongshan/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 23 Apr 2026 16:26:37 GMT</lastBuildDate><pubDate>Thu, 23 Apr 2026 16:26:37 GMT</pubDate><ttl>60</ttl><item><title>ACM算法</title><link>http://www.cppblog.com/guodongshan/archive/2010/10/13/129717.html</link><dc:creator>孟起</dc:creator><author>孟起</author><pubDate>Wed, 13 Oct 2010 01:46:00 GMT</pubDate><guid>http://www.cppblog.com/guodongshan/archive/2010/10/13/129717.html</guid><wfw:comment>http://www.cppblog.com/guodongshan/comments/129717.html</wfw:comment><comments>http://www.cppblog.com/guodongshan/archive/2010/10/13/129717.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guodongshan/comments/commentRss/129717.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guodongshan/services/trackbacks/129717.html</trackback:ping><description><![CDATA[<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">一、数论算法</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．求两数的最大公约数</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>2</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．求两数的最小公倍数</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>3</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．素数的求法</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>A.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">小范围内判断一个数是否为质数：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>B.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">判断</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>longint</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">范围内的数是否为素数（包含求</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>50000</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">以内的素数表）：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">二、图论算法</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．最小生成树</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>A.Prim</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">算法：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>B.Kruskal</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">算法：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>(</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">贪心</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>)<br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">按权值递增顺序删去图中的边，若不形成回路则将此边加入最小生成树。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>2.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">最短路径</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>A.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">标号法求解单源点最短路径：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>B.Floyed</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">算法求解所有顶点对之间的最短路径：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>C. Dijkstra </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">算法：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>3.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">计算图的传递闭包</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>4</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．无向图的连通分量</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>A.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">深度优先</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>B </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">宽度优先（种子染色法）</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>5</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．关键路径</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">几个定义：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333"> </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">顶点</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">为源点，</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>n</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">为汇点。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>a. </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">顶点事件最早发生时间</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>Ve[j], Ve [j] = max{ Ve [j] + w[I,j] },</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">其中</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>Ve (1) = 0;<br>b. </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">顶点事件最晚发生时间</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US> Vl[j], Vl [j] = min{ Vl[j] &#8211; w[I,j] },</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">其中</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US> Vl(n) = Ve(n);<br>c. </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">边活动最早开始时间</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US> Ee[I], </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">若边</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>I</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">由</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>&lt;j,k&gt;</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">表示，则</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>Ee[I] = Ve[j];<br>d. </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">边活动最晚开始时间</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US> El[I], </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">若边</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>I</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">由</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>&lt;j,k&gt;</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">表示，则</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>El[I] = Vl[k] &#8211; w[j,k];<br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">若</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US> Ee[j] = El[j] </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，则活动</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>j</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">为关键活动，由关键活动组成的路径为关键路径。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">求解方法：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>a. </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">从源点起</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>topsort,</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">判断是否有回路并计算</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>Ve;<br>b. </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">从汇点起</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>topsort,</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">求</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>Vl;<br>c. </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">算</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>Ee </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">和</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US> El;<br>6</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．拓扑排序</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">找入度为</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>0</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的点，删去与其相连的所有边，不断重复这一过程。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">例</span><span style="FONT-FAMILY: Verdana; COLOR: #333333"> </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">寻找一数列，其中任意连续</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>p</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">项之和为正，任意</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>q </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">项之和为负，若不存在则输出</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>NO.<br>7.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">回路问题</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>Euler</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">回路</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>(DFS)<br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">定义：经过图的每条边仅一次的回路。（充要条件：图连同且无奇点）</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>Hamilton</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">回路</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">定义：经过图的每个顶点仅一次的回路。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">一笔画</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">充要条件：图连通且奇点个数为</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>0</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">个或</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>2</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">个。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>9</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．判断图中是否有负权回路</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US> Bellman-ford </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">算法</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>x[I],y[I],t[I]</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">分别表示第</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>I</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">条边的起点，终点和权。共</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>n</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">个结点和</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>m</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">条边。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>10</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．第</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>n</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">最短路径问题</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>*</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">第二最短路径：每举最短路径上的每条边，每次删除一条，然后求新图的最短路径，取这些路径中最短的一条即为第二最短路径。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>*</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">同理，第</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>n</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">最短路径可在求解第</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>n-1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">最短路径的基础上求解。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">三、背包问题</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>*</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">部分背包问题可有贪心法求解：计算</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>Pi/Wi<br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">数据结构：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>w[i]:</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">第</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>i</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">个背包的重量；</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>p[i]:</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">第</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>i</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">个背包的价值；</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>0-1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">背包：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333"> </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">每个背包只能使用一次或有限次</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>(</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">可转化为一次</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>)</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>A.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">求最多可放入的重量。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>B.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">求可以放入的最大价值。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>F[I,j] </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">为容量为</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>I</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">时取前</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>j</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">个背包所能获得的最大价值。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>F [i,j] = max { f [ i &#8211; w [ j ], j-1] + p [ j ], f[ i,j-1] }<br>C.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">求恰好装满的情况数。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>2</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．可重复背包</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>A</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">求最多可放入的重量。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>F[I,j]</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">为前</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>i</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">个物品中选择若干个放入使其体积正好为</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>j</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的标志，为布尔型。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">状态转移方程为</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>f[I,j] = f [ I-1, j &#8211; w[I]*k ] (k=1.. j div w[I])<br>B.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">求可以放入的最大价值。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>f[i,j] = max { f [i- k*w[j], j-1] + k*p[j] } (0&lt;=k&lt;= i div w[j])<br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">其中</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>f[i,j]</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">表示容量为</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>i</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">时取前</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>j</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">种背包所能达到的最大值。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>C.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">求恰好装满的情况数。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>Ahoi2001 Problem2<br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">求自然数</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>n</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">本质不同的质数和的表达式的数目。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">思路一，生成每个质数的系数的排列，在一一测试，这是通法。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">思路二，递归搜索效率较高</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">思路三：可使用动态规划求解</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">四、排序算法</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>1.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">快速排序：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>B.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">插入排序：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">思路：当前</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>a[1]..a[i-1]</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">已排好序了，现要插入</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>a[i]</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">使</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>a[1]..a[i]</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">有序。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>C.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">选择排序：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>D. </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">冒泡排序</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>E.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">堆排序：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>F. </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">归并排序</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>G.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">基数排序</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">思想：对每个元素按从低位到高位对每一位进行一次排序</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">五、高精度计算</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">高精度数的定义：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．高精度加法</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>2</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．高精度减法</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>3</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．高精度乘以低精度</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>4</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．高精度乘以高精度</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>5</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．高精度除以低精度</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>6</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．高精度除以高精度</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">六、</span><span style="FONT-FAMILY: Verdana; COLOR: #333333"> </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">树的遍历</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．已知前序中序求后序</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>2</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．已知中序后序求前序</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>3</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．已知前序后序求中序的一种</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">七</span><span style="FONT-FAMILY: Verdana; COLOR: #333333"> </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">进制转换</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">任意正整数进制间的互化</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">除</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>n</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">取余</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>2</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">实数任意正整数进制间的互化</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">乘</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>n</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">取整</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>3</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">负数进制：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">设计一个程序，读入一个十进制数的基数和一个负进制数的基数，并将此十进制数转换为此负</span><span style="FONT-FAMILY: Verdana; COLOR: #333333"> </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">进制下的数：</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>-R</span><span style="FONT-FAMILY: 黑体; COLOR: #333333; mso-hansi-font-family: 黑体; mso-bidi-font-family: 黑体">&#8712;</span><span style="FONT-FAMILY: Verdana; COLOR: #333333; mso-bidi-font-family: Verdana" lang=EN-US>{-2</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>-3</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>-4,....-20} <br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">八</span><span style="FONT-FAMILY: Verdana; COLOR: #333333"> </span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">全排列与组合的生成</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">排列的生成：（</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>1..n</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">）</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>2</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">组合的生成</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>(1..n</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">中选取</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>k</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">个数的所有方案</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>)<o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">九</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>.</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">查找算法</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">折半查找</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>2</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">树形查找</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">二叉排序树：每个结点的值都大于其左子树任一结点的值而小于其右子树任一结点的值。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">查找</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">十、贪心</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>*</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">会议问题</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">（</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">）</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US> n</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">个活动每个活动有一个开始时间和一个结束时间，任一时刻仅一项活动进行，求满足活动数最多的情况。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">解：按每项活动的结束时间进行排序，排在前面的优先满足。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">（</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>2</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">）会议室空闲时间最少。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">（</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>3</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">）每个客户有一个愿付的租金，求最大利润。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">（</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>4</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">）共</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>R</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">间会议室，第</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>i</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">个客户需使用</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>i</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">间会议室，费用相同，求最大利润。</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br></span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">十一、回溯法框架</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>1. n</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">皇后问题</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>2.Hanoi Tower h(n)=2*h(n-1)+1 h(1)=1<o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">十二、</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>DFS</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">框架</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">十三、</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>BFS</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">框架</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">十五、数据结构相关算法</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>1</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．链表的定位函数</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>2</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．单链表的插入操作</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>3</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．单链表的删除操作</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>4</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．双链表的插入操作（插入新结点</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US>q</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">）</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><br>5</span><span style="FONT-FAMILY: 宋体; COLOR: #333333; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">．双链表的删除操作</span><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><br>原文链接：<a href="http://old.blog.edu.cn/user3/Hailer/archives/2006/1545396.shtml" target=_blank>http://old.blog.edu.cn/user3/Hailer/archives/2006/1545396.shtml</a><span style="FONT-FAMILY: Verdana; COLOR: #333333" lang=EN-US><o:p></o:p></span></p>
<img src ="http://www.cppblog.com/guodongshan/aggbug/129717.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guodongshan/" target="_blank">孟起</a> 2010-10-13 09:46 <a href="http://www.cppblog.com/guodongshan/archive/2010/10/13/129717.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>计算几何题目总结及分类</title><link>http://www.cppblog.com/guodongshan/archive/2010/10/12/129624.html</link><dc:creator>孟起</dc:creator><author>孟起</author><pubDate>Tue, 12 Oct 2010 09:36:00 GMT</pubDate><guid>http://www.cppblog.com/guodongshan/archive/2010/10/12/129624.html</guid><wfw:comment>http://www.cppblog.com/guodongshan/comments/129624.html</wfw:comment><comments>http://www.cppblog.com/guodongshan/archive/2010/10/12/129624.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guodongshan/comments/commentRss/129624.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guodongshan/services/trackbacks/129624.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: FOJHotter Colderhttp://acm.fzu.edu.cn/problem.php?pid=1014 求线段的中位线，线段相交求交点，求凸多边形的面积，无归之室http://acm.fzu.edu.cn/problem.php?pid=1016 本题精度要求非常高，用三角函数的话，很容易就wa..Reflectionshttp://acm.fzu.e...&nbsp;&nbsp;<a href='http://www.cppblog.com/guodongshan/archive/2010/10/12/129624.html'>阅读全文</a><img src ="http://www.cppblog.com/guodongshan/aggbug/129624.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guodongshan/" target="_blank">孟起</a> 2010-10-12 17:36 <a href="http://www.cppblog.com/guodongshan/archive/2010/10/12/129624.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>任意四面体体积公式 以及几点计算几何注意事项</title><link>http://www.cppblog.com/guodongshan/archive/2010/10/12/129595.html</link><dc:creator>孟起</dc:creator><author>孟起</author><pubDate>Tue, 12 Oct 2010 04:00:00 GMT</pubDate><guid>http://www.cppblog.com/guodongshan/archive/2010/10/12/129595.html</guid><wfw:comment>http://www.cppblog.com/guodongshan/comments/129595.html</wfw:comment><comments>http://www.cppblog.com/guodongshan/archive/2010/10/12/129595.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guodongshan/comments/commentRss/129595.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guodongshan/services/trackbacks/129595.html</trackback:ping><description><![CDATA[<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape style="Z-INDEX: 1; POSITION: absolute; TEXT-ALIGN: left; MARGIN-TOP: 25.55pt; WIDTH: 4in; HEIGHT: 119.95pt; MARGIN-LEFT: 174.6pt; LEFT: 0px" id=_x0000_s1026 type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.wmz"></v:imagedata></v:shape><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US>Euler</span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">的任意四面体体积公式（已知边长求体积）<br></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt"><img style="WIDTH: 193px; HEIGHT: 159px" border=0 src="http://www.cppblog.com/images/cppblog_com/guodongshan/image002.jpg" width=193 height=159><br><img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/guodongshan/image001.gif" width=384 height=160><br>已知<span lang=EN-US>4</span>点坐标求体积（</span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-bidi-font-size: 9.0pt">其中四个点的坐标分别为（<span lang=EN-US>x1,y1,z1</span>）<span lang=EN-US>,</span>（<span lang=EN-US>x2,y2,z2</span>）<span lang=EN-US>,</span>（<span lang=EN-US>x3,y3,z3</span>）<span lang=EN-US>,</span>（<span lang=EN-US>x4,y4,z4</span>）<br></span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt"><img border=0 src="http://www.cppblog.com/images/cppblog_com/guodongshan/image003.gif"><br><br><br></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; COLOR: red; FONT-SIZE: 12pt; mso-bidi-font-size: 16.0pt">注意事项：<br><span lang=EN-US><o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US>1. </span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">注意舍入方式<span lang=EN-US>(0.5</span>的舍入方向<span lang=EN-US>);</span>防止输出<span lang=EN-US>-0.<o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US>2. </span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">几何题注意多测试不对称数据<span lang=EN-US>.<o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US>3. </span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">整数几何注意<span lang=EN-US>xmult</span>和<span lang=EN-US>dmult</span>是否会出界<span lang=EN-US>;<o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp; </span></span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">符点几何注意<span lang=EN-US>eps</span>的使用<span lang=EN-US>.<o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US>4. </span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">避免使用斜率<span lang=EN-US>;</span>注意除数是否会为<span lang=EN-US>0.<o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US>5. </span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">公式一定要化简后再代入<span lang=EN-US>.<o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US>6. </span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">判断同一个<span lang=EN-US>2*PI</span>域内两角度差应该是<span lang=EN-US><o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp; </span></span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-ansi-language: PT-BR" lang=PT-BR>abs(a1-a2)&lt;beta||abs(a1-a2)&gt;pi+pi-beta;<o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-ansi-language: PT-BR" lang=PT-BR><span style="mso-spacerun: yes">&nbsp;&nbsp; </span></span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">相等应该是</span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-ansi-language: PT-BR" lang=PT-BR><o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-ansi-language: PT-BR" lang=PT-BR><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>abs(a1-a2)&lt;eps||abs(a1-a2)&gt;pi+pi-eps;<o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-ansi-language: PT-BR" lang=PT-BR>7. </span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">需要的话尽量使用</span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-ansi-language: PT-BR" lang=PT-BR>atan2,</span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">注意</span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-ansi-language: PT-BR" lang=PT-BR>:atan2(0,0)=0,<o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt; mso-ansi-language: PT-BR" lang=PT-BR><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>atan2(1,0)=pi/2,atan2(-1,0)=-pi/2,atan2(0,1)=0,atan2(0,-1)=pi.<o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US>8. cross product = |u|*|v|*sin(a)<o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>dot product = |u|*|v|*cos(a)<o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US>9. (P1-P0)x(P2-P0)</span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">结果的意义<span lang=EN-US>:<o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp; </span></span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">正<span lang=EN-US>: &lt;P0,P1&gt;</span>在<span lang=EN-US>&lt;P0,P2&gt;</span>顺时针<span lang=EN-US>(0,pi)</span>内<span lang=EN-US><o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp; </span></span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">负<span lang=EN-US>: &lt;P0,P1&gt;</span>在<span lang=EN-US>&lt;P0,P2&gt;</span>逆时针<span lang=EN-US>(0,pi)</span>内<span lang=EN-US><o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt" lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>0 : &lt;P0,P1&gt;,&lt;P0,P2&gt;</span><span style="FONT-FAMILY: 宋体; FONT-SIZE: 12pt">共线<span lang=EN-US>,</span>夹角为<span lang=EN-US>0</span>或<span lang=EN-US>pi<o:p></o:p></span></span></p>
<img src ="http://www.cppblog.com/guodongshan/aggbug/129595.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guodongshan/" target="_blank">孟起</a> 2010-10-12 12:00 <a href="http://www.cppblog.com/guodongshan/archive/2010/10/12/129595.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>读陈海峰的《计算几何算法概览》</title><link>http://www.cppblog.com/guodongshan/archive/2010/10/12/129568.html</link><dc:creator>孟起</dc:creator><author>孟起</author><pubDate>Tue, 12 Oct 2010 02:18:00 GMT</pubDate><guid>http://www.cppblog.com/guodongshan/archive/2010/10/12/129568.html</guid><wfw:comment>http://www.cppblog.com/guodongshan/comments/129568.html</wfw:comment><comments>http://www.cppblog.com/guodongshan/archive/2010/10/12/129568.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guodongshan/comments/commentRss/129568.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guodongshan/services/trackbacks/129568.html</trackback:ping><description><![CDATA[原文链接：<a href="http://cschf.spaces.live.com/blog/cns!E113B8D05D833E2B!140.entry" target=_blank>http://cschf.spaces.live.com/blog/cns!E113B8D05D833E2B!140.entry</a><br>写几点不熟悉的<br>12. 判断点是否在多边形中<br>13. 判断线段是否在多边形内<br>25. 计算线段或直线与线段的交点<br>27. 求线段或直线与圆的交点<br><br><a><strong>判断点是否在多边形中</strong></a><strong>：</strong>
<p style="FONT-SIZE: 12pt">判断点P是否在多边形中是计算几何中一个非常基本但是十分重要的算法。以点P为端点，向左方作射线L，由于多边形是有界的，所以射线L的左端一定在多边形外，考虑沿着L从无穷远处开始自左向右移动，遇到和多边形的第一个交点的时候，进入到了多边形的内部，遇到第二个交点的时候，离开了多边形，&#8230;&#8230;所以很容易看出当L和多边形的交点数目C是奇数的时候，P在多边形内，是偶数的话P在多边形外。</p>
<p>但是有些特殊情况要加以考虑。如图下图(a)(b)(c)(d)所示。在图(a)中，L和多边形的顶点相交，这时候交点只能计算一个；在图(b)中，L和多边形顶点的交点不应被计算；在图(c)和(d) 中，L和多边形的一条边重合，这条边应该被忽略不计。如果L和多边形的一条边重合，这条边应该被忽略不计。</p>
<p><img style="WIDTH: 300px; HEIGHT: 600px" src="http://i3.6.cn/cvbnm/f2/cc/f0/81fb54609cf280e08ad583de8a667e02.jpg" width=300 height=600> </p>
<p>为了统一起见，我们在计算射线L和多边形的交点的时候，1。对于多边形的水平边不作考虑；2。对于多边形的顶点和L相交的情况，如果该顶点是其所属的边上纵坐标较大的顶点，则计数，否则忽略；3。对于P在多边形边上的情形，直接可判断P属于多边行。由此得出算法的伪代码如下： <br>&nbsp;&nbsp;&nbsp; count &#8592; 0; <br>&nbsp;&nbsp;&nbsp; 以P为端点，作从右向左的射线L;&nbsp; <br>&nbsp;&nbsp;&nbsp; for 多边形的每条边s <br>&nbsp;&nbsp;&nbsp;&nbsp; do if P在边s上&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then return true; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if s不是水平的 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then if s的一个端点在L上 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if 该端点是s两端点中纵坐标较大的端点 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then count &#8592; count+1 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if s和L相交 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then count &#8592; count+1; <br>&nbsp;&nbsp;&nbsp; if count mod 2 = 1&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then return true; <br>&nbsp;&nbsp;&nbsp; else return false; <br>其中做射线L的方法是：设P'的纵坐标和P相同，横坐标为正无穷大（很大的一个正数），则P和P'就确定了射线L。 </p>
<p>判断点是否在多边形中的这个算法的时间复杂度为O(n)。</p>
<p>另外还有一种算法是用带符号的三角形面积之和与多边形面积进行比较，这种算法由于使用浮点数运算所以会带来一定误差，不推荐大家使用。 </p>
<p><a><br><strong>判断线段是否在多边形内</strong></a><strong>：</strong></p>
<p>线段在多边形内的一个必要条件是线段的两个端点都在多边形内，但由于多边形可能为凹，所以这不能成为判断的充分条件。如果线段和多边形的某条边内交（两线段内交是指两线段相交且交点不在两线段的端点），因为多边形的边的左右两侧分属多边形内外不同部分，所以线段一定会有一部分在多边形外(见图a)。于是我们得到线段在多边形内的第二个必要条件：线段和多边形的所有边都不内交。 </p>
<p>线段和多边形交于线段的两端点并不会影响线段是否在多边形内；但是如果多边形的某个顶点和线段相交，还必须判断两相邻交点之间的线段是否包含于多边形内部（反例见图b)。 </p>
<p>&nbsp;<img src="http://i3.6.cn/cvbnm/a4/50/b0/79afe28e6ea3a00c4678214bc2083c4b.jpg"> </p>
<p>因此我们可以先求出所有和线段相交的多边形的顶点，然后按照X-Y坐标排序(X坐标小的排在前面，对于X坐标相同的点，Y坐标小的排在前面，这种排序准则也是为了保证水平和垂直情况的判断正确)，这样相邻的两个点就是在线段上相邻的两交点，如果任意相邻两点的中点也在多边形内，则该线段一定在多边形内。 </p>
<p>证明如下：</p>
<p>命题1： <br>如果线段和多边形的两相邻交点P1 ，P2的中点P' 也在多边形内，则P1, P2之间的所有点都在多边形内。</p>
<p>证明： <br>假设P1,P2之间含有不在多边形内的点，不妨设该点为Q，在P1, P'之间，因为多边形是闭合曲线，所以其内外部之间有界，而P1属于多边行内部，Q属于多边性外部，P'属于多边性内部，P1-Q-P'完全连续，所以P1Q和QP'一定跨越多边形的边界，因此在P1,P'之间至少还有两个该线段和多边形的交点，这和P1P2是相邻两交点矛盾，故命题成立。证毕。 </p>
<p>由命题1直接可得出推论： <br>推论2： <br>设多边形和线段PQ的交点依次为P1,P2,&#8230;&#8230;Pn，其中Pi和Pi+1是相邻两交点，线段PQ在多边形内的充要条件是：P，Q在多边形内且对于i =1, 2,&#8230;&#8230;, n-1，Pi ,Pi+1的中点也在多边形内。 <br>在实际编程中，没有必要计算所有的交点，首先应判断线段和多边形的边是否内交，倘若线段和多边形的某条边内交则线段一定在多边形外；如果线段和多边形的每一条边都不内交，则线段和多边形的交点一定是线段的端点或者多边形的顶点，只要判断点是否在线段上就可以了。 <br>至此我们得出算法如下： <br>&nbsp;&nbsp;&nbsp; if 线端PQ的端点不都在多边形内&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then return false; <br>&nbsp;&nbsp;&nbsp; 点集pointSet初始化为空; <br>&nbsp;&nbsp;&nbsp; for 多边形的每条边s <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do if 线段的某个端点在s上 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then 将该端点加入pointSet; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if s的某个端点在线段PQ上 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then 将该端点加入pointSet; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if s和线段PQ相交 // 这时候已经可以肯定是内交了 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then return false; <br>&nbsp;&nbsp;&nbsp; 将pointSet中的点按照X-Y坐标排序; <br>&nbsp;&nbsp;&nbsp; for pointSet中每两个相邻点 pointSet[i] , pointSet[ i+1] <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do if pointSet[i] , pointSet[ i+1] 的中点不在多边形中 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then return false; <br>&nbsp;&nbsp;&nbsp; return true; <br>这个过程中的排序因为交点数目肯定远小于多边形的顶点数目n，所以最多是常数级的复杂度，几乎可以忽略不计。因此算法的时间复杂度也是O(n)。</p>
<br>
<p><strong><a><font style="COLOR: #000000" color=#0066a7>计算线段或直线与线段的交点</font></a>:</strong></p>
<p>设一条线段为L0 = P1P2，另一条线段或直线为L1 = Q1Q2 ，要计算的就是L0和L1的交点。 <br>1． 首先判断L0和L1是否相交（方法已在前文讨论过），如果不相交则没有交点，否则说明L0和L1一定有交点，下面就将L0和L1都看作直线来考虑。 </p>
<p>2． 如果P1和P2横坐标相同，即L0平行于Y轴 </p>
<p>a) 若L1也平行于Y轴， </p>
<p>i. 若P1的纵坐标和Q1的纵坐标相同，说明L0和L1共线，假如L1是直线的话他们有无穷的交点，假如L1是线段的话可用"计算两条共线线段的交点"的算法求他们的交点（该方法在前文已讨论过）； <br>ii. 否则说明L0和L1平行，他们没有交点； </p>
<p>b) 若L1不平行于Y轴，则交点横坐标为P1的横坐标，代入到L1的直线方程中可以计算出交点纵坐标； </p>
<p>3． 如果P1和P2横坐标不同，但是Q1和Q2横坐标相同，即L1平行于Y轴，则交点横坐标为Q1的横坐标，代入到L0的直线方程中可以计算出交点纵坐标； </p>
<p>4． 如果P1和P2纵坐标相同，即L0平行于X轴 </p>
<p>a) 若L1也平行于X轴， </p>
<p>i. 若P1的横坐标和Q1的横坐标相同，说明L0和L1共线，假如L1是直线的话他们有无穷的交点，假如L1是线段的话可用"计算两条共线线段的交点"的算法求他们的交点（该方法在前文已讨论过）； <br>ii. 否则说明L0和L1平行，他们没有交点； </p>
<p>b) 若L1不平行于X轴，则交点纵坐标为P1的纵坐标，代入到L1的直线方程中可以计算出交点横坐标； </p>
<p>5． 如果P1和P2纵坐标不同，但是Q1和Q2纵坐标相同，即L1平行于X轴，则交点纵坐标为Q1的纵坐标，代入到L0的直线方程中可以计算出交点横坐标； </p>
<p>6． 剩下的情况就是L1和L0的斜率均存在且不为0的情况 </p>
<p>a) 计算出L0的斜率K0，L1的斜率K1 ； </p>
<p>b) 如果K1 = K2&nbsp; </p>
<p>i. 如果Q1在L0上，则说明L0和L1共线，假如L1是直线的话有无穷交点，假如L1是线段的话可用"计算两条共线线段的交点"的算法求他们的交点（该方法在前文已讨论过）； <br>ii. 如果Q1不在L0上，则说明L0和L1平行，他们没有交点。 <br>c) 联立两直线的方程组可以解出交点来 <br>这个算法并不复杂，但是要分情况讨论清楚，尤其是当两条线段共线的情况需要单独考虑，所以在前文将求两条共线线段的算法单独写出来。另外，一开始就先利用矢量叉乘判断线段与线段（或直线）是否相交，如果结果是相交，那么在后面就可以将线段全部看作直线来考虑。需要注意的是，我们可以将直线或线段方程改写为ax+by+c=0的形式，这样一来上述过程的部分步骤可以合并，缩短了代码长度，但是由于先要求出参数，这种算法将花费更多的时间。 <br></p>
<p><strong><a><font style="COLOR: #000000" color=#0066a7>求线段或直线与圆的交点</font></a>:</strong></p>
<p>设圆心为O，圆半径为r，直线（或线段）L上的两点为P1,P2。 </p>
<p>1. 如果L是线段且P1，P2都包含在圆O内，则没有交点；否则进行下一步。 </p>
<p>2. 如果L平行于Y轴， </p>
<p>a) 计算圆心到L的距离dis； <br>b) 如果dis &gt; r 则L和圆没有交点； <br>c) 利用勾股定理，可以求出两交点坐标，但要注意考虑L和圆的相切情况。 <br>3. 如果L平行于X轴，做法与L平行于Y轴的情况类似； </p>
<p>4. 如果L既不平行X轴也不平行Y轴，可以求出L的斜率K，然后列出L的点斜式方程，和圆方程联立即可求解出L和圆的两个交点； </p>
<p>5. 如果L是线段，对于2，3，4中求出的交点还要分别判断是否属于该线段的范围内。</p>
<img src ="http://www.cppblog.com/guodongshan/aggbug/129568.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guodongshan/" target="_blank">孟起</a> 2010-10-12 10:18 <a href="http://www.cppblog.com/guodongshan/archive/2010/10/12/129568.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>二维下计算几何分类</title><link>http://www.cppblog.com/guodongshan/archive/2010/10/12/129563.html</link><dc:creator>孟起</dc:creator><author>孟起</author><pubDate>Tue, 12 Oct 2010 01:52:00 GMT</pubDate><guid>http://www.cppblog.com/guodongshan/archive/2010/10/12/129563.html</guid><wfw:comment>http://www.cppblog.com/guodongshan/comments/129563.html</wfw:comment><comments>http://www.cppblog.com/guodongshan/archive/2010/10/12/129563.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guodongshan/comments/commentRss/129563.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guodongshan/services/trackbacks/129563.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt">一、点的基本运算 <br>1. 平面上两点之间距离 1 <br>2. 判断两点是否重合 1 <br>3. 矢量叉乘 1 <br>4. 矢量点乘 2 <br>5. 判断点是否在线段上 2 <br>6. 求一点饶某点旋转后的坐标 2 <br>7. 求矢量夹角 2 <br></p>
<p style="FONT-SIZE: 12pt">二、&nbsp;线段及直线的基本运算 <br>1. 点与线段的关系 3 <br>2. 求点到线段所在直线垂线的垂足 4 <br>3. 点到线段的最近点 4 <br>4. 点到线段所在直线的距离 4 <br>5. 点到折线集的最近距离 4 <br>6. 判断圆是否在多边形内 5 <br>7. 求矢量夹角余弦 5 <br>8. 求线段之间的夹角 5 <br>9. 判断线段是否相交 6 <br>10.判断线段是否相交但不交在端点处（内交） 6 <br>11.求线段所在直线的方程 6 <br>12.求直线的斜率 7 <br>13.求直线的倾斜角 7 <br>14.求点关于某直线的对称点 7 <br>15.判断两条直线是否相交及求直线交点 7 <br>16.判断线段是否相交，如果相交返回交点 7 <br><br><span style="FONT-SIZE: 12pt">三、多边形常用算法模块 <br>1. 判断多边形是否简单多边形 8 <br>2. 检查多边形顶点的凸凹性 9 <br>3. 判断多边形是否凸多边形 9 <br>4. 求多边形面积 9 <br>5. 判断多边形顶点的排列方向，方法一 10 <br>6. 判断多边形顶点的排列方向，方法二 10 <br>7. 射线法判断点是否在多边形内 10 <br>8. 判断点是否在凸多边形内 11 <br>9. 寻找点集的graham算法 12 <br>10.寻找点集凸包的卷包裹法 13 <br>11.判断线段是否在多边形内 14 <br>12.求简单多边形的重心 （HDU1115）15 <br>13.求凸多边形的重心 17 <br>14.求肯定在给定多边形内的一个点 17 <br>15.求从多边形外一点出发到该多边形的切线 18 <br>16.判断多边形的核是否存在 19&nbsp;<br><br>四、 圆的基本运算 <br>1 .点是否在圆内 20 <br>2 .求不共线的三点所确定的圆 21 <br><br>五、矩形的基本运算 <br>1.已知矩形三点坐标，求第4点坐标 22 <br><br>六、常用算法的描述 22 <br><br>七、补充 <br>1．两圆关系： 24 <br>2．判断圆是否在矩形内： 24 <br>3．点到平面的距离： 25 <br>4．点是否在直线同侧： 25 <br>5．镜面反射线： 25 <br>6．矩形包含： 26 <br>7．两圆交点： 27 <br>8．两圆公共面积： 28 <br>9. 圆和直线关系： 29 <br>10. 内切圆： 30 <br>11. 求切点： 31 <br>12. 线段的左右旋： 31 <br>13．公式： 32 <br><br>附上一篇博客：</span><a href="http://cschf.spaces.live.com/blog/cns!E113B8D05D833E2B!140.entry" target=_blank><span style="FONT-SIZE: 12pt">计算几何算法概览</span></a><span style="FONT-SIZE: 12pt">&nbsp;<br><br>&nbsp; </p>
<p align=left><a href="http://www.oibh.org/bbs/misc.php?action=viewratings&amp;tid=2958&amp;pid=32884"></a><span>zoj</span><span>上的计算几何题</span><span><br>Vol I <br>1010 by pandahyx <br>1032 by javaman <br>1037 by Vegetable Bird <br>1041 by javaman <br>1081 by Vegetable Bird <br>1090 by Vegetable Bird <br><br>Vol II <br>1104 by javaman <br>1123 by javaman <br>1139 by Vegetable Bird <br>1165 by javaman <br>1199 by Vegetable Bird <br><br>Vol V <br>1426 by Vegetable Bird <br>1439 by Vegetable Bird <br>1460 by Vegetable Bird <br>1472 by Vegetable Bird <br><br>Vol VI <br>1597 by Vegetable Bird <br><br>Vol VII <br>1608 by Vegetable Bird <br>1648 by Vegetable Bird <br><br>Vol XII <br>2102 by pandahyx <br>2107 by pandahyx <br>2157 by pandahyx <br><br>Vol XIII <br>2234 by pandahyx <br><br>Vol XIV <br>2318 by ahyangyi <br>2394 by qherlyt <br><br>Vol XV <br>2403 by Vegetable Bird </span></span></p>
<img src ="http://www.cppblog.com/guodongshan/aggbug/129563.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guodongshan/" target="_blank">孟起</a> 2010-10-12 09:52 <a href="http://www.cppblog.com/guodongshan/archive/2010/10/12/129563.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>判断点是否在三角形内</title><link>http://www.cppblog.com/guodongshan/archive/2010/10/12/129558.html</link><dc:creator>孟起</dc:creator><author>孟起</author><pubDate>Tue, 12 Oct 2010 01:40:00 GMT</pubDate><guid>http://www.cppblog.com/guodongshan/archive/2010/10/12/129558.html</guid><wfw:comment>http://www.cppblog.com/guodongshan/comments/129558.html</wfw:comment><comments>http://www.cppblog.com/guodongshan/archive/2010/10/12/129558.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guodongshan/comments/commentRss/129558.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guodongshan/services/trackbacks/129558.html</trackback:ping><description><![CDATA[&nbsp;1.&nbsp; 一种是用矢量叉乘法：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由三个顶点向所求的点引出矢量（注意方向），然后任意用其中两个矢量形成平面，再用这个平面和剩下的矢量叉乘，得出一个新矢量，方向向里，则在三角形外，反之在里面。 <br>2.用面积方法<br><br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#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><img id=Codehighlighter1_49_77_Open_Image onclick="this.style.display='none'; Codehighlighter1_49_77_Open_Text.style.display='none'; Codehighlighter1_49_77_Closed_Image.style.display='inline'; Codehighlighter1_49_77_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_49_77_Closed_Image onclick="this.style.display='none'; Codehighlighter1_49_77_Closed_Text.style.display='none'; Codehighlighter1_49_77_Open_Image.style.display='inline'; Codehighlighter1_49_77_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;TPoint&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_49_77_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_49_77_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;x;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;y;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">求叉积</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_151_223_Open_Image onclick="this.style.display='none'; Codehighlighter1_151_223_Open_Text.style.display='none'; Codehighlighter1_151_223_Closed_Image.style.display='inline'; Codehighlighter1_151_223_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_151_223_Closed_Image onclick="this.style.display='none'; Codehighlighter1_151_223_Closed_Text.style.display='none'; Codehighlighter1_151_223_Open_Image.style.display='inline'; Codehighlighter1_151_223_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;mul(</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;TPoint&nbsp;p1,&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;TPoint&nbsp;p2,&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;TPoint&nbsp;p0)&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_151_223_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_151_223_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;((p1.x&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;p0.x)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(p2.y&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;p0.y)</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">(p2.x&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;p0.x)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(p1.y&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;p0.y));<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_225_312_Open_Image onclick="this.style.display='none'; Codehighlighter1_225_312_Open_Text.style.display='none'; Codehighlighter1_225_312_Closed_Image.style.display='inline'; Codehighlighter1_225_312_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_225_312_Closed_Image onclick="this.style.display='none'; Codehighlighter1_225_312_Closed_Text.style.display='none'; Codehighlighter1_225_312_Open_Image.style.display='inline'; Codehighlighter1_225_312_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_225_312_Closed_Text>/**/</span><span id=Codehighlighter1_225_312_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">由三个顶点向所求的点引出矢量（注意方向），然后任意用其中两个矢量形成平面，<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;*&nbsp;再用这个平面和剩下的矢量叉乘，得出一个新矢量，方向向里，则在三角形外，反之在里面。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_362_530_Open_Image onclick="this.style.display='none'; Codehighlighter1_362_530_Open_Text.style.display='none'; Codehighlighter1_362_530_Closed_Image.style.display='inline'; Codehighlighter1_362_530_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_362_530_Closed_Image onclick="this.style.display='none'; Codehighlighter1_362_530_Closed_Text.style.display='none'; Codehighlighter1_362_530_Open_Image.style.display='inline'; Codehighlighter1_362_530_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;inside(</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;TPoint&nbsp;tr[],&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;TPoint&nbsp;p)&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_362_530_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_362_530_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(mul(p,&nbsp;tr[i],&nbsp;tr[(i&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">])&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;mul(p,&nbsp;tr[(i&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">],&nbsp;tr[(i&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">])&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img id=Codehighlighter1_598_674_Open_Image onclick="this.style.display='none'; Codehighlighter1_598_674_Open_Text.style.display='none'; Codehighlighter1_598_674_Closed_Image.style.display='inline'; Codehighlighter1_598_674_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_598_674_Closed_Image onclick="this.style.display='none'; Codehighlighter1_598_674_Closed_Text.style.display='none'; Codehighlighter1_598_674_Open_Image.style.display='inline'; Codehighlighter1_598_674_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;area(</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;TPoint&nbsp;p1,&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;TPoint&nbsp;p2,&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;TPoint&nbsp;p3)&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_598_674_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_598_674_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;fabs((p1.x&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;p3.x)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(p2.y&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;p3.y)</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">(p2.x&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;p3.x)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(p1.y&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;p3.y));<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">用面积判断p是否在三角形内</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_741_947_Open_Image onclick="this.style.display='none'; Codehighlighter1_741_947_Open_Text.style.display='none'; Codehighlighter1_741_947_Closed_Image.style.display='inline'; Codehighlighter1_741_947_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_741_947_Closed_Image onclick="this.style.display='none'; Codehighlighter1_741_947_Closed_Text.style.display='none'; Codehighlighter1_741_947_Open_Image.style.display='inline'; Codehighlighter1_741_947_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;inside2(</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;TPoint&nbsp;tr[],&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;TPoint&nbsp;p)&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_741_947_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_741_947_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(fabs(area(tr[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">],&nbsp;tr[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">],&nbsp;tr[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">])&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;area(p,&nbsp;tr[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">],&nbsp;tr[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">])&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;area(tr[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">],&nbsp;p,&nbsp;tr[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">])&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;area(tr[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">],&nbsp;tr[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">],&nbsp;p))&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1.0e-20</span><span style="COLOR: #000000">)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img id=Codehighlighter1_961_1276_Open_Image onclick="this.style.display='none'; Codehighlighter1_961_1276_Open_Text.style.display='none'; Codehighlighter1_961_1276_Closed_Image.style.display='inline'; Codehighlighter1_961_1276_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_961_1276_Closed_Image onclick="this.style.display='none'; Codehighlighter1_961_1276_Closed_Text.style.display='none'; Codehighlighter1_961_1276_Open_Image.style.display='inline'; Codehighlighter1_961_1276_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_961_1276_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_961_1276_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_989_1011_Open_Image onclick="this.style.display='none'; Codehighlighter1_989_1011_Open_Text.style.display='none'; Codehighlighter1_989_1011_Closed_Image.style.display='inline'; Codehighlighter1_989_1011_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_989_1011_Closed_Image onclick="this.style.display='none'; Codehighlighter1_989_1011_Closed_Text.style.display='none'; Codehighlighter1_989_1011_Open_Image.style.display='inline'; Codehighlighter1_989_1011_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;TPoint&nbsp;tr[</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_989_1011_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_989_1011_Open_Text><span style="COLOR: #000000">{</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_990_996_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_990_996_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">,</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_998_1003_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_998_1003_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">,</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_1005_1010_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1005_1010_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">,&nbsp;&nbsp;p&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_1019_1024_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1019_1024_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">方法一</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">algorithm&nbsp;&nbsp;&nbsp;1:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(inside(tr,&nbsp;p))<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">In\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Out\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">方法一</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">algorithm&nbsp;&nbsp;&nbsp;2:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(inside2(tr,&nbsp;p))<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">In\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Out\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<img src ="http://www.cppblog.com/guodongshan/aggbug/129558.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guodongshan/" target="_blank">孟起</a> 2010-10-12 09:40 <a href="http://www.cppblog.com/guodongshan/archive/2010/10/12/129558.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HDU1292 "下沙野骆驼"ACM夏令营 递推</title><link>http://www.cppblog.com/guodongshan/archive/2010/10/11/129497.html</link><dc:creator>孟起</dc:creator><author>孟起</author><pubDate>Mon, 11 Oct 2010 12:03:00 GMT</pubDate><guid>http://www.cppblog.com/guodongshan/archive/2010/10/11/129497.html</guid><wfw:comment>http://www.cppblog.com/guodongshan/comments/129497.html</wfw:comment><comments>http://www.cppblog.com/guodongshan/archive/2010/10/11/129497.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guodongshan/comments/commentRss/129497.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guodongshan/services/trackbacks/129497.html</trackback:ping><description><![CDATA[题目：一共来了n(0&lt;n&lt;25)个同学，按照组队规则（自由组队，每队人数不限），一共会有多少种不同的组队方案呢？<br>递推式是：a[i][j]=a[i-1][j-1]+a[i-1][j]*j;
<p _extended="true">而且。a[i][0]应该是为0，不为1的。</p>
<p _extended="true">此外还得注溢出。要用__int64类型。<br><a href="http://acm.hdu.edu.cn/showproblem.php?pid=1292" target=_blank>http://acm.hdu.edu.cn/showproblem.php?pid=1292</a><br></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><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></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;t,&nbsp;n,&nbsp;i,&nbsp;j;<br>&nbsp;&nbsp;&nbsp;&nbsp;__int64&nbsp;a[</span><span style="COLOR: #000000">26</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">26</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;a[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;a[</span><span style="COLOR: #000000">1</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;</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&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">25</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[i][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[i][i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;j&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;i;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[i][j]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;a[i&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][j&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;a[i&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][j]&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;j;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<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">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">t);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(t</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&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">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">n);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__int64&nbsp;sum&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;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;a[n][i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%I64d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;sum);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<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/guodongshan/aggbug/129497.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guodongshan/" target="_blank">孟起</a> 2010-10-11 20:03 <a href="http://www.cppblog.com/guodongshan/archive/2010/10/11/129497.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>上海交大ACM队长建议--谈谈ACM比赛中的代码能力 </title><link>http://www.cppblog.com/guodongshan/archive/2010/10/11/129461.html</link><dc:creator>孟起</dc:creator><author>孟起</author><pubDate>Mon, 11 Oct 2010 09:37:00 GMT</pubDate><guid>http://www.cppblog.com/guodongshan/archive/2010/10/11/129461.html</guid><wfw:comment>http://www.cppblog.com/guodongshan/comments/129461.html</wfw:comment><comments>http://www.cppblog.com/guodongshan/archive/2010/10/11/129461.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guodongshan/comments/commentRss/129461.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guodongshan/services/trackbacks/129461.html</trackback:ping><description><![CDATA[在ICPC比赛中，个人能力方面，如果粗略地分的话，大致可以分为算法能力、代码能力和查错能力。那些大学才开始参加比赛的选手，写代码的基本功一般会比较扎实，主要瓶颈应该是算法能力。而对于OI转ICPC的选手来说，代码能力往往是最大的缺陷。随着OI转ICPC的选手逐渐增多，代码能力的问题愈发暴露了出来。 <br><br>一、如何定义代码能力 <br><br>Comars曾经给代码能力作过一个比较准确的定义。2004年暑假时，Comars曾经说过：他认为150行以内的题目，他的1Y率非常高，并且保持稳定；而当代码长度超过150行以后，1Y率就开始急速下降了。如果我们画出一条1Y率的曲线的话，150行就是一个转折点。我们不妨认为，150行就是Comars当时的代码能力。一年以后，经过努力，Comars把代码能力提高到了250行。不过，这已经是后话了。 <br><br>二、如何提高代码能力 <br><br>我一直觉得写程序和写文章是一个对很好的类比。 <br><br>写文章需要先从宏观入手，构思文章的结构。写程序同样需要。一个好的结构，就是一个好的开始。一个好的开始，是成功的一半。 <br>一篇好的文章需要各种句式和词藻的合理组合。体现到写程序上来，就是一些单句以及三五行的小结构的熟练使用。这些都是需要平时总结和积累的。 <br><br>但凡文章写得好的人，一定看过很多别人写的文章。同样的道理，多看别人的程序，用心地去看，也可以提高自己的代码能力。 <br>我鼓励队员去看别人写的程序，特别是像Comars这样的选手写的程序。从优秀的程序中，我们可以体会别人良好的程序结构，同时也可以学到很多写程序的技巧――三五行的小技巧。在和Comars做队友的两年时间里，我通过看Comars的程序，学会了很多小技巧。逐渐地，我觉得我写的某些程序已经和Comars有点相像了。 <br>那么，如果身边没有Comars这样优秀的选手可以借鉴，该怎么办呢？其实没关系。任何一个程序都是可以看的。一个程序，就算写得再差，总还会有一两个闪光点，要想办法把它们找出来。另外，程序里写得不好的地方，也要一一找出来。 <br>读程序，从某种角度来看，就像读史。好的历史是用来借鉴的；不好的历史则应该引以为戒。读程序也是一样，择其善者而从之，其不善者而改之。 <br><br>三、谨慎地对待STL和SCL <br><br>STL - Standard Template Library。在ICPC的选手中，STL是相当受欢迎的。的确，如果STL用得好，程序可以精简很多。既提高了编程的速度，也提高了编程的准确性。 <br>SCL - Standard Code Library，就是标准程序库。对很多选手来说，SCL可是命根子啊 <br><br>我觉得STL和SCL都不是坏东西，但是需要谨慎地使用。 <br><br>我向来不主张队员一进队就开始用STL（虽然这种现象普遍存在 ）。我认为，STL的作用是锦上添花，而不是雪中送炭。比方说，一个heap写得很熟练的队员，我觉得他可以偷偷懒，用一下STL。但是，那些不太会写heap的队员，就不应该用STL里的heap。因为，他们真正应该做的是掌握写heap的能力――这才是最本质的代码能力。 <br>学会用STL是件很爽的事情。但是须知有所得必有所失。如果过早地接触STL，会让你失去很多锻炼代码能力的机会。 <br><br>至于SCL，我的主张是尽量不用。 <br>不可否认，队里确实有一些人SCL用得很好。但是，我至今仍然没有见过一个SCL用得很好，同时有拥有很强的代码能力的人。同样是有所得必有所失，你平时习惯了去抄程序，必然少了很多自己构思程序的机会，从而影响代码能力的提高。 <br>当然，我也不是完全反对去使用SCL，偶尔用一下也是可以的，例如在比赛中。但是，需要注意的是，一定要用自己整理的SCL。我见过有人拿着一本别人整理的SCL，虽然内容很齐整，但是我没见他用对过。因为这本SCL不是他整理的，他自己都不知道每个程序在使用的时候应该注意些什么，于是一用就错。<br><br><br>
<h3 class=first><font style="COLOR: #ff0000" color=#0000ff>算法名言(含义深刻啊)</font></h3>
<div class=content>1.算法的灵魂――数据结构+算法=程序 <br><br>2.剪枝是搜索的关键。 <br><br>3.可贪则贪。 <br><br>4.枚举是最容易实现的，但也是最慢的。 <br><br>5.难题往往需要另辟蹊径。 <br><br>6.算法并不是孤立的，而是可以结合在一起的。 <br><br>7.不做烂题水平也会下降，但不想难题永远不会提高。</div>
<img src ="http://www.cppblog.com/guodongshan/aggbug/129461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guodongshan/" target="_blank">孟起</a> 2010-10-11 17:37 <a href="http://www.cppblog.com/guodongshan/archive/2010/10/11/129461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>直线分空间问题</title><link>http://www.cppblog.com/guodongshan/archive/2010/10/11/129414.html</link><dc:creator>孟起</dc:creator><author>孟起</author><pubDate>Mon, 11 Oct 2010 02:45:00 GMT</pubDate><guid>http://www.cppblog.com/guodongshan/archive/2010/10/11/129414.html</guid><wfw:comment>http://www.cppblog.com/guodongshan/comments/129414.html</wfw:comment><comments>http://www.cppblog.com/guodongshan/archive/2010/10/11/129414.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guodongshan/comments/commentRss/129414.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guodongshan/services/trackbacks/129414.html</trackback:ping><description><![CDATA[<span>问题是这样的：问用<span>n</span>条直线最多能将平面分成多少个区域？<span>&nbsp;<br></span>这也是一个很简单的递归问题：<span> L[n] = L[n-1] + n; &nbsp;&nbsp;&nbsp;(L[0] = 1)<br>&nbsp;&nbsp;&nbsp;&nbsp;</span>通项公式如下：<span>L[n] = n * (n + 1) / 2 + 1 &nbsp;&nbsp;&nbsp;&nbsp;( n&gt;= 0 )<br><br></span></span>
<p align=left><span>如果不用直线的话，用一个一般的折线，那么<span>n</span>个这样的折线最多可以拆分平面<span>: <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D[n] = L[2*n] - 2 * n;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D[n] = 2 * n ^ 2 - n + 1;<br></span></span></p>
<span><br>如果用<span>"Z"</span>字型的线，<span>n</span>个折线最可拆分平面：<span><br><a href="" target=_blank href_cetemp><a href="http://www.cppblog.com/guodongshan/admin/href_cetemp=" target=_blank href_cetemp ?><a href="http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=652" target=_blank>http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=652</a></a><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Z[n] = Z[n-1] + 9*n - 8; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Z[n] = (9*n^2 - 7*n + 2) / 2; <br>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #008080">1</span>&nbsp;<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></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br></span><span style="COLOR: #008080">3</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">4</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n;<br></span><span style="COLOR: #008080">5</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">n)</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">EOF){<br></span><span style="COLOR: #008080">6</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,(</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">n</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">2</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">7</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">8</span>&nbsp;<span style="COLOR: #000000">&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><span style="COLOR: #008080">9</span>&nbsp;<span style="COLOR: #000000">}</span></div>
</span></span>
<img src ="http://www.cppblog.com/guodongshan/aggbug/129414.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guodongshan/" target="_blank">孟起</a> 2010-10-11 10:45 <a href="http://www.cppblog.com/guodongshan/archive/2010/10/11/129414.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HDU2510 符号三角形</title><link>http://www.cppblog.com/guodongshan/archive/2010/10/11/129404.html</link><dc:creator>孟起</dc:creator><author>孟起</author><pubDate>Mon, 11 Oct 2010 01:13:00 GMT</pubDate><guid>http://www.cppblog.com/guodongshan/archive/2010/10/11/129404.html</guid><wfw:comment>http://www.cppblog.com/guodongshan/comments/129404.html</wfw:comment><comments>http://www.cppblog.com/guodongshan/archive/2010/10/11/129404.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guodongshan/comments/commentRss/129404.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guodongshan/services/trackbacks/129404.html</trackback:ping><description><![CDATA[<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每个符号三角形都是由它的第一行&#8220;</span><span>+,-</span><span>&#8221;号分布决定的，据此可演算出所有分布的三角形，对其进行统计即可。</span>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同时将一个</span><span>n</span><span>行三角形</span><span>T</span><span>的</span><span>+</span><span>，</span><span>-</span><span>号个数分别记为</span><span>pos_num(n),neg_num(n)</span><span>，其第一行中的</span><span>+</span><span>，</span><span>-</span><span>号个数记为</span><span>x(n),y(n)</span><span>，则可得到下式：</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pos_num(n)=x(n)+pos_num(n-1)</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; neg_num(n)=y(n)+neg_num(n-1)</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由此，我们可以从</span><span>n=1</span><span>开始，利用前面</span><span>n=k-1</span><span>的结果，迭代求出</span><span>n=k</span><span>的分布情形，然后对</span><span>n=k</span><span>的所有分布统计。<br></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">vector</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cmath</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></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><img id=Codehighlighter1_86_159_Open_Image onclick="this.style.display='none'; Codehighlighter1_86_159_Open_Text.style.display='none'; Codehighlighter1_86_159_Closed_Image.style.display='inline'; Codehighlighter1_86_159_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_86_159_Closed_Image onclick="this.style.display='none'; Codehighlighter1_86_159_Closed_Text.style.display='none'; Codehighlighter1_86_159_Open_Image.style.display='inline'; Codehighlighter1_86_159_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;record</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_86_159_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_86_159_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;pos,neg;<br><img id=Codehighlighter1_128_157_Open_Image onclick="this.style.display='none'; Codehighlighter1_128_157_Open_Text.style.display='none'; Codehighlighter1_128_157_Closed_Image.style.display='inline'; Codehighlighter1_128_157_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_128_157_Closed_Image onclick="this.style.display='none'; Codehighlighter1_128_157_Closed_Text.style.display='none'; Codehighlighter1_128_157_Open_Image.style.display='inline'; Codehighlighter1_128_157_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;record(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b)</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_128_157_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_128_157_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a;&nbsp;&nbsp;neg</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_173_1996_Open_Image onclick="this.style.display='none'; Codehighlighter1_173_1996_Open_Text.style.display='none'; Codehighlighter1_173_1996_Closed_Image.style.display='inline'; Codehighlighter1_173_1996_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_173_1996_Closed_Image onclick="this.style.display='none'; Codehighlighter1_173_1996_Closed_Text.style.display='none'; Codehighlighter1_173_1996_Open_Image.style.display='inline'; Codehighlighter1_173_1996_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_173_1996_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_173_1996_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n,i,j,k,sum;vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">record</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;v;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;m</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;m</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">24</span><span style="COLOR: #000000">;m</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_244_1980_Open_Image onclick="this.style.display='none'; Codehighlighter1_244_1980_Open_Text.style.display='none'; Codehighlighter1_244_1980_Closed_Image.style.display='inline'; Codehighlighter1_244_1980_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_244_1980_Closed_Image onclick="this.style.display='none'; Codehighlighter1_244_1980_Closed_Text.style.display='none'; Codehighlighter1_244_1980_Open_Image.style.display='inline'; Codehighlighter1_244_1980_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_244_1980_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_244_1980_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">m;<br><img id=Codehighlighter1_285_350_Open_Image onclick="this.style.display='none'; Codehighlighter1_285_350_Open_Text.style.display='none'; Codehighlighter1_285_350_Closed_Image.style.display='inline'; Codehighlighter1_285_350_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_285_350_Closed_Image onclick="this.style.display='none'; Codehighlighter1_285_350_Closed_Text.style.display='none'; Codehighlighter1_285_350_Open_Image.style.display='inline'; Codehighlighter1_285_350_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">((n</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(n</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">4</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_285_350_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_285_350_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">continue</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">record</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;v;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;record&nbsp;r1(</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: #008000">//</span><span style="COLOR: #008000">n=1的情况</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.push_back(r1);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;record&nbsp;r2(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.push_back(r2);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">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">)</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">计算到n的所有情况</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_529_1545_Open_Image onclick="this.style.display='none'; Codehighlighter1_529_1545_Open_Text.style.display='none'; Codehighlighter1_529_1545_Closed_Image.style.display='inline'; Codehighlighter1_529_1545_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_529_1545_Closed_Image onclick="this.style.display='none'; Codehighlighter1_529_1545_Closed_Text.style.display='none'; Codehighlighter1_529_1545_Open_Image.style.display='inline'; Codehighlighter1_529_1545_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_529_1545_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_529_1545_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;trip</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">[i];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;sum_i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)pow(</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">,i</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">sum_i;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">第j种分布</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_661_1522_Open_Image onclick="this.style.display='none'; Codehighlighter1_661_1522_Open_Text.style.display='none'; Codehighlighter1_661_1522_Closed_Image.style.display='inline'; Codehighlighter1_661_1522_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_661_1522_Closed_Image onclick="this.style.display='none'; Codehighlighter1_661_1522_Closed_Text.style.display='none'; Codehighlighter1_661_1522_Open_Image.style.display='inline'; Codehighlighter1_661_1522_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_661_1522_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_661_1522_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;temp1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">j,&nbsp;temp2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;&nbsp;y</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">记录+，-的个数</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(temp1)<br><img id=Codehighlighter1_788_1036_Open_Image onclick="this.style.display='none'; Codehighlighter1_788_1036_Open_Text.style.display='none'; Codehighlighter1_788_1036_Closed_Image.style.display='inline'; Codehighlighter1_788_1036_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_788_1036_Closed_Image onclick="this.style.display='none'; Codehighlighter1_788_1036_Closed_Text.style.display='none'; Codehighlighter1_788_1036_Open_Image.style.display='inline'; Codehighlighter1_788_1036_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_788_1036_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_788_1036_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_824_892_Open_Image onclick="this.style.display='none'; Codehighlighter1_824_892_Open_Text.style.display='none'; Codehighlighter1_824_892_Closed_Image.style.display='inline'; Codehighlighter1_824_892_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_824_892_Closed_Image onclick="this.style.display='none'; Codehighlighter1_824_892_Closed_Text.style.display='none'; Codehighlighter1_824_892_Open_Image.style.display='inline'; Codehighlighter1_824_892_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(temp1</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_824_892_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_824_892_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trip[</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">temp2]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;y</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_919_988_Open_Image onclick="this.style.display='none'; Codehighlighter1_919_988_Open_Text.style.display='none'; Codehighlighter1_919_988_Closed_Image.style.display='inline'; Codehighlighter1_919_988_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_919_988_Closed_Image onclick="this.style.display='none'; Codehighlighter1_919_988_Closed_Text.style.display='none'; Codehighlighter1_919_988_Open_Image.style.display='inline'; Codehighlighter1_919_988_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_919_988_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_919_988_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trip[</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">temp2]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;&nbsp;x</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp1</span><span style="COLOR: #000000">/=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;k</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">temp2;k</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">,&nbsp;&nbsp;trip[k]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;idx</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;k</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;k</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_1190_1327_Open_Image onclick="this.style.display='none'; Codehighlighter1_1190_1327_Open_Text.style.display='none'; Codehighlighter1_1190_1327_Closed_Image.style.display='inline'; Codehighlighter1_1190_1327_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_1190_1327_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1190_1327_Closed_Text.style.display='none'; Codehighlighter1_1190_1327_Open_Image.style.display='inline'; Codehighlighter1_1190_1327_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_1190_1327_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1190_1327_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(trip[k]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">trip[k</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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;idx</span><span style="COLOR: #000000">*=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;idx</span><span style="COLOR: #000000">*=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,idx</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">v[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">((</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)pow(</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">,i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">)</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">idx].pos;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">v[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">((</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)pow(</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">,i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">)</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">idx].neg;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;record&nbsp;r(x,y);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.push_back(r);&nbsp;&nbsp;&nbsp;&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_1555_1739_Open_Image onclick="this.style.display='none'; Codehighlighter1_1555_1739_Open_Text.style.display='none'; Codehighlighter1_1555_1739_Closed_Image.style.display='inline'; Codehighlighter1_1555_1739_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_1555_1739_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1555_1739_Closed_Text.style.display='none'; Codehighlighter1_1555_1739_Open_Image.style.display='inline'; Codehighlighter1_1555_1739_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_1555_1739_Closed_Text>/**/</span><span id=Codehighlighter1_1555_1739_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">if(n==3){<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;star=2*((int)pow(2.0,n-1.0)-1);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(j=0;j&lt;(int)pow(2.0,n*1.0);j++)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("---%d&nbsp;%d\n",v[star+j].pos,v[star+j].neg);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">base</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: #0000ff">int</span><span style="COLOR: #000000">)pow(</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">,n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;num</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)pow(</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">,n</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_1863_1941_Open_Image onclick="this.style.display='none'; Codehighlighter1_1863_1941_Open_Text.style.display='none'; Codehighlighter1_1863_1941_Closed_Image.style.display='inline'; Codehighlighter1_1863_1941_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_1863_1941_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1863_1941_Closed_Text.style.display='none'; Codehighlighter1_1863_1941_Open_Image.style.display='inline'; Codehighlighter1_1863_1941_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">num;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_1863_1941_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1863_1941_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(v[</span><span style="COLOR: #0000ff">base</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">i].pos</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">v[</span><span style="COLOR: #0000ff">base</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">i].neg)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">sum</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
</span>
<p style="TEXT-INDENT: 21pt; MARGIN: 0cm 0cm 0pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">题中，</span><span lang=EN-US>n&lt;=24</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，时间空间均有限制，我们可以先求出所有结果，然后保存到数组直接取来输出。这是</span><span lang=EN-US>ACM</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">题中很常见的情况。</span></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<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></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;res[</span><span style="COLOR: #000000">25</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">{</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">12</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">171</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">410</span><span style="COLOR: #000000">,<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1896</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">5160</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">32757</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">59984</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">431095</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">822229</span><span style="COLOR: #000000">};<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n;<br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">n),n)<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d&nbsp;%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,n,res[n]);<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">&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><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000">}</span></div>
<img src ="http://www.cppblog.com/guodongshan/aggbug/129404.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guodongshan/" target="_blank">孟起</a> 2010-10-11 09:13 <a href="http://www.cppblog.com/guodongshan/archive/2010/10/11/129404.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>