﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-【♂Not The Triumph♂O(∩_∩)O哈哈~But The Struggle♂】-文章分类-USACO 题解</title><link>http://www.cppblog.com/xiongnanbin/category/10008.html</link><description>竞赛决不是捷径，它只是另一种艰辛的生活方式。得到与失去，只有时间会去评判；成功与失败，只有历史能去仲裁。我不会永远成功，正如我不会永远失败一样</description><language>zh-cn</language><lastBuildDate>Fri, 14 Aug 2009 20:22:42 GMT</lastBuildDate><pubDate>Fri, 14 Aug 2009 20:22:42 GMT</pubDate><ttl>60</ttl><item><title>【Big Barn 巨大的牛棚】</title><link>http://www.cppblog.com/xiongnanbin/articles/92692.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Sun, 09 Aug 2009 06:00:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/92692.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/92692.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/92692.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/92692.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/92692.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">农夫约翰想要在他的正方形农场上建造一座正方形大牛棚。他讨厌在他的农场中砍树，想找一个能够让他在空旷无树的地方修建牛棚的地方。我们假定，他的农场划分成 N x N 的方格。输入数据中包括有树的方格的列表。你的任务是计算并输出，在他的农场中，不需要砍树却能够修建的最大正方形牛棚。牛棚的边必须和水平轴或者垂直轴平行。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">格式<br>EXAMPLE</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">考虑下面的方格，它表示农夫约翰的农场，&#8216;.'表示没有树的方格，&#8216;#'表示有树的方格</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 2 3 4 5 6 7 8<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 . . . . . . . .<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 . # . . . # . .<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3 . . . . . . . .<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4 . . . . . . . .<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5 . . . . . . . .<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6 . . # . . . . .<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7 . . . . . . . .<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8 . . . . . . . .</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">最大的牛棚是 5 x 5 的，可以建造在方格右下角的两个位置其中一个。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">PROGRAM NAME: bigbrn<br>INPUT FORMAT<br>Line 1: 两个整数： N （1 &lt;= N &lt;= 1000），农场的大小，和 T （1 &lt;= T &lt;= 10，000）有树的方格的数量</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">Lines 2..T+1: 两个整数（1 &lt;= 整数 &lt;= N), 有树格子的横纵坐标</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">OUTPUT FORMAT<br>输出文件只由一行组成，约翰的牛棚的最大边长。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">SAMPLE INPUT (file bigbrn.in)<br>8 3<br>2 2<br>2 6<br>6 3</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">SAMPLE OUTPUT (file bigbrn.out)<br>5<br><br><strong>【参考程序】：<br></strong></p>
<div style="BORDER-RIGHT: #00ffff 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #00ffff 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #00ffff 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #00ffff 1px solid; FONT-FAMILY: Arial; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;bigbrn<br>LANG:&nbsp;C++<br></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br><br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;F[</span><span style="COLOR: #000000">1001</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">1001</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;N,T,ans;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;MIN(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;a</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">a:b;<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;MAX(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;a</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">a:b;<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">bigbrn.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">bigbrn.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">N,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">T);<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(F,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(F));<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x,y;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">T;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">x,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">y);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F[x][y]</span><span style="COLOR: #000000">=-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">N;i</span><span style="COLOR: #000000">++</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;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">N;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(F[i][j]</span><span style="COLOR: #000000">!=-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F[i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F[i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">MAX(F[i][j],MIN(MIN(F[i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,F[i][j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">),MIN(F[i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,F[i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][j]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">N;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">N;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(F[i][j]</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">ans)&nbsp;ans</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">F[i][j];<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,ans);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}</span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/92692.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-08-09 14:00 <a href="http://www.cppblog.com/xiongnanbin/articles/92692.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Network of Schools 校园网】</title><link>http://www.cppblog.com/xiongnanbin/articles/92684.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Sun, 09 Aug 2009 03:29:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/92684.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/92684.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/92684.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/92684.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/92684.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">一些学校连入一个电脑网络。那些学校已订立了协议：每个学校都会给其它的一些学校分发软件（称作&#8220;接受学校&#8221;）。注意如果 B 在 A 学校的分发列表中，那么 A 不一定也在 B 学校的列表中。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">你要写一个程序计算，根据协议，为了让网络中所有的学校都用上新软件，必须接受新软件副本的最少学校数目（子任务 A）。更进一步，我们想要确定通过给任意一个学校发送新软件，这个软件就会分发到网络中的所有学校。为了完成这个任务，我们可能必须扩展接收学校列表，使其加入新成员。计算最少需要增加几个扩展，使得不论我们给哪个学校发送新软件，它都会到达其余所有的学校（子任务 B）。一个扩展就是在一个学校的接收学校列表中引入一个新成员。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">格式<br>PROGRAM NAME: schlnet<br>INPUT FORMAT输入文件的第一行包括一个整数 N：网络中的学校数目（2 &lt;= N &lt;= 100）。学校用前 N 个正整数标识。接下来 N 行中每行都表示一个接收学校列表（分发列表）。第 i+1 行包括学校 i 的接收学校的标识符。每个列表用 0 结束。空列表只用一个 0 表示。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">OUTPUT FORMAT<br>你的程序应该在输出文件中输出两行。第一行应该包括一个正整数：子任务 A 的解。第二行应该包括子任务 B 的解。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">SAMPLE INPUT (file schlnet.in)<br>5<br>2 4 3 0<br>4 5 0<br>0<br>0<br>1 0</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">SAMPLE OUTPUT (file schlnet.out)<br>1<br>2</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">分析：(转byvoid)<br><br>&nbsp; 这是一道收缩强连通分量的题。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">该题描述的是一个有向图。我们都知道，在一个有向图强连通分量中从任意一个顶点开始，可以到达强连通分量的每个顶点。由此可以把该题中所有强连通分量收缩成分别一个顶点，则入度为0的顶点就是最少要接受新软件副本的学校。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">第二问就是，问至少添加多少条边，才能使原图强连通。也就问在收缩后的图至少添加多少条边，才能使之强连通。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">可以知道，当存在一个顶点入度为0或者出度为0的时候，该图一定不是强连通的。为了使添加的边最少，则应该把入度为0顶点和出度为0的顶点每个顶点添加1条边，使图中不存在入度为0顶点和出度为0的顶点。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">当入度为0的顶点多于出度为0的顶点，则应添加的边数应为入度为0的顶点的个数。当出度为0的顶点多于出入度为0的顶点，则应添加的边数应为出度为0的顶点的个数。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">这样就可以解决问题了。但是不要忘了还有特殊的情况，当原图本身就是强连通分量时，收缩成一个顶点，该顶点入度和出度都为0，但第一问应为1，第二问应为0。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">求强连通分量，我用的两遍深搜的Kosaraju算法，时间复杂度为O(n)。把找到的每个强连通分量收缩为一的顶点，组成新图。设r(x)为x所在的强连同分量的代表节点，如果原图中存在边e(x,y)，那么新图中有边e(r(x),r(y)) 。然后根据点的邻接关系统计出度和入度即可。<br><br><strong>【参考程序】：</strong></p>
<div style="BORDER-RIGHT: #00ffff 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #00ffff 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #00ffff 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #00ffff 1px solid; FONT-FAMILY: 宋体; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000"><strong>/*</strong></span><span style="COLOR: #008000"><br><strong>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;schlnet<br>LANG:&nbsp;C++<br></strong></span><span style="COLOR: #008000"><strong>*/</strong></span><span style="COLOR: #000000"><br><strong>#include</strong></span><strong><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span></strong><span style="COLOR: #000000"><br><strong>#include</strong></span><strong><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span></strong><span style="COLOR: #000000"><br></span><strong><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span></strong><strong><span style="COLOR: #000000">&nbsp;std;<br><br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;g1[</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">],g2[</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">101</span></strong><strong><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;into[</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">],</span><span style="COLOR: #0000ff">out</span><span style="COLOR: #000000">[</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">],belong[</span><span style="COLOR: #000000">101</span></strong><strong><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;vis[</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">],dis[</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">101</span></strong><strong><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;n,m,I0,O0;<br><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;g1dfs(</span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;k)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;vis[k]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">g1[k][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">];i</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span></strong><strong><span style="COLOR: #000000">vis[g1[k][i]])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g1dfs(g1[k][i]);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;g2dfs(</span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;k)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;belong[k]</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">m;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">g2[k][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">];i</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(vis[g2[k][i]]&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">!</span></strong><strong><span style="COLOR: #000000">belong[g2[k][i]])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g2dfs(g2[k][i]);<br>}<br></span><span style="COLOR: #0000ff">void</span></strong><strong><span style="COLOR: #000000">&nbsp;solve()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(vis,</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span></strong><strong><span style="COLOR: #000000">(vis));<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(belong,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span></strong><strong><span style="COLOR: #000000">(belong));<br>&nbsp;&nbsp;&nbsp;&nbsp;m</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(belong[i]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g1dfs(i);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g2dfs(i);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(vis,</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span></strong><strong><span style="COLOR: #000000">(vis));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(dis,</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span></strong><strong><span style="COLOR: #000000">(dis));<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">g1[i][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">];j</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dis[belong[i]][belong[g1[i][j]]]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(into,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span></strong><strong><span style="COLOR: #000000">(into));<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(</span><span style="COLOR: #0000ff">out</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">out</span></strong><strong><span style="COLOR: #000000">));<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">m;i</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">m;j</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(i</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">j&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span></strong><strong><span style="COLOR: #000000">&nbsp;dis[i][j])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;into[j]</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">out</span><span style="COLOR: #000000">[i]</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;I0</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;O0</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">m;i</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(into[i]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;I0</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">out</span><span style="COLOR: #000000">[i]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;O0</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #0000ff">void</span></strong><strong><span style="COLOR: #000000">&nbsp;cout_ans()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(m</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">1\n0\n</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span></strong><span style="COLOR: #000000"><br><strong>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</strong></span><strong><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">,I0);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(I0</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">O0)&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">,I0);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">,O0);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">schlnet.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">schlnet.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span></strong><strong><span style="COLOR: #000000">n);<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(g1,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span></strong><strong><span style="COLOR: #000000">(g1));<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(g2,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span></strong><strong><span style="COLOR: #000000">(g2));<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;x;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span></strong><strong><span style="COLOR: #000000">x);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span></strong><strong><span style="COLOR: #000000">&nbsp;(x)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g1[i][</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">g1[i][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]]</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">x;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g2[x][</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">g2[x][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]]</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span></strong><strong><span style="COLOR: #000000">x);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;solve();<br>&nbsp;&nbsp;&nbsp;&nbsp;cout_ans();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span></strong><span style="COLOR: #000000"><strong>;<br>}</strong></span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/92684.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-08-09 11:29 <a href="http://www.cppblog.com/xiongnanbin/articles/92684.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Window Area 窗体面积】</title><link>http://www.cppblog.com/xiongnanbin/articles/92638.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Sat, 08 Aug 2009 12:24:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/92638.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/92638.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/92638.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/92638.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/92638.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt">你刚刚接手一项窗体界面工程。窗体界面还算简单，而且幸运的是，你不必显示实际的窗体。有 5 种基本操作：</p>
<p style="FONT-SIZE: 12pt">创建一个新窗体<br>将窗体置顶<br>将窗体置底<br>删除一个窗体<br>输出窗体可见部分的百分比（就是，不被其它窗体覆盖的部分）。</p>
<p style="FONT-SIZE: 12pt">在输入文件中，操作以如下的格式出现。</p>
<p style="FONT-SIZE: 12pt">创建一个新窗体：w(I,x,y,X,Y)<br>将窗体置顶： t(I)<br>将窗体置底： b(I)<br>删除一个窗体：d(I)<br>输出窗体可见部分的百分比：s(I)</p>
<p style="FONT-SIZE: 12pt">I 是每个窗体唯一的标识符，标识符可以是 'a'..'z', 'A'..'Z' 和 '0'..'9' 中的任何一个。输入文件中没有多余的空格。</p>
<p style="FONT-SIZE: 12pt">（x,y）和（X,Y）是窗体的对角。当你创建一个窗体的时候，它自动被&#8220;置顶&#8221;。你不能用已经存在的标识符来创建窗体，但是你可以删除一个窗体后再用已删除窗体的标识符来创建窗体。坐标用正整数来表示，并且所有的窗体面积都不为 0（x &lt;&gt; X 且 y &lt;&gt; Y）。x 坐标和 y 坐标在 1 —— 32767 的范围内。</p>
<p style="FONT-SIZE: 12pt">格式<br>PROGRAM NAME: window<br>INPUT FORMAT<br>输入文件包含给你的解释程序的一系列命令，每行一个。当输入文件结束时，停止程序。</p>
<p style="FONT-SIZE: 12pt">OUTPUT FORMAT<br>只对于 s() 命令进行输出。当然，输入文件可能有许多 s() 命令(不超过500次)，所以输出文件应该是一个百分比的序列，每行一个，百分比是窗体可见部分的百分比。百分比应该四舍五入到三位小数。</p>
<p style="FONT-SIZE: 12pt">SAMPLE INPUT (file window.in)<br>w(a,10,132,20,12)<br>w(b,8,76,124,15)<br>s(a)</p>
<p style="FONT-SIZE: 12pt">SAMPLE OUTPUT (file window.out)<br>49.167<br><br><strong>【参考程序】：</strong></p>
<div style="BORDER-RIGHT: #00ffff 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #00ffff 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #00ffff 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #00ffff 1px solid; FONT-FAMILY: 宋体; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000"><strong>/*</strong></span><span style="COLOR: #008000"><br><strong>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;window<br>LANG:&nbsp;C++<br></strong></span><span style="COLOR: #008000"><strong>*/</strong></span><span style="COLOR: #000000"><br><strong>#include</strong></span><strong><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstdio</span><span style="COLOR: #000000">&gt;</span></strong><span style="COLOR: #000000"><br><strong>#include</strong></span><strong><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span></strong><span style="COLOR: #000000"><br></span><strong><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span></strong><strong><span style="COLOR: #000000">&nbsp;std;<br><br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;L[</span><span style="COLOR: #000000">256</span><span style="COLOR: #000000">],R[</span><span style="COLOR: #000000">256</span><span style="COLOR: #000000">],U[</span><span style="COLOR: #000000">256</span><span style="COLOR: #000000">],D[</span><span style="COLOR: #000000">256</span></strong><strong><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;prev[</span><span style="COLOR: #000000">256</span><span style="COLOR: #000000">],next[</span><span style="COLOR: #000000">256</span></strong><strong><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;S[</span><span style="COLOR: #000000">256</span></strong><strong><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;head,tail;<br><br></span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;get_n()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;S[</span><span style="COLOR: #000000">2</span></strong><strong><span style="COLOR: #000000">];<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Swap(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;x,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span></strong><strong><span style="COLOR: #000000">&nbsp;y)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;t</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">x;x</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">y;y</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">t;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;addtail(</span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;x)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;prev[x]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">tail;&nbsp;next[x]</span><span style="COLOR: #000000">=-</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(tail</span><span style="COLOR: #000000">!=-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;next[tail]</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">x;<br>&nbsp;&nbsp;&nbsp;&nbsp;tail</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">x;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(head</span><span style="COLOR: #000000">==-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;head</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">x;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;remove(</span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;x)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(x</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">tail)&nbsp;prev[next[x]]</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">prev[x];<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(x</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">head)&nbsp;next[prev[x]]</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">next[x];<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(x</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">tail)&nbsp;tail</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">prev[x];<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(x</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">head)&nbsp;head</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">next[x];<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;addhead(</span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;x)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;prev[x]</span><span style="COLOR: #000000">=-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;next[x]</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">head;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(head</span><span style="COLOR: #000000">!=-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;prev[head]</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">x;<br>&nbsp;&nbsp;&nbsp;&nbsp;head</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">x;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(tail</span><span style="COLOR: #000000">==-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;tail</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">x;<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;cut(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;l,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;r,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;u,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;d,</span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;k)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(k</span><span style="COLOR: #000000">!=-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;(R[k]</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">l&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;L[k]</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">r&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;U[k]</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">d&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;D[k]</span><span style="COLOR: #000000">&lt;=</span></strong><strong><span style="COLOR: #000000">u))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">next[k];<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(k</span><span style="COLOR: #000000">==-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;(r</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">l)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(d</span><span style="COLOR: #000000">-</span></strong><strong><span style="COLOR: #000000">u);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;area</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(L[k]</span><span style="COLOR: #000000">&gt;</span></strong><strong><span style="COLOR: #000000">l)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;area</span><span style="COLOR: #000000">+=</span></strong><strong><span style="COLOR: #000000">cut(l,L[k],u,d,next[k]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">L[k];<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(R[k]</span><span style="COLOR: #000000">&lt;</span></strong><strong><span style="COLOR: #000000">r)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;area</span><span style="COLOR: #000000">+=</span></strong><strong><span style="COLOR: #000000">cut(R[k],r,u,d,next[k]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">R[k];<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(U[k]</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">u)&nbsp;area</span><span style="COLOR: #000000">+=</span></strong><strong><span style="COLOR: #000000">cut(l,r,u,U[k],next[k]);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(D[k]</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">d)&nbsp;area</span><span style="COLOR: #000000">+=</span></strong><strong><span style="COLOR: #000000">cut(l,r,D[k],d,next[k]);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span></strong><strong><span style="COLOR: #000000">&nbsp;area;<br>}<br></span><span style="COLOR: #0000ff">void</span></strong><strong><span style="COLOR: #000000">&nbsp;solve_w()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">get_n();<br>&nbsp;&nbsp;&nbsp;&nbsp;sscanf(S</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d,%d,%d,%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,L</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">n,U</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">n,R</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">n,D</span><span style="COLOR: #000000">+</span></strong><strong><span style="COLOR: #000000">n);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(L[n]</span><span style="COLOR: #000000">&gt;</span></strong><strong><span style="COLOR: #000000">R[n])&nbsp;Swap(L[n],R[n]);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(U[n]</span><span style="COLOR: #000000">&gt;</span></strong><strong><span style="COLOR: #000000">D[n])&nbsp;Swap(U[n],D[n]);<br>&nbsp;&nbsp;&nbsp;&nbsp;addtail(n);<br>}<br></span><span style="COLOR: #0000ff">void</span></strong><strong><span style="COLOR: #000000">&nbsp;solve_t()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">get_n();<br>&nbsp;&nbsp;&nbsp;&nbsp;remove(n);<br>&nbsp;&nbsp;&nbsp;&nbsp;addtail(n);<br>}<br></span><span style="COLOR: #0000ff">void</span></strong><strong><span style="COLOR: #000000">&nbsp;solve_b()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">get_n();<br>&nbsp;&nbsp;&nbsp;&nbsp;remove(n);<br>&nbsp;&nbsp;&nbsp;&nbsp;addhead(n);<br>}<br></span><span style="COLOR: #0000ff">void</span></strong><strong><span style="COLOR: #000000">&nbsp;solve_d()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">get_n();<br>&nbsp;&nbsp;&nbsp;&nbsp;remove(n);<br>}<br></span><span style="COLOR: #0000ff">void</span></strong><strong><span style="COLOR: #000000">&nbsp;solve_s()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">get_n();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;ans</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">cut(L[n],R[n],U[n],D[n],next[n]);<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%.3lf\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">100.0</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">)ans</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">((R[n]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">L[n])</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(D[n]</span><span style="COLOR: #000000">-</span></strong><strong><span style="COLOR: #000000">U[n])));<br>}<br></span><span style="COLOR: #0000ff">void</span></strong><strong><span style="COLOR: #000000">&nbsp;solve()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">switch</span><span style="COLOR: #000000">&nbsp;(S[</span><span style="COLOR: #000000">0</span></strong><strong><span style="COLOR: #000000">])<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">'</span></strong><strong><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solve_w();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">t</span><span style="COLOR: #000000">'</span></strong><strong><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solve_t();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">'</span></strong><strong><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solve_b();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">d</span><span style="COLOR: #000000">'</span></strong><strong><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solve_d();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">s</span><span style="COLOR: #000000">'</span></strong><strong><span style="COLOR: #000000">:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solve_s();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">window.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">window.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(prev,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span></strong><strong><span style="COLOR: #000000">(prev));<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(next,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span></strong><strong><span style="COLOR: #000000">(next));<br>&nbsp;&nbsp;&nbsp;&nbsp;head</span><span style="COLOR: #000000">=-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;tail</span><span style="COLOR: #000000">=-</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,S)</span><span style="COLOR: #000000">!=</span></strong><strong><span style="COLOR: #000000">EOF)&nbsp;solve();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span></strong><span style="COLOR: #000000"><strong>;<br>}<br></strong></span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/92638.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-08-08 20:24 <a href="http://www.cppblog.com/xiongnanbin/articles/92638.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Milk Measuring 量取牛奶】</title><link>http://www.cppblog.com/xiongnanbin/articles/92596.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Sat, 08 Aug 2009 01:16:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/92596.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/92596.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/92596.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/92596.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/92596.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">农夫约翰要量取 Q（1 &lt;= Q &lt;= 20,000）夸脱（夸脱，quarts，容积单位——译者注） 他的最好的牛奶，并把它装入一个大瓶子中卖出。消费者要多少，他就给多少，从不有任何误差。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">农夫约翰总是很节约。他现在在奶牛五金商店购买一些桶，用来从他的巨大的牛奶池中量出 Q 夸脱的牛奶。每个桶的价格一样。你的任务是计算出一个农夫约翰可以购买的最少的桶的集合，使得能够刚好用这些桶量出 Q 夸脱的牛奶。另外，由于农夫约翰必须把这些桶搬回家，对于给出的两个极小桶集合，他会选择&#8220;更小的&#8221;一个，即：把这两个集合按升序排序，比较第一个桶，选择第一个桶容积较小的一个。如果第一个桶相同，比较第二个桶，也按上面的方法选择。否则继续这样的工作，直到相比较的两个桶不一致为止。例如，集合 {3，5，7，100} 比集合 {3，6，7，8} 要好。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">为了量出牛奶，农夫约翰可以从牛奶池把桶装满，然后倒进瓶子。他决不把瓶子里的牛奶倒出来或者把桶里的牛奶倒到别处。用一个容积为 1 夸脱的桶，农夫约翰可以只用这个桶量出所有可能的夸脱数。其它的桶的组合没有这么方便。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">计算需要购买的最佳桶集，保证所有的测试数据都至少有一个解。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">格式<br>PROGRAM NAME: milk4<br>INPUT FORMAT<br>Line 1: 一个整数 Q</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">Line 2: 一个整数P（1 &lt;= P &lt;= 100），表示商店里桶的数量</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">Lines 3..P+2: 每行包括一个桶的容积（1 &lt;= 桶的容积 &lt;= 10000）</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">OUTPUT FORMAT<br>输出文件只有一行，由空格分开的整数组成：</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">为了量出想要的夸脱数，需要购买的最少的桶的数量，接着是：</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">一个排好序的列表（从小到大），表示需要购买的每个桶的容积</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">SAMPLE INPUT (file milk4.in)<br>16<br>3<br>3<br>5<br>7</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">SAMPLE OUTPUT (file milk4.out)<br>2 3 5</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong style="COLOR: #ff00ff">分析：</strong><br>&nbsp;&nbsp; 此题用的是DFSID的解法，对于每次DFSID我们都找出组合为1个桶，2个，3个.....P个，每次用前面选的一层层的叠上去，对于每次找出的组合我们都去Judge，再用一个完全背包(原话：每个桶至少用一次)来判断每次组合是否完成Q的量取,answer就是达到Q那组----因为在读入数据时我就加了一个从小到大的快排，所以DFS出来的顺序已经是达到了题目要求，所以直接输出即可。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp; 背包的状态方程：bo[j]=bo[j] or bo[j-v[used[i]]](1&lt;=i&lt;=V,v[used[i]]&lt;=j&lt;=Q)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; used[i]:第i个桶的容积。<br>&nbsp;&nbsp;&nbsp;&nbsp;初始化：bo全部都是false，bo[0]=true</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp; 此处的背包循环了很多没有用到的冗余次数，如果不加优化有一组过不了，所以背包有一些优化。<br>&nbsp;&nbsp; 优化：对于每次的组合都有i=1......Q/v[used[1]],则bo[i*v[used[1]]]=true,其它的状态都可以有前面的推出。<br><br><strong>【参考程序】：</strong></p>
<div style="BORDER-RIGHT: #00ffff 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #00ffff 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #00ffff 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #00ffff 1px solid; FONT-FAMILY: 宋体; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000"><strong>/*</strong></span><span style="COLOR: #008000"><br><strong>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;milk4<br>LANG:&nbsp;C++<br></strong></span><span style="COLOR: #008000"><strong>*/</strong></span><span style="COLOR: #000000"><br><strong>#include</strong></span><strong><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span></strong><span style="COLOR: #000000"><br><strong>#include</strong></span><strong><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span></strong><span style="COLOR: #000000"><br></span><strong><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span></strong><strong><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;V[</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">],Used[</span><span style="COLOR: #000000">101</span></strong><strong><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;bo[</span><span style="COLOR: #000000">20001</span></strong><strong><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;P,Q,k;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;cmp(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span></strong><strong><span style="COLOR: #000000">t)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=*</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)s,j</span><span style="COLOR: #000000">=*</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span></strong><strong><span style="COLOR: #000000">)t;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">-</span></strong><strong><span style="COLOR: #000000">j;<br>}<br></span><span style="COLOR: #0000ff">void</span></strong><strong><span style="COLOR: #000000">&nbsp;cout_ans()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">,k);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">k;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;%d</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">,V[Used[i]]);<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;exit(</span><span style="COLOR: #000000">0</span></strong><strong><span style="COLOR: #000000">);<br>}<br></span><span style="COLOR: #0000ff">void</span></strong><strong><span style="COLOR: #000000">&nbsp;Judge()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(bo,</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span></strong><strong><span style="COLOR: #000000">(bo));<br>&nbsp;&nbsp;&nbsp;&nbsp;bo[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">Q</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">V[Used[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]];i</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bo[i</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">V[Used[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]]]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">k;i</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">V[Used[i]];j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">Q;j</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bo[j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">bo[j]&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;bo[j</span><span style="COLOR: #000000">-</span></strong><strong><span style="COLOR: #000000">V[Used[i]]];<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span></strong><strong><span style="COLOR: #000000">&nbsp;(bo[Q])&nbsp;cout_ans();<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;dfs(</span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;dep)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">Used[dep</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">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">P</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">k</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">dep;i</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Used[dep]</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(dep</span><span style="COLOR: #000000">==</span></strong><strong><span style="COLOR: #000000">k)&nbsp;Judge();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;dfs(dep</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #0000ff">void</span></strong><strong><span style="COLOR: #000000">&nbsp;dfsid()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;k</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">P;k</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;dfs(</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">);<br>}<br></span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">milk4.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">milk4.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">Q,</span><span style="COLOR: #000000">&amp;</span></strong><strong><span style="COLOR: #000000">P);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">P;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span></strong><strong><span style="COLOR: #000000">V[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;qsort(V</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,P,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(V[</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">]),cmp);<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(Used,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span></strong><strong><span style="COLOR: #000000">(Used));<br>&nbsp;&nbsp;&nbsp;&nbsp;dfsid();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span></strong><span style="COLOR: #000000"><strong>;<br>}</strong></span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/92596.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-08-08 09:16 <a href="http://www.cppblog.com/xiongnanbin/articles/92596.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Wisconsin Squares 威斯康星州的牧场】</title><link>http://www.cppblog.com/xiongnanbin/articles/92568.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Fri, 07 Aug 2009 12:43:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/92568.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/92568.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/92568.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/92568.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/92568.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">威斯康星州的春天来了，是该把小奶牛们赶到小牧场上并把大奶牛们赶到北纬 40 度的大牧场上的时候了。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">农夫约翰的牧场上有五种奶牛（括号内的是缩写）：格恩西奶牛（A），泽西奶牛（B），赫里福奶牛（C），黑安格斯奶牛（D），朗赫恩奶牛（E）。这些奶牛群放养在一片 16 英亩的牧场上，每英亩上都有一小群奶牛，像下面这样排列成 4 x 4 的格子（用行和列标号）：</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp; 1 2 3 4<br>+-------<br>1|A B A C<br>2|D C D E<br>3|B E B C<br>4|C A D E</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">最初，牧场上的奶牛群总共有 3 群 A，3 群 B，4 群 C，3 群 D，3 群 E。今年的 D 种小奶牛比去年多一群 ，C 种少一群，共有 3 群 A，3 群 B，3 群 C，4 群 D，3 群 E。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">农夫约翰对于他牧场上的奶牛群的布局非常小心。这是因为如果同一种类型的奶牛群靠得太近，她们就乱来：她们聚集在栅栏边上抽烟，喝牛奶。如果她们在相同的格子上或者在临近的 8 个格子上，就是靠得太近了。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">农夫约翰得用他的棕色旧福特皮卡把他的大奶牛群运出牧场，并把他的小奶牛群运进牧场，皮卡一次只能运一群奶牛。他装上一群小奶牛，开车到小牧场的一个方格中，卸下这群小奶牛，再装上这个格子上的那群大奶牛，开到北纬 40 度的大牧场卸下来。他重复这样的操作 16 次，然后开车去杰克商店办理低脂酸奶的交易和家居装修。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">帮助农夫约翰。他必须选择正确的顺序来替换他的奶牛群，使得他从不把一群小奶牛放入当前被同样类型奶牛占有的方格或者当前被同样类型奶牛占据的方格的临近方格。当然，一旦大奶牛走了，小奶牛就被安置好（in place），他必须小心以后的情况，要根据新的排列把奶牛群分开。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">非常重要的提示：农夫约翰从过去的经验知道，他必须先移动 D 种奶牛群。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">找出农夫约翰将他的小奶牛搬迁到她们的新牧场上的办法。输出 16 个连续的 奶牛群类型/行/列 的信息，使得这样的安排能够符合安全经验。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">计算 4 x 4 牧场的最终排列总数和产生那些排列的方式的总数。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">格式<br>PROGRAM NAME: wissqu<br>INPUT FORMAT<br>四行，每行四个字母，表示奶牛群。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">OUTPUT FORMAT<br>16 行，每行分别由奶牛群类型/行/列组成。如果有多解（一定有），那么你应该输出奶牛群类型按照字典序排列在最前面的那个解。如果不只一个解满足条件，那么你应该输出行信息按照字典需排列在最前面的那个解。如果仍然不只一个解满足条件，那么你应该输出列信息按照字典序排列在最前面的那个解。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">最后多输出一行，包含能够由这个排列方式产生的排列的总数。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">SAMPLE INPUT (file wissqu.in)<br>ABAC<br>DCDE<br>BEBC<br>CADE</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><br>SAMPLE OUTPUT (file wissqu.out)<br>D 4 1<br>C 4 2<br>A 3 1<br>A 3 3<br>B 2 4<br>B 3 2<br>B 4 4<br>E 2 1<br>E 2 3<br>D 1 4<br>D 2 2<br>C 1 1<br>C 1 3<br>A 1 2<br>E 4 3<br>D 3 4<br>14925</p>
<br><strong>【参考程序】：<br></strong>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: 宋体; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000"><strong>/*</strong></span><span style="COLOR: #008000"><br><strong>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;wissqu<br>LANG:&nbsp;C++<br></strong></span><span style="COLOR: #008000"><strong>*/</strong></span><span style="COLOR: #000000"><br><strong>#include</strong></span><strong><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span></strong><span style="COLOR: #000000"><br><strong>#include</strong></span><strong><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span></strong><span style="COLOR: #000000"><br></span><strong><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span></strong><strong><span style="COLOR: #000000">&nbsp;std;<br><br></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;dx[</span><span style="COLOR: #000000">9</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">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</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">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">};<br></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;dy[</span><span style="COLOR: #000000">9</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">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">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">1</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">0</span></strong><strong><span style="COLOR: #000000">};<br><br></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;ans1[</span><span style="COLOR: #000000">17</span><span style="COLOR: #000000">],a[</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">6</span></strong><strong><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;f[</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">],ans2[</span><span style="COLOR: #000000">17</span><span style="COLOR: #000000">],ans3[</span><span style="COLOR: #000000">17</span><span style="COLOR: #000000">],rest[</span><span style="COLOR: #000000">6</span></strong><strong><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;done[</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">6</span></strong><strong><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;ans;<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;come(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y,</span><span style="COLOR: #0000ff">char</span></strong><strong><span style="COLOR: #000000">&nbsp;c)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[x</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">dx[i]][y</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">dy[i]][c</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">64</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;go(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y,</span><span style="COLOR: #0000ff">char</span></strong><strong><span style="COLOR: #000000">&nbsp;c)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[x</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">dx[i]][y</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">dy[i]][c</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">64</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">--</span></strong><strong><span style="COLOR: #000000">;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Search(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;c,</span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;dep)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;ans1[dep]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">c;&nbsp;ans2[dep]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">x;&nbsp;ans3[dep]</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">y;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(dep</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">16</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(ans</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">16</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%c&nbsp;%d&nbsp;%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">(ans1[i]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">64</span></strong><strong><span style="COLOR: #000000">),ans2[i],ans3[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span></strong><strong><span style="COLOR: #000000">&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;go(x,y,a[x][y]);<br>&nbsp;&nbsp;&nbsp;&nbsp;come(x,y,</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">(c</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">64</span></strong><strong><span style="COLOR: #000000">));<br>&nbsp;&nbsp;&nbsp;&nbsp;done[x][y]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;k</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">;k</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span></strong><strong><span style="COLOR: #000000">&nbsp;(rest[k])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(f[i][j][k]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">!</span></strong><strong><span style="COLOR: #000000">done[i][j])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rest[k]</span><span style="COLOR: #000000">--</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Search(i,j,k,dep</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rest[k]</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;come(x,y,a[x][y]);<br>&nbsp;&nbsp;&nbsp;&nbsp;go(x,y,</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">(c</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">64</span></strong><strong><span style="COLOR: #000000">));<br>&nbsp;&nbsp;&nbsp;&nbsp;done[x][y]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">false</span></strong><strong><span style="COLOR: #000000">;<br>}<br></span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">wissqu.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">wissqu.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(f,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span></strong><strong><span style="COLOR: #000000">(f));<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%c</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span></strong><strong><span style="COLOR: #000000">a[i][j]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;come(i,j,a[i][j]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getchar();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(done,</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span></strong><strong><span style="COLOR: #000000">(done));<br>&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;rest[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">3</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(f[i][j][</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Search(i,j,</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">,ans);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span></strong><span style="COLOR: #000000"><strong>;<br>}</strong></span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/92568.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-08-07 20:43 <a href="http://www.cppblog.com/xiongnanbin/articles/92568.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Electric Fences 电网】</title><link>http://www.cppblog.com/xiongnanbin/articles/92545.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Fri, 07 Aug 2009 08:06:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/92545.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/92545.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/92545.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/92545.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/92545.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt">农夫约翰已经决定建造电网。他已经把他的农田围成一些奇怪的形状，现在必须找出安放电源的最佳位置。</p>
<p style="FONT-SIZE: 12pt">对于每段电网都必须从电源拉出一条电线。电线可以穿过其他电网或者跨过其他电线。电线能够以任意角度铺设，从电源连接到一段电网的任意一点上（也就是，这段电网的端点上或者在其之间的任意一点上）。这里所说的&#8220;一段电网&#8221;指的是呈一条线段状的电网，并不是连在一起的几段电网。若几段电网连在一起，那么也要分别给这些电网提供电力。</p>
<p style="FONT-SIZE: 12pt">已知所有的 F（1 &lt;= F &lt;= 150）段电网的位置（电网总是和坐标轴平行，并且端点的坐标总是整数，0 &lt;= X,Y &lt;= 100）。你的程序要计算连接电源和每段电网所需的电线的最小总长度，还有电源的最佳坐标。</p>
<p style="FONT-SIZE: 12pt">电源的最佳坐标可能在农夫约翰的农田中的任何一个位置，并不一定是整数。</p>
<p style="FONT-SIZE: 12pt">格式<br>PROGRAM NAME: fence3<br>INPUT FORMAT<br>第一行包括 F ——电网的数量。下面的 F 行每行包括两个 X，Y 对，表示这段电网的两个端点。</p>
<p style="FONT-SIZE: 12pt">OUTPUT FORMAT<br>只有一行，输出三个浮点数，相邻两个之间留一个空格。假定你的电脑的输出库会正确地对小数进行四舍五入。</p>
<p style="FONT-SIZE: 12pt">这三个数是：<br>电源最佳坐标的 X 值，电源最佳坐标的 Y 值，和需要的电线的总长度（要最小）。</p>
<p style="FONT-SIZE: 12pt">SAMPLE INPUT (file fence3.in)<br>3<br>0 0 0 1<br>2 0 2 1<br>0 3 2 3</p>
<p style="FONT-SIZE: 12pt">SAMPLE OUTPUT (file fence3.out)<br>1.0 1.6 3.7<br><br><strong>【参考程序】：</strong></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: 宋体; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000"><strong>/*</strong></span><span style="COLOR: #008000"><br><strong>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;fence3<br>LANG:&nbsp;C++<br></strong></span><span style="COLOR: #008000"><strong>*/</strong></span><span style="COLOR: #000000"><br><strong>#include</strong></span><strong><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span></strong><span style="COLOR: #000000"><br><strong>#include</strong></span><strong><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span></strong><span style="COLOR: #000000"><br><strong>#include</strong></span><strong><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cmath</span><span style="COLOR: #000000">&gt;</span></strong><span style="COLOR: #000000"><br></span><strong><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span></strong><strong><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #0000ff">struct</span></strong><strong><span style="COLOR: #000000">&nbsp;node<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;x,y;<br>}&nbsp;s[</span><span style="COLOR: #000000">151</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">2</span></strong><strong><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">double</span></strong><strong><span style="COLOR: #000000">&nbsp;ans,tx,ty;<br></span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;n;<br></span><span style="COLOR: #0000ff">void</span></strong><strong><span style="COLOR: #000000">&nbsp;Swap(node&nbsp;a,node&nbsp;b)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;node&nbsp;t</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b;b</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">t;<br>}<br></span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;sqr(</span><span style="COLOR: #0000ff">double</span></strong><strong><span style="COLOR: #000000">&nbsp;x)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;x</span><span style="COLOR: #000000">*</span></strong><strong><span style="COLOR: #000000">x;<br>}<br></span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;MIN(</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;x,</span><span style="COLOR: #0000ff">double</span></strong><strong><span style="COLOR: #000000">&nbsp;y)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(x</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">y)&nbsp;</span><span style="COLOR: #0000ff">return</span></strong><strong><span style="COLOR: #000000">&nbsp;x;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">return</span></strong><strong><span style="COLOR: #000000">&nbsp;y;<br>}<br></span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;dis(</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;x,</span><span style="COLOR: #0000ff">double</span></strong><strong><span style="COLOR: #000000">&nbsp;y)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;sum</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span></strong><strong><span style="COLOR: #000000">,s1,s2;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(s[i][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].x</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">x&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;x</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">s[i][</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">].x)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">abs(s[i][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].y</span><span style="COLOR: #000000">-</span></strong><strong><span style="COLOR: #000000">y);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(s[i][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].y</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">y&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;y</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">s[i][</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">].y)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">abs(s[i][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].x</span><span style="COLOR: #000000">-</span></strong><strong><span style="COLOR: #000000">x);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span></strong><span style="COLOR: #000000"><br><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s1</strong></span><strong><span style="COLOR: #000000">=</span><span style="COLOR: #000000">sqrt(sqr(s[i][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">x)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">sqr(s[i][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].y</span><span style="COLOR: #000000">-</span></strong><strong><span style="COLOR: #000000">y));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">sqrt(sqr(s[i][</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">].x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">x)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">sqr(s[i][</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">].y</span><span style="COLOR: #000000">-</span></strong><strong><span style="COLOR: #000000">y));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="COLOR: #000000">+=</span></strong><strong><span style="COLOR: #000000">MIN(s1,s2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span></strong><strong><span style="COLOR: #000000">&nbsp;sum;<br>}<br></span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">fence3.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">fence3.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span></strong><strong><span style="COLOR: #000000">n);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">s[i][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].x,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">s[i][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].y,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">s[i][</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">].x,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">s[i][</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">].y);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(s[i][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].x</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">s[i][</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">].x&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;s[i][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].y</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">s[i][</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">].y)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Swap(s[i][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">],s[i][</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span></strong><strong><span style="COLOR: #000000">&nbsp;x,y,d,temp;<br>&nbsp;&nbsp;&nbsp;&nbsp;tx</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ty</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;d</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;&nbsp;ans</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">9999999.9</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(d</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">0.001</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;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">10</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">dis(tx</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">d</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">j,ty</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">d</span><span style="COLOR: #000000">*</span></strong><strong><span style="COLOR: #000000">i);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(temp</span><span style="COLOR: #000000">&lt;</span></strong><strong><span style="COLOR: #000000">ans)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">temp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&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">tx</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">d</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">j;&nbsp;y</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ty</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">d</span><span style="COLOR: #000000">*</span></strong><strong><span style="COLOR: #000000">i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">d;&nbsp;ty</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">y</span><span style="COLOR: #000000">-</span></strong><strong><span style="COLOR: #000000">d;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d</span><span style="COLOR: #000000">/=</span><span style="COLOR: #000000">5</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%.1lf&nbsp;%.1lf&nbsp;%.1lf\n</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">,tx,ty,ans);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span></strong><span style="COLOR: #000000"><strong>;<br>}</strong></span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/92545.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-08-07 16:06 <a href="http://www.cppblog.com/xiongnanbin/articles/92545.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Snail Trails 蜗牛的旅行】</title><link>http://www.cppblog.com/xiongnanbin/articles/92407.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Thu, 06 Aug 2009 05:37:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/92407.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/92407.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/92407.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/92407.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/92407.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">丽&#183;斯内尔（Sally Snail，蜗牛）喜欢在 N x N 的棋盘上闲逛（1 &lt; n &lt;= 120）。她总是从棋盘的左上角出发。棋盘上有空的格子（用&#8220;.&#8221;来表示）和 B 个路障（用&#8220;#&#8221;来表示）。下面是这种表示法的示例棋盘：</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp; A B C D E F G H<br>1 S . . . . . # .<br>2 . . . . # . . .<br>3 . . . . . . . .<br>4 . . . . . . . .<br>5 . . . . . # . .<br>6 # . . . . . . .<br>7 . . . . . . . .<br>8 . . . . . . . .</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">萨丽总是垂直（向上或者向下）或水平（向左或者向右）地走。她可以从出发地（总是记作 A1 ）向下或者向右走。一旦萨丽选定了一个方向，她就会一直走下去。如果她遇到棋盘边缘或者路障，她就停下来，并且转过 90 度。她不可能离开棋盘，或者走进路障当中。并且，萨丽从不跨过她已经经过的格子。当她再也不能走的时候，她就停止散步。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">这里是上面的棋盘上的一次散步路线图示：</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">A B C D E F G H<br>1 S---------+ # .<br>2 . . . . # | . .<br>3 . . . . . | . .<br>4 . . . . . +---+<br>5 . . . . . # . |<br>6 # . . . . . . |<br>7 +-----------+ |<br>8 +-------------+</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><br>萨丽向右走，再向下，向右，向下，然后向左，再向上，最后向右走。这时她遇到了一个她已经走过的格子，她就停下来了。但是，如果她在 F5 格遇到路障后选择另外一条路——向我们看来是左边的方向转弯，情况就不一样了。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">你的任务是计算并输出，如果萨丽聪明地选择她的路线的话，她所能够经过的最多格子数。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">格式<br>PROGRAM NAME: snail<br>INPUT FORMAT<br>输入的第一行包括 N ——棋盘的大小，和 B ——路障的数量（1 &lt;= B &lt;= 200）。接下来的 B 行包含着路障的位置信息。下面的样例输入对应着上面的示例棋盘。下面的输出文件表示问题的解答。注意，当 N 〉26 时，输入文件就不能表示 Z 列以后的路障了。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">OUTPUT FORMAT<br>输出文件应该只由一行组成，即萨丽能够经过的最多格子数。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">SAMPLE INPUT (file snail.in)<br>8 4<br>E2<br>A6<br>G1<br>F5</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><br>SAMPLE OUTPUT (file snail.out)<br>33</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">样例说明</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">A B C D E F G H<br>1 S . . . . . # .<br>2 | . . . # . . .<br>3 | . . . +-----+<br>4 | . . . | . . |<br>5 +-------+ # . |<br>6 # . . . . . . |<br>7 +------------ |<br>8 +-------------+<br><br><strong>【参考程序】：</strong></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: 宋体; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000"><strong>/*</strong></span><span style="COLOR: #008000"><br><strong>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;snail<br>LANG:&nbsp;C++<br></strong></span><span style="COLOR: #008000"><strong>*/</strong></span><span style="COLOR: #000000"><br><strong>#include</strong></span><strong><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span></strong><span style="COLOR: #000000"><br><strong>#include</strong></span><strong><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span></strong><span style="COLOR: #000000"><br></span><strong><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span></strong><strong><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;dx[</span><span style="COLOR: #000000">4</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">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">};<br></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;dy[</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">]</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">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">0</span></strong><strong><span style="COLOR: #000000">};<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a[</span><span style="COLOR: #000000">130</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">130</span></strong><strong><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;n,b,ans;<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;dfs(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;d,</span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;dep)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;xx,yy,deps;<br>&nbsp;&nbsp;&nbsp;&nbsp;xx</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">x;&nbsp;yy</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">y;&nbsp;deps</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">dep;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(a[xx</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">dx[d]][yy</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">dy[d]]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xx</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">dx[d];&nbsp;yy</span><span style="COLOR: #000000">+=</span></strong><strong><span style="COLOR: #000000">dy[d];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[xx][yy]</span><span style="COLOR: #000000">=-</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deps</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(xx</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">x&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;yy</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">y)&nbsp;</span><span style="COLOR: #0000ff">return</span></strong><strong><span style="COLOR: #000000">&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(deps</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">ans)&nbsp;ans</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">deps;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(a[xx</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">dx[d]][yy</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">dy[d]]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfs(xx,yy,(d</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></strong><strong><span style="COLOR: #000000">,deps);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfs(xx,yy,(d</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">4</span></strong><strong><span style="COLOR: #000000">,deps);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(xx</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">x&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;yy</span><span style="COLOR: #000000">!=</span></strong><strong><span style="COLOR: #000000">y)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[xx][yy]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xx</span><span style="COLOR: #000000">-=</span><span style="COLOR: #000000">dx[d];&nbsp;yy</span><span style="COLOR: #000000">-=</span></strong><strong><span style="COLOR: #000000">dy[d];<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">snail.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">snail.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">n,</span><span style="COLOR: #000000">&amp;</span></strong><strong><span style="COLOR: #000000">b);getchar();<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(a,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span></strong><strong><span style="COLOR: #000000">(a));<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">][i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a[n</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[i][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a[i][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">1</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;c;&nbsp;</span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;j;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">b;i</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%c%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">c,</span><span style="COLOR: #000000">&amp;</span></strong><strong><span style="COLOR: #000000">j);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[j][c</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">64</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getchar();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;a[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=-</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;dfs(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;dfs(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">,ans);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span></strong><span style="COLOR: #000000"><strong>;<br>}</strong></span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/92407.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-08-06 13:37 <a href="http://www.cppblog.com/xiongnanbin/articles/92407.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Musical Themes 乐曲主题】</title><link>http://www.cppblog.com/xiongnanbin/articles/92354.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Wed, 05 Aug 2009 12:48:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/92354.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/92354.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/92354.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/92354.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/92354.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt; COLOR: #000000">我们用N(1 &lt;= N &lt;=5000)个音符的序列来表示一首乐曲，每个音符都是1..88范围内的整数，每个数表示钢琴上的一个键。很不幸这种表示旋律的方法忽略了音符的时值，但这项编程任务是关于音高的，与时值无关。</p>
<p style="FONT-SIZE: 12pt; COLOR: #000000">许多作曲家围绕一个重复出现的&#8220;主题&#8221;来构建乐曲。在我们的乐曲表示法中，&#8220;主题&#8221;是整个音符序列的一个子串，它需要满足如下条件：</p>
<p style="FONT-SIZE: 12pt; COLOR: #000000">⒈长度至少为5个音符</p>
<p style="FONT-SIZE: 12pt; COLOR: #000000">⒉在乐曲中重复出现(可能经过转调，见下)</p>
<p style="FONT-SIZE: 12pt; COLOR: #000000">⒊重复出现的同一主题不能有公共部分。</p>
<p style="FONT-SIZE: 12pt; COLOR: #000000">&#8220;转调&#8221;的意思是主题序列中每个音符都被加上或减去了同一个整数值。给定一段乐曲，计算其中最长主题的长度(即音符数)。</p>
<p style="FONT-SIZE: 12pt; COLOR: #000000">本题时限为1秒钟!</p>
<p style="FONT-SIZE: 12pt; COLOR: #000000">格式<br>PROGRAM NAME: theme<br>INPUT FORMAT<br>输出文件的第一行包含整数N。下面的每一行(最后一行可能除外)包含20个整数，表示音符序列。最后一行可能少于20个音符。</p>
<p style="FONT-SIZE: 12pt; COLOR: #000000">OUTPUT FORMAT<br>输出文件应只含一个整数，即最长主题的长度。如果乐曲中没有主题，那么输出0。</p>
<p style="FONT-SIZE: 12pt; COLOR: #000000">SAMPLE INPUT (file theme.in)<br>30<br>25 27 30 34 39 45 52 60 69 79 69 60 52 45 39 34 30 26 22 18<br>82 78 74 70 66 67 64 60 65 80</p>
<p style="FONT-SIZE: 12pt; COLOR: #000000"><br>SAMPLE OUTPUT (file theme.out)<br>5</p>
<p style="FONT-SIZE: 12pt; COLOR: #000000">(这个长度为5的主题是输入文件中第一行的最后5个音符和第二行开头5个音符)<br></p>
<p style="FONT-SIZE: 12pt; COLOR: #000000"><strong>分析：</strong><br>&nbsp;&nbsp; <span style="COLOR: #ff0000">时间复杂度也只有O(n2)。但是要在对第一种算法比较深入分析的基础上才可以得出。显然，一个序列最多只需要一个匹配序列即可，所以我们只需找到这样两个序列。两层循环，外层循环枚举两个序列开头的位置差（其实也就是每个元素与另一个序列对应元素的位置差），内层循环枚举第一个序列的第一个元素的位置。如果当前位匹配则当前长度加1，否则赋为1。这样，我们可以直接找出合法的序列，并记录最大长度。这种算法抓住了问题的本质，比第一种算法无论在时间上还是编程复杂度上都降低了不少。</span></p>
<p style="FONT-SIZE: 12pt; COLOR: #ff0000">或者动态规划</p>
<p style="FONT-SIZE: 12pt; COLOR: #ff0000">令theme(i,j)表示第一个主题开头为i，第二个主题开头为j所能构成的重复主题的长度</p>
<p style="FONT-SIZE: 12pt; COLOR: #ff0000">那么有转移方程：</p>
<p style="FONT-SIZE: 12pt; COLOR: #ff0000">如果note(i+1)-note(i)=note(j+1)-note(j)，则theme(i,j)=them(i+1,j+1)+1,否则theme(i,j)=1(深刻啊) <br><br><strong>【参考程序】：</strong></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: 宋体; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000"><strong>/*</strong></span><span style="COLOR: #008000"><br><strong>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;theme<br>LANG:&nbsp;C++<br></strong></span><span style="COLOR: #008000"><strong>*/</strong></span><span style="COLOR: #000000"><br><strong>#include&nbsp;</strong></span><strong><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span></strong><span style="COLOR: #000000"><br><strong>#include</strong></span><strong><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span></strong><span style="COLOR: #000000"><br></span><strong><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span></strong><strong><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a[</span><span style="COLOR: #000000">5002</span></strong><strong><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;ans,n;<br></span><span style="COLOR: #0000ff">void</span></strong><strong><span style="COLOR: #000000">&nbsp;work()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">n;&nbsp;i</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;len</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;dis</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">100</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;&nbsp;j</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(a[j]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a[j</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">i]</span><span style="COLOR: #000000">==</span></strong><strong><span style="COLOR: #000000">dis)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(len</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">i)&nbsp;</span><span style="COLOR: #0000ff">break</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;len</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(len</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">)&nbsp;ans</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">max(ans,len);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span></strong><span style="COLOR: #000000"><br><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;len</strong></span><strong><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dis</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a[j]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a[i</span><span style="COLOR: #000000">+</span></strong><strong><span style="COLOR: #000000">j];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">theme.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">theme.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span></strong><strong><span style="COLOR: #000000">n);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span></strong><strong><span style="COLOR: #000000">a[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;work();<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">,ans);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span></strong><span style="COLOR: #000000"><strong>;<br>}</strong></span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/92354.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-08-05 20:48 <a href="http://www.cppblog.com/xiongnanbin/articles/92354.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Starry Night 夜空繁星】</title><link>http://www.cppblog.com/xiongnanbin/articles/92249.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Wed, 05 Aug 2009 01:25:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/92249.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/92249.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/92249.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/92249.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/92249.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt">高高的星空，簇簇闪耀的群星形态万千。一个星座(cluster)是一群连通的星组成的非空集合，所谓连通是指水平，垂直或者对角相邻。一个星座不能是另一个更大星座的一部分。星座可以相似(similar)。如果两个星座有相同的形状，而且包括相同数目的星体，那么不管其方向性如何，就算相似。一般而言，星座可能的方向有八个，如图1所示。<br><img height=166 alt="" src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/Starry-1.gif" width=295 border=0></p>
<p style="FONT-SIZE: 12pt">图1 相似的八个星座<br><br>夜空可以表示为一份天体图(sky map)，它是一个由字符0和1组成的二维矩阵，字符1表示所在的位置有一颗星；字符0表示该位置上没有星。任务给定一份天体图，用同一个小写英文标识(mark)相似的所有星座。相似的星座必须用相同的字母标识，不同的星座表示为不同的字母。标识一个星座，就是将其中各星体对应的字符1替换为相应的小写字母。</p>
<p style="FONT-SIZE: 12pt">INPUT FORMAT<br>文件的前两行分别记录了天体图的宽度W、深度H。而天体图则是由接下来的H行表示，每行包括W个字符。</p>
<p style="FONT-SIZE: 12pt">OUTPUT FORMAT<br>输出文件记录了天体图与文件STARRY.IN相似，不同之处在于，各个星座按照&#8220;任务&#8221;中的要求进行了标识(mark)。<br>SAMPLE INPUT (file starry.in)<br>23<br>15<br>10001000000000010000000<br>01111100011111000101101<br>01000000010001000111111<br>00000000010101000101111<br>00000111010001000000000<br>00001001011111000000000<br>10000001000000000000000<br>00101000000111110010000<br>00001000000100010011111<br>00000001110101010100010<br>00000100110100010000000<br>00010001110111110000000<br>00100001110000000100000<br>00001000100001000100101<br>00000001110001000111000<br><img height=226 alt="" src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/Starry-2.gif" width=323 border=0></p>
<p style="FONT-SIZE: 12pt">SAMPLE OUTPUT (file starry.out)<br>a000a0000000000b0000000<br>0aaaaa000ccccc000d0dd0d<br>0a0000000c000c000dddddd<br>000000000c0b0c000d0dddd<br>00000eee0c000c000000000<br>0000e00e0ccccc000000000<br>b000000e000000000000000<br>00b0f000000ccccc00a0000<br>0000f000000c000c00aaaaa<br>0000000ddd0c0b0c0a000a0<br>00000b00dd0c000c0000000<br>000g000ddd0ccccc0000000<br>00g0000ddd0000000e00000<br>0000b000d0000f000e00e0b<br>0000000ddd000f000eee000</p>
<p style="FONT-SIZE: 12pt">这是上述输入实例的一个可能的结果。请注意，该输出文件对应于下面的天空景象。<br><img height=226 alt="" src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/Starry-3.gif" width=323 border=0></p>
<p style="FONT-SIZE: 12pt">Constraints<br>0 &lt;= W (天体图的宽度) &lt;= 100<br>0 &lt;= H (天体图的深度) &lt;= 100<br>0 &lt;= 星座的数目 &lt;= 500<br>0 &lt;= 不相似的星座数目 &lt;= 26 (a..z)<br>1 &lt;= 各星座包含的星体数目 &lt;= 160 <br><br><br><strong>【参考程序】：</strong></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: Arial; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;starry<br>LANG:&nbsp;C++<br></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br><br></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;node<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;left,top,down,right;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;num;<br>&nbsp;&nbsp;&nbsp;&nbsp;node():left(</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">),top(</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">),down(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">),right(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">),num(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">){}<br>}m[</span><span style="COLOR: #000000">600</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n,h,w;<br></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;s[</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">],C[</span><span style="COLOR: #000000">600</span><span style="COLOR: #000000">];;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;S[</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">],V[</span><span style="COLOR: #000000">600</span><span style="COLOR: #000000">],S2[</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;flood(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">j</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">h</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">j</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">w)</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(s[i][j]</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">)</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;s[i][j]</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">;S[i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">n;<br>&nbsp;&nbsp;&nbsp;&nbsp;flood(i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,n);&nbsp;flood(i,j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,n);<br>&nbsp;&nbsp;&nbsp;&nbsp;flood(i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,j,n);&nbsp;flood(i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,j</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,n);<br>&nbsp;&nbsp;&nbsp;&nbsp;flood(i,j</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,n);&nbsp;flood(i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,j,n);<br>&nbsp;&nbsp;&nbsp;&nbsp;flood(i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,j</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,n);&nbsp;flood(i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,n);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;pretreat()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(S,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(S));<br>&nbsp;&nbsp;&nbsp;&nbsp;n</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;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">h;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;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">w;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">j)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(s[i][j]</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">)flood(i,j,n</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</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">h;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;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">w;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">j)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">S[i][j])</span><span style="COLOR: #0000ff">continue</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;now</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">m[S[i][j]];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;now.num</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">now.top)now.top</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">now.down)now.down</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(j</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">now.left)now.left</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">j;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(j</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">now.right)now.right</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">j;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;maybe(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m[i].num</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">m[j].num)</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m[i].left</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">m[i].right</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">m[j].left</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">m[j].right</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">m[i].top</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">m[i].down</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">m[j].top</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">m[j].down)</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m[i].left</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">m[i].right</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">m[j].top</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">m[j].down</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">m[i].top</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">m[i].down</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">m[j].left</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">m[j].right)</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>}<br><strong><font color=#ff00ff>//每个图形都可以下四种基本图形经过后三种旋转得到，所以只需四种即可</font></strong><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;turn0(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Left,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Right,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Top,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Down)<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">不翻转</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">Top;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">Down;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">Left;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">Right;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">j)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S2[i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">S[i][j];<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;turn1(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Left,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Right,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Top,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Down)<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">左右对称翻转</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">Right</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">Left;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">Top;k</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">Down;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">k)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S2[k][Right</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">S[k][Left</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">i];<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;turn2(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Left,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Right,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Top,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Down)<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">左右对称翻转&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">Down</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">Top;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">Left;k</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">Right;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">k)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S2[Down</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">i][k]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">S[Top</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">i][k];<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;turn3(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Left,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Right,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Top,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Down)<br>{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">中心对称翻转</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">Right</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">Left;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;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">Down</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">Top;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">j)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S2[Down</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">j][Right</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">S[Top</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">j][Left</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">i];<br>}<br></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;exact1(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">m[a].down</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">m[a].top;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;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">m[a].right</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">m[a].left;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">j)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">((a</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">S2[m[a].top</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">i][m[a].left</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">j])</span><span style="COLOR: #000000">^</span><span style="COLOR: #000000">(b</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">S[m[b].top</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">i][m[b].left</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">j]))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>}<br></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;exact2(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">m[a].down</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">m[a].top;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;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">m[a].right</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">m[a].left;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">j)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">((a</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">S2[m[a].top</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">i][m[a].left</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">j])</span><span style="COLOR: #000000">^</span><span style="COLOR: #000000">(b</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">S[m[b].top</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">j][m[b].left</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">i]))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>}<br></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;exact(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m[i].left</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">m[i].right</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">m[j].left</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">m[j].right)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;turn0(m[i].left,m[i].right,m[i].top,m[i].down);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(exact1(i,j))</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;turn1(m[i].left,m[i].right,m[i].top,m[i].down);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(exact1(i,j))</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;turn2(m[i].left,m[i].right,m[i].top,m[i].down);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(exact1(i,j))</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;turn3(m[i].left,m[i].right,m[i].top,m[i].down);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(exact1(i,j))</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(m[i].left</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">m[i].right</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">m[j].top</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">m[j].down)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;turn0(m[i].left,m[i].right,m[i].top,m[i].down);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(exact2(i,j))</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;turn1(m[i].left,m[i].right,m[i].top,m[i].down);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(exact2(i,j))</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;turn2(m[i].left,m[i].right,m[i].top,m[i].down);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(exact2(i,j))</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;turn3(m[i].left,m[i].right,m[i].top,m[i].down);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(exact2(i,j))</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;solve()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;pretreat();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</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">n;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)&nbsp;V[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;c</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</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">n;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(V[i]</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">C[V[i]];&nbsp;</span><span style="COLOR: #0000ff">continue</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">c</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">n;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">j)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(V[j]</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">j)</span><span style="COLOR: #0000ff">continue</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">maybe(i,j))</span><span style="COLOR: #0000ff">continue</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(exact(i,j))&nbsp;V[j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;cout_ans()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">h;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;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">w;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">j)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(S[i][j]</span><span style="COLOR: #000000">==-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;putchar(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;putchar(C[S[i][j]]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;putchar(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">starry.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">starry.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">w,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">h);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</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">h;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,s[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;solve();<br>&nbsp;&nbsp;&nbsp;&nbsp;cout_ans();<br>}<br></span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/92249.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-08-05 09:25 <a href="http://www.cppblog.com/xiongnanbin/articles/92249.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Fencing the Cows 圈奶牛】</title><link>http://www.cppblog.com/xiongnanbin/articles/92005.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Mon, 03 Aug 2009 02:12:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/92005.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/92005.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/92005.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/92005.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/92005.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt">农夫约翰想要建造一个围栏用来围住他的奶牛，可是他资金匮乏。他建造的围栏必须包括他的奶牛喜欢吃草的所有地点。对于给出的这些地点的坐标，计算最短的能够围住这些点的围栏的长度。</p>
<p style="FONT-SIZE: 12pt">格式<br>PROGRAM NAME: fc<br>INPUT FORMAT</p>
<p style="FONT-SIZE: 12pt">输入数据的第一行包括一个整数 N。N（0 &lt;= N &lt;= 10,000）表示农夫约翰想要围住的放牧点的数目。接下来 N 行，每行由两个实数组成，Xi 和 Yi,对应平面上的放牧点坐标（-1,000,000 &lt;= Xi,Yi &lt;= 1,000,000）。数字用小数表示。</p>
<p style="FONT-SIZE: 12pt">OUTPUT FORMAT<br>输出必须包括一个实数，表示必须的围栏的长度。答案保留两位小数。</p>
<p style="FONT-SIZE: 12pt">SAMPLE INPUT (file fc.in)<br>4<br>4 8<br>4 12<br>5 9.3<br>7 8</p>
<p style="FONT-SIZE: 12pt">SAMPLE OUTPUT (file fc.out)<br>12.00<br><br><strong style="COLOR: #ff0000">分析：赤裸裸的凸包问题。<a style="COLOR: #0000ff" href="http://www.cppblog.com/xiongnanbin/articles/92001.html">参考资料</a></strong><br><br><strong>【参考程序】：</strong></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: Arial; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;fc<br>LANG:&nbsp;C++<br></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdlib.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">math.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;point<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;x,y;<br>}&nbsp;stack[</span><span style="COLOR: #000000">10001</span><span style="COLOR: #000000">],p[</span><span style="COLOR: #000000">10001</span><span style="COLOR: #000000">],ST;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n,top;<br></span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;dis(point&nbsp;a1,point&nbsp;a2)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;s</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">pow((a1.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a2.x),</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">pow((a1.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a2.y),</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;sqrt(s);<br>}<br></span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;chaji(point&nbsp;a1,point&nbsp;a2,point&nbsp;a0)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;point&nbsp;x1,x2;<br>&nbsp;&nbsp;&nbsp;&nbsp;x1.x</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a1.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a0.x;&nbsp;x1.y</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a1.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a0.y;<br>&nbsp;&nbsp;&nbsp;&nbsp;x2.x</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a2.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a0.x;&nbsp;x2.y</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a2.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a0.y;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;(x1.x</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">x2.y)</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">(x2.x</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">x1.y);<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;cmp(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">t)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;point&nbsp;i</span><span style="COLOR: #000000">=*</span><span style="COLOR: #000000">(point&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)s,j</span><span style="COLOR: #000000">=*</span><span style="COLOR: #000000">(point&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)t;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;m</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">chaji(i,j,ST);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(m</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(m</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;dis(i,ST)</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">dis(j,ST))&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;init()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;mx</span><span style="COLOR: #000000">=-</span><span style="COLOR: #000000">0xFFFFFFF</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k;<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">n);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%lf%lf</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">p[i].x,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">p[i].y);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(p[i].x</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">mx)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mx</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">p[i].x;&nbsp;ST</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">p[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;p[k]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">p[n];&nbsp;n</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;qsort(p</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,n,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(point),cmp);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;graham()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;m;<br>&nbsp;&nbsp;&nbsp;&nbsp;stack[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ST;&nbsp;stack[top</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">p[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stack[</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">top]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">p[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">chaji(stack[top],stack[top</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">],stack[top</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(m</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stack[top</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">stack[top];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">chaji(stack[top],stack[top</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">],stack[top</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;cout_ans()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;ans</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">top;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">dis(stack[i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">],stack[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">dis(stack[top],stack[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%.2lf\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,ans);<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">fc.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">fc.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;init();<br>&nbsp;&nbsp;&nbsp;&nbsp;graham();<br>&nbsp;&nbsp;&nbsp;&nbsp;cout_ans();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}</span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/92005.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-08-03 10:12 <a href="http://www.cppblog.com/xiongnanbin/articles/92005.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Frame Up 重叠的图像】</title><link>http://www.cppblog.com/xiongnanbin/articles/91952.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Sun, 02 Aug 2009 05:30:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/91952.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/91952.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/91952.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/91952.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/91952.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">看下面的五张 9 x 8 的图像：</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">........&nbsp;&nbsp; ........&nbsp;&nbsp; ........&nbsp;&nbsp; ........&nbsp;&nbsp; .CCC....<br>EEEEEE..&nbsp;&nbsp; ........&nbsp;&nbsp; ........&nbsp;&nbsp; ..BBBB..&nbsp;&nbsp; .C.C....<br>E....E..&nbsp;&nbsp; DDDDDD..&nbsp;&nbsp; ........&nbsp;&nbsp; ..B..B..&nbsp;&nbsp; .C.C....<br>E....E..&nbsp;&nbsp; D....D..&nbsp;&nbsp; ........&nbsp;&nbsp; ..B..B..&nbsp;&nbsp; .CCC....<br>E....E..&nbsp;&nbsp; D....D..&nbsp;&nbsp; ....AAAA&nbsp;&nbsp; ..B..B..&nbsp;&nbsp; ........<br>E....E..&nbsp;&nbsp; D....D..&nbsp;&nbsp; ....A..A&nbsp;&nbsp; ..BBBB..&nbsp;&nbsp; ........<br>E....E..&nbsp;&nbsp; DDDDDD..&nbsp;&nbsp; ....A..A&nbsp;&nbsp; ........&nbsp;&nbsp; ........<br>E....E..&nbsp;&nbsp; ........&nbsp;&nbsp; ....AAAA&nbsp;&nbsp; ........&nbsp;&nbsp; ........<br>EEEEEE..&nbsp;&nbsp; ........&nbsp;&nbsp; ........&nbsp;&nbsp; ........&nbsp;&nbsp; ........</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">现在，把这些图像按照 1—5 的编号从下到上重叠，第 1 张在最下面，第 5 张在最顶端。如果一张图像覆盖了另外一张图像，那么底下的图像的一部分就变得不可见了。我们得到下面的图像：</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .CCC....<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ECBCBB..<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DCBCDB..<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DCCC.B..<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D.B.ABAA<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D.BBBB.A<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DDDDAD.A<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; E...AAAA<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EEEEEE..<br>对于这样一张图像，计算构成这张图像的矩形图像从底部到顶端堆叠的顺序。 </p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">下面是这道题目的规则：</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp; * 矩形的边的宽度为 1 ，每条边的长度都不小于 3 。<br>&nbsp;&nbsp;&nbsp; * 矩形的每条边中，至少有一部分是可见的。注意，一个角同时属于两条边。<br>&nbsp;&nbsp;&nbsp; * 矩形用大写字母表示，并且每个矩形的表示符号都不相同。 </p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">格式<br>PROGRAM NAME：frameup<br>INPUT FORMAT：(file frameup.in)</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">第一行 两个用空格分开的整数：图像高 H (3 &lt;= H &lt;=30) 和图像宽 W (3 &lt;= W &lt;= 30) 。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">第二行到第 H+1 行 H 行，每行 W 个字母。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">OUTPUT FORMAT：(file frameup.out)</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">按照自底向上的顺序输出字母。如果有不止一种情况，按照字典顺序输出每一种情况（至少会有一种合法的顺序）。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">SAMPLE INPUT<br>9 8<br>.CCC....<br>ECBCBB..<br>DCBCDB..<br>DCCC.B..<br>D.B.ABAA<br>D.BBBB.A<br>DDDDAD.A<br>E...AAAA<br>EEEEEE..</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">SAMPLE OUTPUT<br>EDABC</p>
<p style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体"><strong style="FONT-SIZE: 14pt; COLOR: #ff00ff">分析：</strong>&nbsp; <br>&nbsp;&nbsp; 首先，把每个矩形的上下左右边界统统记录下来。这样，沿每一个矩形的边走一遍，就可以知道谁压着它了。用一个数组cover记录谁压着谁。其实就是个有向无回路图。 <br>&nbsp;&nbsp; 然后，拓扑排序。因为是要的所有解，所以要回溯法全找出来。<br>&nbsp;&nbsp; 计算拓扑序列时有两种方法：<br>&nbsp;&nbsp; 1.&#8220;删点法&#8221;，每次删去一个入度为0的点和它出发的所有边。删点的顺序就是一个拓扑序列。<br>&nbsp;&nbsp; 2.把有向图中所有的边反过来，再DFS，遍历完一个结点的子树后输出这个点。不过有个缺点，就是题目要求按字母顺序输出所有解，但这种方法最后还要排序。(我选择的第一种)<br><br><strong>【参考程序】：</strong></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: Arial; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;frameup<br>LANG:&nbsp;C++<br></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdlib.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;up[</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">],down[</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">],left[</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">],right[</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;f[</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">],into[</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">],ans[</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;bo[</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">],cover[</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;a[</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;h,w,num;<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;tuopsort(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(k</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">num</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">num;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%c</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">(ans[i]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">64</span><span style="COLOR: #000000">));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">num;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(into[i]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;into[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">32767</span><span style="COLOR: #000000">;&nbsp;ans[k]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">f[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">num;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(cover[f[j]][f[i]])&nbsp;into[j]</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tuopsort(k</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;into[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">num;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(cover[f[j]][f[i]])&nbsp;into[j]</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">frameup.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">frameup.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">h,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">w);&nbsp;getchar();<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(up,</span><span style="COLOR: #000000">0x7F</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(up));<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(left,</span><span style="COLOR: #000000">0x7F</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(left));<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(down,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(down));<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(right,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(right));<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(bo,</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(bo));<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">h;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">w;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%c</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">a[i][j]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(a[i][j]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #0000ff">continue</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(a[i][j]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">64</span><span style="COLOR: #000000">);&nbsp;bo[k]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">up[k])&nbsp;up[k]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(i</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">down[k])&nbsp;down[k]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(j</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">left[k])&nbsp;left[k]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">j;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(j</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">right[k])&nbsp;right[k]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">j;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getchar();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(cover,</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(cover));<br>&nbsp;&nbsp;&nbsp;&nbsp;num</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;c</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;c</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">26</span><span style="COLOR: #000000">;c</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(bo[c])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;&nbsp;f[num]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">c;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">up[c];i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">down[c];i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;((a[i][left[c]]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">64</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">c)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cover[a[i][left[c]]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">64</span><span style="COLOR: #000000">][c]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;((a[i][right[c]]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">64</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">c)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cover[a[i][right[c]]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">64</span><span style="COLOR: #000000">][c]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">left[c];i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">right[c];i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;((a[up[c]][i]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">64</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">c)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cover[a[up[c]][i]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">64</span><span style="COLOR: #000000">][c]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;((a[down[c]][i]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">64</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">c)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cover[a[down[c]][i]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">64</span><span style="COLOR: #000000">][c]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(into,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(into));<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">num;i</span><span style="COLOR: #000000">++</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;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">num;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(cover[f[i]][f[j]])&nbsp;into[i]</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;tuopsort(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}</span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/91952.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-08-02 13:30 <a href="http://www.cppblog.com/xiongnanbin/articles/91952.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Pollutant Control 追查坏牛奶】</title><link>http://www.cppblog.com/xiongnanbin/articles/91833.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Fri, 31 Jul 2009 09:10:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/91833.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/91833.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/91833.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/91833.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/91833.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt">你第一天接手三鹿牛奶公司就发生了一件倒霉的事情：公司不小心发送了一批有三聚氰胺的牛奶。很不幸，你发现这件事的时候，有三聚氰胺的牛奶已经进入了送货网。这个送货网很大，而且关系复杂。你知道这批牛奶要发给哪个零售商，但是要把这批牛奶送到他手中有许多种途径。送货网由一些仓库和运输卡车组成，每辆卡车都在各自固定的两个仓库之间单向运输牛奶。在追查这些有三聚氰胺的牛奶的时候，有必要保证它不被送到零售商手里，所以必须使某些运输卡车停止运输，但是停止每辆卡车都会有一定的经济损失。你的任务是，在保证坏牛奶不送到零售商的前提下，制定出停止卡车运输的方案，使损失最小。</p>
<p style="FONT-SIZE: 12pt">{批注：先前不知是哪个写了一个要不得的翻译，这才是正常的翻译，读起来也觉得比较健康——Cow-Tsc} {修改下，更现实——pyh119}</p>
<p style="FONT-SIZE: 12pt">格式<br>PROGRAM NAME: milk6<br>INPUT FORMAT:(file milk6.in) </p>
<p style="FONT-SIZE: 12pt">&nbsp; 第一行: 两个整数N(2&lt;=N&lt;=32)、M(0&lt;=M&lt;=1000), N表示仓库的数目，M表示运输卡车的数量。仓库1代 表发货工厂，仓库N代表有三聚氰胺的牛奶要发往的零售商。 第2..M+1行: 每行3个整数Si,Ei,Ci。其中Si,Ei表示这 辆卡车的出发仓库，目的仓库。Ci(0 &lt;= C i &lt;= 2,000,000) 表示让这辆卡车停止运输的损失。</p>
<p style="FONT-SIZE: 12pt"><br>OUTPUT FORMAT:(file milk6.out) </p>
<p style="FONT-SIZE: 12pt">&nbsp; 第1行两个整数c、t,c表示最小的损失，T表示要停止的最少卡车数。接下来t 行表示你要停止哪几条线路。如果有多种方案使损失最小，输出停止的线路最少的方案。如果仍然还有相同的方案，请选择开始输入顺序最小的。</p>
<p style="FONT-SIZE: 12pt">SAMPLE INPUT<br>4 5<br>1 3 100<br>3 2 50<br>2 4 60<br>1 2 40<br>2 3 80 </p>
<p style="FONT-SIZE: 12pt">SAMPLE OUTPUT<br>60 1<br>3<br><br><span style="COLOR: red"><strong style="FONT-SIZE: 14pt; COLOR: #ff00ff">分析：</strong><br>&nbsp;&nbsp;&nbsp;&nbsp; 要用到最小割最大流定理。<br>&nbsp;首先求出最大流，那么最小割的容量就是最大流的流量。然后找有没有容量=最小割容量的&#8220;桥&#8221;（这里的桥就是去掉这条边后，由源点出发无法到达汇点），如果有那么这个桥就是答案。然后对每条容量不大于最小割的边，去掉后求一次最大流（估计这里我的算法太麻烦了）。如果流量的减少量=这条边的容量，那么这条边一定属于最小割。找出这样所有的边后，如果这些边的容量和=最小割容量，那么符合题目条件的最小割已求出。剩下的工作就是搜索了。我用的是枚举每一条满足上述的边。<br><br><strong>对于*1001+1的解释：orz </strong><font color=#000000><a href="http://tjbwyk.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&amp;_c=BlogPart&amp;partqs=cat%3dUSACO"><font color=#000000>P〇〇н</font></a></font><br><font color=#000000>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="FONT-SIZE: 12pt">对于一个网络，已知它的弧的数量不超过1000，那么经过一定的技术处理，直接用基本的网络流算法就能实现了。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在读入每条弧c[i,j]时，将其容量c[i,j]乘以1001加1存到f[i,j]中，即f[i,j]=c[i,j]*1001+1(这里不考虑两条弧连接相同两个结点的情况)，然后就用朴素的方法在f上求最大流得到maxflow。那么真实的最大流就是maxflow div 1001，元素最少最小割的元素个数就是maxflow mod 1001。为什么呢？我试试看能不能稍微讲清楚一点：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先，为什么maxflow div 1001就是原最大流呢？回想一下，每次我们求到一条增广轨后，进行track_back操作时，必然会由已求得的路径上的某条弧的容量，确定这个可行流的流量flow，假设这条弧为&lt;i,j&gt;。那么这条可行流的流量flow1=f[i1,j1]=c[i1,j1]*1001+1。依此类推，会得到flow2=f[i2,j2]=c[i2,j2]*1001+1、flow3=f[i3,j3]=c[i3,j3]*1001+1&#8230;&#8230;最后找到了k条增广轨，得到的最大流maxflow=flow1+flow2+flow3&#8230;&#8230;+flowk=(c[i1,j1]+c[i2,j2]+c[i3,c3]+&#8230;&#8230;+c[ik,jk])*1001+1*k。 （其实，这段叙述很不准确，因为f[i,j]的值在前面找增广轨的过程中，有可能改变，这里只能算是孤立起来辅助理解吧）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显然，k&lt;=1000，当取maxflow div 1001时，得到的就是最大流，因为k在div过程中必然被忽略<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;另一方面，每找到一条增广轨，必然比原有流量*1001多加上一个1（因为flow=f[i,j]=c[i,j]*1001+1，但回过头看看第一行红字，如果两条弧连接了相同两个结点，这里多加的就不是一个1，而是两个1了）。对于每个多加上的1，都是由一条增广轨的某条弧决定的，只要删除这条弧后，这个流就不通了。于是，maxflow mod 1001就是需要删的弧的个数。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 那么为什么这样求到的割集元素最少呢？因为，如果原图存在一个最大流量相等，但割集元素多一个 的情况时，那么在新图中，如果多找了一次增广轨，那么就多加了一个1，会超出已知最大流上限了（不能理解？尽量想象一下嘛，感觉是这样），这样的最大流是求不出来的。求到的自然而然的就是最少的那一个了。</span></font><br></span><br><strong>【参考程序】：</strong></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: Arial; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;milk6<br>LANG:&nbsp;C++<br></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;node<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x,y;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;f;<br>}&nbsp;e[</span><span style="COLOR: #000000">1001</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;c[</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">],c2[</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;queue[</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">],ans[</span><span style="COLOR: #000000">1001</span><span style="COLOR: #000000">],pre[</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;vis[</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n,m;<br></span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;maxf;<br></span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;getmax()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;head,tail,now,p;&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;ss</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,flow;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vis[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;&nbsp;pre[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;queue[</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">;&nbsp;vis[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;head</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">tail</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(head</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">tail)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">bfs&nbsp;find&nbsp;flow</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;now</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">queue[head];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">vis[i]&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;c2[now][i]</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vis[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tail</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;queue[tail]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;&nbsp;pre[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">now;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;head</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">vis[n])&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flow</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0x7FFFFFFF</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">n;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(p</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">change&nbsp;flow</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(flow</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">c2[pre[p]][p])&nbsp;flow</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">c2[pre[p]][p];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">pre[p];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ss</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">flow;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">n;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(p</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c2[pre[p]][p]</span><span style="COLOR: #000000">-=</span><span style="COLOR: #000000">flow;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c2[p][pre[p]]</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">flow;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">pre[p];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;ss;<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">milk6.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">milk6.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">n,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">m);<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(c,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(c));<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;s;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">m;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">e[i].x,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">e[i].y,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">s);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e[i].f</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">)s</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">1001</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c[e[i].x][e[i].y]</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">)s</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">1001</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;memcpy(c2,c,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(c2));<br>&nbsp;&nbsp;&nbsp;&nbsp;maxf</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">getmax();<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%lld&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,maxf</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">1001</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;ans[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">m;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(maxf</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memcpy(c2,c,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(c2));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c2[e[i].x][e[i].y]</span><span style="COLOR: #000000">-=</span><span style="COLOR: #000000">e[i].f;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;now</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">getmax();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(maxf</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">now</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">e[i].f)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c[e[i].x][e[i].y]</span><span style="COLOR: #000000">-=</span><span style="COLOR: #000000">e[i].f;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxf</span><span style="COLOR: #000000">-=</span><span style="COLOR: #000000">e[i].f;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;&nbsp;ans[ans[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,ans[</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;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">ans[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">];i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,ans[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}</span></div>
<p style="FONT-SIZE: 12pt"><br>&nbsp;</p>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/91833.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-07-31 17:10 <a href="http://www.cppblog.com/xiongnanbin/articles/91833.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Shuttle Puzzle 棋盘游戏】</title><link>http://www.cppblog.com/xiongnanbin/articles/91726.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Thu, 30 Jul 2009 09:08:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/91726.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/91726.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/91726.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/91726.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/91726.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 大小为3的棋盘游戏里有3个白色棋子，3个黑色棋子，和一个有7个格子一线排开的木盒子。3个白棋子被放在一头，3个黑棋子被放在另一头，中间的格子空着。初始状态: WWW_BBB 目标状态: BBB_WWW在这个游戏里有两种移动方法是允许的：&nbsp;&nbsp; 1. 你可以把一个棋子移到与它相邻的空格；&nbsp;&nbsp; 2. 你可以把一个棋子跳过一个(仅一个)与它不同色的棋子到...&nbsp;&nbsp;<a href='http://www.cppblog.com/xiongnanbin/articles/91726.html'>阅读全文</a><img src ="http://www.cppblog.com/xiongnanbin/aggbug/91726.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-07-30 17:08 <a href="http://www.cppblog.com/xiongnanbin/articles/91726.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Letter Game 字母游戏 IOI1995】</title><link>http://www.cppblog.com/xiongnanbin/articles/91669.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Thu, 30 Jul 2009 01:48:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/91669.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/91669.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/91669.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/91669.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/91669.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt"><img height=154 alt="" src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/Lgame.gif" width=503 border=0><br>在家里用电视机做字母游戏是很流行的，其中一种玩法是:每一个字母有一个数值与之对应.你收集字母组成一个或多个字以得到尽可能高的得分.除非你已有了 &#8220;找字的方法&#8221;(&#8220;a way with words&#8221;)，你会把你知道的字都试一遍.有时你也许会查阅其拼写，然后计算得分。显然可以用计算机更为准确地完成此任务。上图示出了英文字母及其所对应的值，当给出英文字(word) 的表列及收集的字母时，请找出所能形成的得分最高的字或字对(pairs of words)。</p>
<p style="FONT-SIZE: 12pt">格式<br>PROGRAM NAME: lgame<br>INPUT FORMAT:(file lgame.in)</p>
<p style="FONT-SIZE: 12pt">输入文件lgame.in中有一行由小写字母(`a'到`z')组成的字符串， 这就是收集到字母(就是可以使用的字母)，字符串由至少3个字母至多7个字母(以任意顺序) 组成。</p>
<p style="FONT-SIZE: 12pt">(file <a style="COLOR: #0000ff" href="http://www.cppblog.com/Files/xiongnanbin/lgame.rar">lgame.dict</a>)</p>
<p style="FONT-SIZE: 12pt">词典文件lgame.dict由至多40，000行组成，文件的最后一行有'.' 表示文件的结束。其它各行每一行都是由至少3个小写字母，至多7 个小写字母组成的字符串。文件中的词已按字典顺序排序。</p>
<p style="FONT-SIZE: 12pt">OUTPUT FORMAT:(file lgame.out)</p>
<p style="FONT-SIZE: 12pt">在文件lgame.out的第一行，你的程序应写上最高得分(子任务A).使用上面图形中给出的字母-值对应表。</p>
<p style="FONT-SIZE: 12pt">随后的每一行是由文件lgame.dict中查到的具有这个得分的所有的词和或词对(word pairs)(子任务B)。要利用图中给定的字母的值。</p>
<p style="FONT-SIZE: 12pt">当两个词能够形成 一个组合(具有给定的字母)时，这两个词应该打印到同一行，两个词中间用一个空格隔开。不许重复表示词对，例如'rag prom'和'prom rag'是同样的词对，只输出字典顺序较小的那个。</p>
<p style="FONT-SIZE: 12pt">输出要按照字典顺序排序，如果两个词对第一个单词的顺序相同，则按照第二个单词。</p>
<p style="FONT-SIZE: 12pt">SAMPLE INPUT(file lgame.in)<br>prmgroa</p>
<p style="FONT-SIZE: 12pt">SAMPLE INPUT(file lgame.dict)<br>profile<br>program<br>prom<br>rag<br>ram<br>rom<br>.</p>
<p style="FONT-SIZE: 12pt">SAMPLE OUTPUT<br>24<br>program<br>prom rag<br><br><strong>【参考程序】：<br></strong></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: Arial; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;lgame<br>LANG:&nbsp;C++<br></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">fstream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;val[</span><span style="COLOR: #000000">26</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">{</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</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">6</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">};<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;num[</span><span style="COLOR: #000000">26</span><span style="COLOR: #000000">],temp[</span><span style="COLOR: #000000">26</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;str,data[</span><span style="COLOR: #000000">40001</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n,ans,sum;<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;check(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n1,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n2)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(temp,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(temp));<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">data[n1].length();i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp[data[n1][i]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">data[n2].length();i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp[data[n2][i]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;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">26</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(temp[i]</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">num[i])&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">26</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">temp[i]</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">val[i];<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;ifstream&nbsp;cin1(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">lgame.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;ifstream&nbsp;cin2(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">lgame.dict</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;ofstream&nbsp;cout(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">lgame.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(num,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(num));<br>&nbsp;&nbsp;&nbsp;&nbsp;cin1</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">str;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">str.length();i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;num[str[i]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;n</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;bk;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(cin2</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">str,str</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(temp,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(temp));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;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">str.length();i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;temp[str[i]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bk</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">26</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(temp[i]</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">num[i])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bk</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(bk)&nbsp;data[</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">n]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">str;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;data[</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">n]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">cout&lt;&lt;n&lt;&lt;endl;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check(i,j);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(sum</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">ans)&nbsp;ans</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">sum;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">ans</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check(i,j);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(sum</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">ans)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">data[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(data[j]</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">)&nbsp;cout</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">data[j];<br>&nbsp;&nbsp;&nbsp;&nbsp;&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">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}</span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/91669.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-07-30 09:48 <a href="http://www.cppblog.com/xiongnanbin/articles/91669.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Street Race 街道赛跑】</title><link>http://www.cppblog.com/xiongnanbin/articles/91595.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Wed, 29 Jul 2009 07:37:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/91595.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/91595.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/91595.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/91595.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/91595.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt">图一表示一次街道赛跑的跑道。可以看出有一些路口（用 0 到 N 的整数标号），和连接这些路口的箭头。路口 0 是跑道的起点，路口 N 是跑道的终点。箭头表示单行道。运动员们可以顺着街道从一个路口移动到另一个路口（只能按照箭头所指的方向）。当运动员处于路口位置时，他可以选择任意一条由这个路口引出的街道。<br>
<div align=center src_cetemp="/images/cppblog_com/xiongnanbin/Race.gif"><img height=102 alt="" src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/Race.gif" width=243 border=0></div>
<p>&#160;</p>
<p style="FONT-SIZE: 12pt">图一：有 10 个路口的街道 一个良好的跑道具有如下几个特点：</p>
<p style="FONT-SIZE: 12pt">&nbsp;&nbsp;&nbsp; * 每一个路口都可以由起点到达。<br>&nbsp;&nbsp;&nbsp; * 从任意一个路口都可以到达终点。<br>&nbsp;&nbsp;&nbsp; * 终点不通往任何路口。<br>&nbsp;&nbsp;&nbsp; * 运动员不必经过所有的路口来完成比赛。有些路口却是选择任意一条路线都必须到达的（称为&#8220;不可避免&#8221;的）。在上面的例子中，这些路口是 0，3，6，9。对于给出的良好的跑道，你的程序要确定&#8220;不可避免&#8221;的路口的集合，不包括起点和终点。 </p>
<p style="FONT-SIZE: 12pt">假设比赛要分两天进行。为了达到这个目的，原来的跑道必须分为两个跑道，每天使用一个跑道。第一天，起点为路口 0，终点为一个&#8220;中间路口&#8221;；第二天，起点是那个中间路口，而终点为路口 N。对于给出的良好的跑道，你的程序要确定&#8220;中间路口&#8221;的集合。如果良好的跑道 C 可以被路口 S 分成两部分，这两部分都是良好的，并且 S 不同于起点也不同于终点，同时被分割的两个部分满足下列条件：（1）它们之间没有共同的街道（2）S 为它们唯一的公共点，并且 S 作为其中一个的终点和另外一个的起点。那么我们称 S 为&#8220;中间路口 &#8221;。在例子中只有路口 3 是中间路口。</p>
<p style="FONT-SIZE: 12pt">格式<br>PROGRAM NAME: race3<br>INPUT FORMAT:(file race3.in)</p>
<p style="FONT-SIZE: 12pt">输入文件包括一个良好的跑道，最多有 50 个路口，100 条单行道。</p>
<p style="FONT-SIZE: 12pt">一共有 N+2 行，前面 N+1 行中第 i 行表示以编号为(i-1)的路口作为起点的街道，每个数字表示一个终点。行末用 -2 作为结束。最后一行只有一个数字 -1。</p>
<p style="FONT-SIZE: 12pt">OUTPUT FORMAT:(file race3.out)</p>
<p style="FONT-SIZE: 12pt">你的程序要有两行输出：</p>
<p style="FONT-SIZE: 12pt">第一行包括：跑道中&#8220;不可避免的&#8221;路口的数量，接着是这些路口的序号，序号按照升序排列。</p>
<p style="FONT-SIZE: 12pt">第二行包括：跑道中&#8220;中间路口&#8221;的数量，接着是这些路口的序号，序号按照升序排列。</p>
<p style="FONT-SIZE: 12pt">SAMPLE INPUT<br>1 2 -2<br>3 -2<br>3 -2<br>5 4 -2<br>6 4 -2<br>6 -2<br>7 8 -2<br>9 -2<br>5 9 -2<br>-2<br>-1</p>
<p style="FONT-SIZE: 12pt">SAMPLE OUTPUT<br>2 3 6<br>1 3<br></p>
<p style="FONT-SIZE: 12pt; COLOR: red"><strong style="FONT-SIZE: 14pt; COLOR: #000000">分析(nocow)：</strong></p>
<p style="FONT-SIZE: 12pt; COLOR: red">&nbsp;&nbsp;&nbsp; 1.一道基础的连通分量的图论题。这个题默认了0为起点，N为终点。(如果不放心可以再读入的时候判断起点和终点，即入度为0的点为起点，出度为0的点为终点。) </p>
<p style="FONT-SIZE: 12pt; COLOR: red">&nbsp;&nbsp;&nbsp; 2.该题有两问，第一问很简单，可以尝试去掉每一个点，判断从起点到终点是否有通路，如果没有则该点为&#8220;必经点&#8221;。 </p>
<p style="FONT-SIZE: 12pt">&nbsp;&nbsp;&nbsp; <span style="COLOR: red">3.第二问重点在于理解题意。首先可以确定第二问的解集是第一问的子集，所以我们可以第一问得出的每个点深搜，记录下可以到达的点。然后去掉该点，从起点深搜。如果不存在两次深搜皆可到达的点，就说明它是分割点。</span><br><br><strong>【参考程序】：</strong></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: Arial; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;race3<br>LANG:&nbsp;C++<br></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;map[</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">],must[</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">],mid[</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">short</span><span style="COLOR: #000000">&nbsp;vis[</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;bk;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n;<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;cout_ans()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,must[</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;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">must[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">];i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,must[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,mid[</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;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">mid[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">];i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,mid[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;dfs2(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;s)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(bk&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;vis[s]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;vis[s]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">map[s][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">];i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(vis[map[s][i]]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bk</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfs2(map[s][i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;dfs1(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;s)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(s</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">n)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">map[s][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">];i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(vis[map[s][i]]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vis[map[s][i]]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(dfs1(map[s][i]))&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;work()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;must[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">mid[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(vis,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(vis));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vis[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">vis[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">dfs1(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;must[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;&nbsp;must[must[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bk</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfs2(i);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">bk)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mid[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;&nbsp;mid[mid[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">race3.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">race3.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;n</span><span style="COLOR: #000000">=-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x;<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(map,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(map));<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(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">x),x</span><span style="COLOR: #000000">!=-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;x</span><span style="COLOR: #000000">!=-</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map[n][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;&nbsp;map[n][map[n][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">x;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(x</span><span style="COLOR: #000000">==-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">){&nbsp;n</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;work();<br>&nbsp;&nbsp;&nbsp;&nbsp;cout_ans();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}</span></div>
<br><strong>【参考程序】：<br></strong>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: Arial; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">{<br>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;race3<br>LANG:&nbsp;PASCAL<br>}<br></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;maxn</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">;<br>var&nbsp;contact:array[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">..maxn,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">..maxn]&nbsp;of&nbsp;integer;<br>&nbsp;&nbsp;&nbsp;&nbsp;visit:array[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">..maxn]&nbsp;of&nbsp;shortint;<br>&nbsp;&nbsp;&nbsp;&nbsp;must,middle:array[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">..maxn]&nbsp;of&nbsp;integer;<br>&nbsp;&nbsp;&nbsp;&nbsp;n,x:integer;<br>&nbsp;&nbsp;&nbsp;&nbsp;repeated:boolean;<br>procedure&nbsp;cout_ans;<br>var&nbsp;i:longint;<br>begin<br>&nbsp;&nbsp;&nbsp;write(must[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]);<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;i:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;to&nbsp;must[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000">&nbsp;write(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,must[i]);<br>&nbsp;&nbsp;&nbsp;writeln;<br>&nbsp;&nbsp;&nbsp;write(middle[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]);<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;i:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;to&nbsp;middle[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000">&nbsp;write(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,middle[i]);<br>&nbsp;&nbsp;&nbsp;writeln;<br>end;<br>procedure&nbsp;init;<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp;n:</span><span style="COLOR: #000000">=-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inc(n);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;not&nbsp;eoln&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;read(x);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;((x</span><span style="COLOR: #000000">=-</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">)or(x</span><span style="COLOR: #000000">=-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">))&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readln;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inc(contact[n,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;contact[n,contact[n,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]]:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">x;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(x</span><span style="COLOR: #000000">=-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dec(n);&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>end;<br>function&nbsp;dfs1(v0:integer):boolean;<br>var&nbsp;i:integer;<br>begin<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;v0</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">n&nbsp;then<br>&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfs1:</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;&nbsp;exit;<br>&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;i:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;to&nbsp;contact[v0,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;visit[contact[v0,i]]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[contact[v0,i]]:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;dfs1(contact[v0,i])&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfs1:</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;&nbsp;exit;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;dfs1:</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>end;<br>procedure&nbsp;dfs2(v0:integer);<br>var&nbsp;i:integer;<br>begin<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;repeated&nbsp;then&nbsp;exit;<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;visit[v0]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;then&nbsp;exit;<br>&nbsp;&nbsp;&nbsp;visit[v0]:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;i:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;to&nbsp;contact[v0,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;visit[contact[v0,i]]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;repeated:</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;&nbsp;exit;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfs2(contact[v0,i]);<br>&nbsp;&nbsp;&nbsp;end;<br>end;<br>procedure&nbsp;work;<br>var&nbsp;i:integer;<br>begin<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;i:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;to&nbsp;n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fillchar(visit,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(visit),</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;visit[i]:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;repeated:</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;not&nbsp;dfs1(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inc(must[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]);must[must[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]]:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfs2(i);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;not&nbsp;repeated&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inc(middle[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]);middle[middle[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]]:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;end;<br>end;<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp;assign(input,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">race3.in</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);reset(input);<br>&nbsp;&nbsp;&nbsp;&nbsp;assign(output,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">race3.out</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);rewrite(output);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;not&nbsp;eof&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">writeln(n);</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;work;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout_ans;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;close(input);<br>&nbsp;&nbsp;&nbsp;&nbsp;close(output);<br>end.</span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/91595.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-07-29 15:37 <a href="http://www.cppblog.com/xiongnanbin/articles/91595.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【The Primes 素数方阵】</title><link>http://www.cppblog.com/xiongnanbin/articles/91567.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Wed, 29 Jul 2009 03:02:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/91567.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/91567.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/91567.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/91567.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/91567.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在下面的方格中，每行，每列，以及两条对角线上的数字可以看作是五位的素数。方格中的行按照从左到右的顺序组成一个素数，而列按照从上到下的顺序。两条对角线也是按照从左到右的顺序来组成。+---+---+---+---+---+| 1 | 1 | 3 | 5 | 1 |+---+---+---+---+---+| 3 | 3 | 2 | 0 | 3 |+---+---+---+---+---+| 3 ...&nbsp;&nbsp;<a href='http://www.cppblog.com/xiongnanbin/articles/91567.html'>阅读全文</a><img src ="http://www.cppblog.com/xiongnanbin/aggbug/91567.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-07-29 11:02 <a href="http://www.cppblog.com/xiongnanbin/articles/91567.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Buy Low Buy Lower 逢低吸纳】</title><link>http://www.cppblog.com/xiongnanbin/articles/91518.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Tue, 28 Jul 2009 11:35:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/91518.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/91518.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/91518.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/91518.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/91518.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&#8220;逢低吸纳&#8221;是炒股的一条成功秘诀。如果你想成为一个成功的投资者，就要遵守这条秘诀:</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">"逢低吸纳,越低越买"</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">这句话的意思是：每次你购买股票时的股价一定要比你上次购买时的股价低.按照这个规则购买股票的次数越多越好，看看你最多能按这个规则买几次。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">给定连续的N天中每天的股价。你可以在任何一天购买一次股票，但是购买时的股价一定要比你上次购买时的股价低。写一个程序，求出最多能买几次股票。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">以下面这个表为例, 某几天的股价是:</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">天数 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp; 8&nbsp; 9&nbsp; 10 11 12<br>股价 68 69 54 64 68 64 70 67 78 62 98 87</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">这个例子中, 聪明的投资者(按上面的定义)，如果每次买股票时的股价都比上一次买时低，那么他最多能买4次股票。一种买法如下(可能有其他的买法):</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">天数 2&nbsp; 5&nbsp; 6&nbsp; 10<br>股价 69 68 64 62</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">格式<br>PROGRAM NAME: buylow<br>INPUT FORMAT:(file buylow.in)</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">第1行: N (1 &lt;= N &lt;= 5000), 表示能买股票的天数。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">第2行以下: N个正整数 (可能分多行) ，第i个正整数表示第i天的股价. 这些正整数大小不会超过longint(pascal)/long(c++).</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">OUTPUT FORMAT:(file buylow.out)</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">只有一行，输出两个整数：</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">能够买进股票的天数 长度达到这个值的股票购买方案数量</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">在计算解的数量的时候，如果两个解所组成的字符串相同，那么这样的两个解被认为是相同的（只能算做一个解）。因此，两个不同的购买方案可能产生同一个字符串，这样只能计算一次。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">SAMPLE INPUT<br>12<br>68 69 54 64 68 64 70 67<br>78 62 98 87</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">SAMPLE OUTPUT<br>4 2</p>
<p style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 宋体"><strong style="COLOR: #ff0000">分析：(借鉴于leokan大牛)</strong></p>
<p style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 宋体">首先是第一个输出，求"能够买进股票的天数"也就是子序列长度啦，用O(n^2)就可以求出，很容易：</p>
<p style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 宋体">&nbsp; a表示读入的数据。</p>
<p style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 宋体">&nbsp; 对于f(i)=前i个数中最长不下降子序列长度，则f(i)=max{f(1),f(2),f(3),..,f(i-1)}+1,其中被选中的f(j)满足ai&lt;aj,显然，它满足最优子结构。所以得到状态转移方程f(i)=max{f(j)+1}(j&lt;i,aj&gt;ai)</p>
<p style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 宋体">下界：第1个数的最长下降子序列就是它本身，则f(1)=1。</p>
<p style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 宋体">难就在第二个问题：<br>&nbsp; 原话：&#8220;在计算解的数量的时候，如果两个解所组成的字符串相同，那么这样的两个解被认为是相同的（只能算做一个解）。因此，两个不同的购买方案可能产生同一个字符串，这样只能计算一次。&#8221;</p>
<p style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 宋体">也就是对于数据2 1 1 这种数据它会重复计算2 1（第一个1） 1（第二个1）。</p>
<p style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 宋体">求总数：<br>&nbsp; 对于c(i)=前i个数中最长不下降子序列的个数，可以这样考虑，除去i不谈，那么之前满足最长下降子序列的c(j)=c(i)-1(因为c(j)在c(i)这个序列中，它加上i就是i的最长不下降子序列)所以得到状态转移方程：c(i)=sum(c(j)) (j&lt;i,aj&gt;ai,f(i)=f(j)+1)</p>
<p style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 宋体">如何判重：<br>&nbsp; 观察可能重复的发生情况，对于每一个可能重复的长度为3下降的子序列，它一定是i,j,j(i&gt;j)这种情况，所以可以开一个boolean数组vis记录j是否出现过，若出现了，就不再计算。<br>最终状态转移方程：c(i)=sum(c(j)) (j&lt;i,aj&gt;ai,f(i)=f(j)+1，vis[j]=false)。</p>
<p style="FONT-SIZE: 12pt; COLOR: #000000; FONT-FAMILY: 宋体">最后，开个高精做加法就行了<br><br><br><strong>【参考程序】：</strong></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: Arial; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;buylow<br>LANG:&nbsp;C++<br></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;tot[</span><span style="COLOR: #000000">5001</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">],ans[</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">],f[</span><span style="COLOR: #000000">5001</span><span style="COLOR: #000000">],a[</span><span style="COLOR: #000000">5001</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;vis[</span><span style="COLOR: #000000">20001</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n,maxans;<br>inline&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;MAX(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;x</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">y</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">x:y;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;add(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">b,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">c,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">d)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;cc[</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(cc,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(cc));<br>&nbsp;&nbsp;&nbsp;&nbsp;cc[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">MAX(b[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">],c[</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;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">cc[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">];i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;cc[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b[i]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">c[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">cc[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">];i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cc[i</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">cc[i]</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cc[i]</span><span style="COLOR: #000000">%=</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(cc[cc[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">])&nbsp;cc[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;memcpy(d,cc,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">);<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">buylow.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">buylow.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">n);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">a[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;maxans</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</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">;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(a[i]</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">a[j]&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;f[i]</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">f[j]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">f[j]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxans</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">MAX(maxans,f[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(f[i]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(tot[i],</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(tot[i]));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tot[i][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">以I结尾的不降子序列个数</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tot[i][</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">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">高精度记录</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(vis,</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(vis));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(tot[i],</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(tot[i]));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tot[i][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(f[j]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">f[i]&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">vis[a[j]]&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;a[i]</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">a[j])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(tot[i],tot[j],tot[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vis[a[j]]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(vis,</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(vis));<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(ans,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(ans));<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(f[i]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">maxans&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">vis[a[i]])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(ans,tot[i],ans);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vis[a[i]]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,maxans);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ans[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">];i</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">)&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,ans[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,ans[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}</span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/91518.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-07-28 19:35 <a href="http://www.cppblog.com/xiongnanbin/articles/91518.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Cowcycles 奶牛自行车】</title><link>http://www.cppblog.com/xiongnanbin/articles/91493.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Tue, 28 Jul 2009 07:30:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/91493.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/91493.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/91493.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/91493.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/91493.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">秀&#183;谢夫（小奶牛）在花花公子杂志上中了大奖，于是她从农村搬到了城郊的一座别墅中。可是她还常常怀念乡村的生活，总想回到原来的农村逛逛。为了环保，秀决定骑上为她量身定做的奶牛自行车（特殊的自行车，专门为牛蹄设计）。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">秀大约有一吨重。同样的，秀在普通的奶牛自行车上，要想骑得平平稳稳，也不是一件容易的事。因此，调节奶牛自行车的变速器让秀心力交瘁。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">帮助秀选择她的奶牛自行车前面 F （1 &lt;= F &lt;= 5）个齿轮和后面 R （1 &lt;= R &lt;= 10）个齿轮，使她的 F*R 奶牛自行车符合下面的标准：</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">前面齿轮的型号（齿的数量）必须在给定的范围内。 <br>后面齿轮的型号（齿的数量）必须在给定的范围内。 <br>在每一种齿轮组合中，传动比率就是前面齿轮的齿数除以后面齿轮的齿数所得的商。 <br>最大的传动比率至少是最小的三倍。 <br>齿轮组合（已排好序）相邻两项的差的的方差（见下面的例子） 应该达到最小。 <br>按照下面的公式计算平均数与方差（xi 代表数据） ： <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp; n<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 平均数 = ---&nbsp; SUM xi<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n&nbsp;&nbsp; i=1&nbsp;&nbsp; </p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp; n&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 方差 = ---&nbsp; SUM (xi - 平均数)^2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n&nbsp;&nbsp; i=1&nbsp;&nbsp; </p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">计算并确定最佳齿轮组合（其中 F 个前齿轮，R 个后齿轮），使方差最小（传动比率至少是 3x）。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">格式<br>PROGRAM NAME: cowcycle<br>INPUT FORMAT:(file cowcycle.in)</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">第一行是 F 和 R，表示前齿轮和后齿轮的数量。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">第二行包括 4 个数字：F1，F2（25 &lt;= F1 &lt; F2 &lt;= 80），R1，R2（5 &lt;= R1 &lt; R2 &lt;= 40）。从 F1 到 F2 型号的前齿轮都是可用的；从 R1 到 R2 型号的后齿轮都是可用的。至少会有一组合法的解。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">OUTPUT FORMAT:(file cowcycle.out)</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">在第一行从小到大输出前齿轮的型号，用空格分开。在第二行从小到大输出后齿轮的型号，同样用空格分开。当然，齿轮的齿数一定是整数。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">如果有多个解，输出前齿轮齿数最小的那一个（第一个齿轮齿数最小的，若第一个齿轮齿数相等，输出第二个齿轮齿数最小的&#8230;&#8230;依此类推）。如果所有的前齿轮齿数都相等，照着上面的办法处理后齿轮（其实就是把第一个，第二个&#8230;&#8230;齿轮分别设为第一，第二&#8230;&#8230;个关键字来排序）。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">SAMPLE INPUT<br>2 5<br>39 62 12 28</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">SAMPLE OUTPUT<br>39 53<br>12 13 15 23 27</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">Comment<br>注释:<br>这个问题最大的挑战就是&#8220;读懂题目&#8221;。慢慢读，不要想一步登天。如果你读不懂题目，还是得一遍一遍的把它读进去。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">问题要我们找出&#8220;最佳齿轮组合&#8221;，即传动比率最接近平均数的组合。考虑下面的测试数据：</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">2 5<br>39 62 12 28</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">这意味着有 2 个前齿轮，型号范围在 39..62 ；5个后齿轮，型号范围在 12..28。程序必须检查所有前齿轮组成的有序对（共 62-39+1=24 种齿轮），和所有后齿轮组成的五元组（共 28-12+1=17 种齿轮）。根据组合数学原理，总共有 24!/22!/2! x 17!/5!/12! = 656,880 种可能（我是这么认为的）。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">对于每一种可能，做下面的计算。举个例子来说，对于枚举到的第一种情况：前齿轮是 39 和 40，后齿轮是 12，13，14，15 和 16。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">首先，计算所有可能的传动比率：</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">39/12 = 3.25000000000000000000<br>39/13 = 3.00000000000000000000<br>39/14 = 2.78571428571428571428<br>39/15 = 2.60000000000000000000<br>39/16 = 2.43750000000000000000<br>40/12 = 3.33333333333333333333<br>40/13 = 3.07692307692307692307<br>40/14 = 2.85714285714285714285<br>40/15 = 2.66666666666666666666<br>40/16 = 2.50000000000000000000</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">然后，对它们进行排序：</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">39/16 = 2.43750000000000000000<br>40/16 = 2.50000000000000000000<br>39/15 = 2.60000000000000000000<br>40/15 = 2.66666666666666666666<br>39/14 = 2.78571428571428571428<br>40/14 = 2.85714285714285714285<br>39/13 = 3.00000000000000000000<br>40/13 = 3.07692307692307692307<br>39/12 = 3.25000000000000000000<br>40/12 = 3.33333333333333333333</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">然后，计算差的绝对值：</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">2.43750000000000000000 - 2.50000000000000000000 = 0.06250000000000000000<br>2.50000000000000000000 - 2.60000000000000000000 = 0.10000000000000000000<br>2.60000000000000000000 - 2.66666666666666666666 = 0.06666666666666666666<br>2.66666666666666666666 - 2.78571428571428571428 = 0.11904761904761904762<br>2.78571428571428571428 - 2.85714285714285714285 = 0.07142857142857142857<br>2.85714285714285714285 - 3.00000000000000000000 = 0.14285714285714285715<br>3.00000000000000000000 - 3.07692307692307692307 = 0.07692307692307692307<br>3.07692307692307692307 - 3.25000000000000000000 = 0.17307692307692307693<br>3.25000000000000000000 - 3.33333333333333333333 = 0.08333333333333333333 </p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">然后计算平均数和方差。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">平均数是（我是这么认为的）0.0995370370370370370366666.。方差大约是 0.00129798488416722。 找出使方差最小的齿轮组合。<br><br><br><strong>【参考程序】：</strong></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: Arial; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br>ID:&nbsp;XIONGNA1<br>PROB:&nbsp;cowcycle<br>LANG:&nbsp;C++<br></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;s1[</span><span style="COLOR: #000000">12</span><span style="COLOR: #000000">],s2[</span><span style="COLOR: #000000">12</span><span style="COLOR: #000000">],ans1[</span><span style="COLOR: #000000">12</span><span style="COLOR: #000000">],ans2[</span><span style="COLOR: #000000">12</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;rate[</span><span style="COLOR: #000000">130</span><span style="COLOR: #000000">],diff[</span><span style="COLOR: #000000">130</span><span style="COLOR: #000000">],minvf</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0x7FFFFFFF</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;R,F,F1,F2,R1,R2,cnt;<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;jisuan()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,l;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;sum</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,avg,vf</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,sumf</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,p;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">F;i</span><span style="COLOR: #000000">++</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;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">R;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">)&nbsp;s1[i]</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">s2[j];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l</span><span style="COLOR: #000000">=++</span><span style="COLOR: #000000">k;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(rate[l</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">p)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rate[l]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">rate[l</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rate[l]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">p;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">cnt</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;diff[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">rate[i</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">rate[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">diff[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sumf</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">diff[i]</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">diff[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;avg</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">sum</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">(cnt</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vf</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">sumf</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">sum</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">avg;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(vf</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">minvf)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minvf</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">vf;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memcpy(ans1</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,s1</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">F);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memcpy(ans2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,s2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">R);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;dfs2(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;w)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(k</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">R)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(s1[F]</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s2[R]</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s1[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s2[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">])&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jisuan();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">w;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">(R2</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">(R</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">k));i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s2[k]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfs2(k</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;dfs1(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;w)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(k</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">F)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfs2(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,R1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">w;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">(F2</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">(F</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">k));i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s1[k]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfs1(k</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">cowcycle.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">cowcycle.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">F,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">R);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">F1,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">F2,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">R1,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">R2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">F</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">R;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfs1(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,F1);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">F</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,ans1[i]);<br>&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">,ans1[F]);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">R</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,ans2[i]);<br>&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">,ans2[R]);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}</span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/91493.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-07-28 15:30 <a href="http://www.cppblog.com/xiongnanbin/articles/91493.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【The Perfect Stall 完美的牛栏】</title><link>http://www.cppblog.com/xiongnanbin/articles/91424.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Tue, 28 Jul 2009 02:49:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/91424.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/91424.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/91424.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/91424.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/91424.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt">农夫约翰上个星期刚刚建好了他的新牛棚，他使用了最新的挤奶技术。不幸的是，由于工程问题，每个牛栏都不一样。第一个星期，农夫约翰随便地让奶牛们进入牛栏，但是问题很快地显露出来：每头奶牛都只愿意在她们喜欢的那些牛栏中产奶。上个星期，农夫约翰刚刚收集到了奶牛们的爱好的信息（每头奶牛喜欢在哪些牛栏产奶）。一个牛栏只能容纳一头奶牛，当然，一头奶牛只能在一个牛栏中产奶。</p>
<p style="FONT-SIZE: 12pt">给出奶牛们的爱好的信息，计算最大分配方案。</p>
<p style="FONT-SIZE: 12pt">格式<br>PROGRAM NAME: stall4<br>INPUT FORMAT:(file stall4.in)</p>
<p style="FONT-SIZE: 12pt">第一行 两个整数，N (0 &lt;= N &lt;= 200) 和 M (0 &lt;= M &lt;= 200) 。N 是农夫约翰的奶牛数量，M 是新牛棚的牛栏数量。</p>
<p style="FONT-SIZE: 12pt">第二行到第N+1行 一共 N 行，每行对应一只奶牛。第一个数字 (Si) 是这头奶牛愿意在其中产奶的牛栏的数目 (0 &lt;= Si &lt;= M) 。后面的 Si 个数表示这些牛栏的编号。牛栏的编号限定在区间 (1..M) 中，在同一行，一个牛栏不会被列出两次。</p>
<p style="FONT-SIZE: 12pt">OUTPUT FORMAT:(file stall4.out)</p>
<p style="FONT-SIZE: 12pt">只有一行。输出一个整数，表示最多能分配到的牛栏的数量。</p>
<p style="FONT-SIZE: 12pt">SAMPLE INPUT<br>5 5<br>2 2 5<br>3 2 3 4<br>2 1 5<br>3 1 2 5<br>1 2</p>
<p style="FONT-SIZE: 12pt">SAMPLE OUTPUT<br>4<br><br><strong style="FONT-SIZE: 12pt; COLOR: red">参考资料：<span style="COLOR: #0000ff"><a href="http://www.cppblog.com/Files/xiongnanbin/匈牙利算法(by%20Beyond%20the%20Void).rar"><span style="COLOR: #0000ff">匈牙利算法(by Beyond the Void)</span></a><br></span></strong><br><strong>【参考程序】：</strong></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: Arial; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;stall4<br>LANG:&nbsp;C++<br></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdlib.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;c[</span><span style="COLOR: #000000">201</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">201</span><span style="COLOR: #000000">],link[</span><span style="COLOR: #000000">201</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;vis[</span><span style="COLOR: #000000">201</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n,m,ans;<br></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;Find(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;now)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">c[now][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">];i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">vis[c[now][i]])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vis[c[now][i]]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(link[c[now][i]]</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;Find(link[c[now][i]]))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;link[c[now][i]]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">now;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">stall4.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">stall4.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">n,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">m);<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(c,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(c));<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">c[i][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">c[i][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">];j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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">c[i][j]);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(link,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(link));<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(vis,</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(vis));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(Find(i))&nbsp;ans</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,ans);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}</span></div>
<p style="FONT-SIZE: 12pt"><br>&nbsp;</p>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/91424.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-07-28 10:49 <a href="http://www.cppblog.com/xiongnanbin/articles/91424.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Cryptcowgraphy 解密牛语】</title><link>http://www.cppblog.com/xiongnanbin/articles/91413.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Tue, 28 Jul 2009 01:27:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/91413.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/91413.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/91413.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/91413.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/91413.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt">农民Brown和John的牛们计划协同逃出它们各自的农场。它们设计了一种加密方法用来保护它们的通讯不被他人知道。</p>
<p style="FONT-SIZE: 12pt">如果一头牛有信息要加密，比如"International Olympiad in Informatics"，它会随机地把C，O，W三个字母插到到信息中（其中C在O前面，O在W前面），然后它把C与O之间的文字和 O与W之间的文字的位置换过来。这里是两个例子：</p>
<p style="FONT-SIZE: 12pt">International Olympiad in Informatics<br>-&gt; <br>CnOIWternational Olympiad in Informatics</p>
<p style="FONT-SIZE: 12pt">International Olympiad in Informatics<br>-&gt; <br>International Cin InformaticsOOlympiad W</p>
<p style="FONT-SIZE: 12pt">为了使解密更复杂，牛们会在一条消息里多次采用这个加密方法（把上次加密的结果再进行加密）。一天夜里，John的牛们收到了一条经过多次加密的信息。请你写一个程序判断它是不是这条信息经过加密（或没有加密）而得到的：</p>
<p style="FONT-SIZE: 12pt">Begin the Escape execution at the Break of Dawn</p>
<p style="FONT-SIZE: 12pt">格式<br>PROGRAM NAME:cryptcow<br>INPUT FORMAT:(file cryptcow.in)</p>
<p style="FONT-SIZE: 12pt">一行,不超过75个字符的加密过的信息。</p>
<p style="FONT-SIZE: 12pt">OUTPUT FORMAT:(file cryptcow.out)</p>
<p style="FONT-SIZE: 12pt">一行，两个整数. 如果能解密成上面那条逃跑的信息，第一个整数应当为1，否则为0；如果第一个数为1，则第二个数表示此信息被加密的次数，否则第二个数为0。</p>
<p style="FONT-SIZE: 12pt">SAMPLE INPUT<br>Begin the EscCution at the BreOape execWak of Dawn</p>
<p style="FONT-SIZE: 12pt">SAMPLE OUTPUT<br>1 1<br></p>
<p style="FONT-SIZE: 12pt"><strong style="FONT-SIZE: 14pt; COLOR: red">nocow分析和优化技巧：</strong></p>
<p style="FONT-SIZE: 12pt">&nbsp; 基本的思路很简单：按从小到大的顺序依次找出C,O,W，然后交换中间的两个串并将这三个字符删掉。如此往复直到没有成对的C,O,W，judge一下最后生成的字符串是否是题目所给的串。但是单纯的按上述算法只能通过20%的数据。我们需要进一步优化。</p>
<p style="FONT-SIZE: 12pt; COLOR: red">优化技巧</p>
<p style="FONT-SIZE: 12pt; COLOR: red">&nbsp;&nbsp; 1. 由于添加的COW是一起的，因此给出的字符串的字符个数应该等于47（目标字符串的长度）+3*k。如果不满足就可直接判断无解。<br>&nbsp;&nbsp; 2. 除了COW三个字符外，其他的字符的个数应该和目标串相一致。如果不一致也可直接判断无解。<br>&nbsp;&nbsp; 3. 搜索中间肯定会出现很多相同的情况，因此需要开一个hash来记录搜索到过哪些字符串，每搜索到一个字符串，就判重。如果重复直接剪枝。这里的字符串的hash函数可以采用ELFhash，但由于ELFhash的数值太大，所以用函数值对一个大质数（我用的是99991）取余，这样可以避免hash开得太大，同时又可以减少冲突。<br>&nbsp;&nbsp; 4. 对搜索到的字符串，设不包含COW的最长前缀为n前缀（同样也可以定义n后缀），那么如果n前缀不等于目标串的长度相同的前缀，那么当前字符串一定无解，剪枝。N后缀也可采取相同的判断方法。<br>&nbsp;&nbsp; 5. 一个有解的字符串中，COW三个字母最早出现的应该是C，最后出现的应该是W，如果不满足则剪枝。<br>&nbsp;&nbsp; 6. 当前字符串中任意两个相邻的COW字母中间所夹的字符串一定在目标串中出现过。如果不符合可立即剪枝。<br>&nbsp;&nbsp; 7. 需要优化搜索顺序。经过试验我们可以发现，O的位置对于整个COW至关重要。可以说，O的位置决定了整个串是否会有解。因此，我们在搜索时，应该先枚举O的位置，然后再枚举C和W的位置。其中W要倒序枚举。这样比依次枚举COW至少要快20~30倍。<br>&nbsp;&nbsp; 8. 在判断当前串的子串是否包含在目标串中的时候，可以先做一个预处理：记录每一个字母曾经出现过的位置，然后可以直接枚举子串的第一个字母的位置。这样比用pos要快2倍左右。 </p>
<p style="FONT-SIZE: 12pt; COLOR: red">经过上述优化，程序对于极端数据也可以在1s以内出解。</p>
<p style="FONT-SIZE: 12pt; COLOR: red">其实只用3、4、6、7就可以进1s。 <br><br><br><strong>【参考程序】：//C++打了几十遍的no ac，只能贴个pascal（一定补上）</strong></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: Arial; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">{<br>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;cryptcow<br>LANG:&nbsp;PASCAL<br>}<br>var&nbsp;ss,st:</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;hash:array[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">..</span><span style="COLOR: #000000">50239</span><span style="COLOR: #000000">]&nbsp;of&nbsp;boolean;<br>procedure&nbsp;print(step:integer);<br>begin<br>&nbsp;&nbsp;&nbsp;writeln(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,step);<br>&nbsp;&nbsp;&nbsp;close(output);<br>&nbsp;&nbsp;&nbsp;halt;<br>end;<br>function&nbsp;checkhash(now:</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">):boolean;<br>var&nbsp;g,h,i:longword;<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp;h:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;i:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;to&nbsp;length(now)&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">h&nbsp;shl&nbsp;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;ord(now[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">h&nbsp;and&nbsp;$f0000000;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;g</span><span style="COLOR: #000000">&lt;&gt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;then&nbsp;h:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">h&nbsp;xor&nbsp;(g&nbsp;shr&nbsp;</span><span style="COLOR: #000000">24</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">h&nbsp;and&nbsp;(not&nbsp;g);<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;h:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">h&nbsp;mod&nbsp;</span><span style="COLOR: #000000">50239</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;hash[h]&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hash[h]:</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;checkhash:</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;checkhash:</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>end;<br><br>function&nbsp;check(now:</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">):boolean;<br>var&nbsp;i,j:integer;<br>&nbsp;&nbsp;&nbsp;&nbsp;a:</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">;<br>begin<br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;i:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;to&nbsp;length(now)&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(now[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">C</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)or(now[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">O</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)or(now[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">W</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;j:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;to&nbsp;length(now)&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(now[j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">C</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)or(now[j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">O</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)or(now[j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">W</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">copy(now,i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">''</span><span style="COLOR: #000000">&nbsp;then&nbsp;</span><span style="COLOR: #0000ff">continue</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;j:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;to&nbsp;length(a)&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(a[j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">C</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)or(a[j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">O</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)or(a[j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">W</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete(a,j,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;pos(a,ss)</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check:</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;check:</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>end;<br>procedure&nbsp;search(now:</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">;step:integer);<br>var&nbsp;i,j,k:integer;<br>&nbsp;&nbsp;&nbsp;&nbsp;next&nbsp;:</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">;<br>begin<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;now</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ss&nbsp;then&nbsp;print(step);<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;checkhash(now)&nbsp;then&nbsp;exit;<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;not&nbsp;check(now)&nbsp;then&nbsp;exit;<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;j:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;to&nbsp;length(now)&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;now[j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">O</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;i:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;downto&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;now[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">C</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;k:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">length(now)&nbsp;downto&nbsp;j</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">do</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;now[k]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">W</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;copy(now,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">copy(now,j</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">j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">copy(now,i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">copy(now,k</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;search(next,step</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>end;<br>begin<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">while&nbsp;not&nbsp;eof&nbsp;do<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">begin</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assign(input,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">cryptcow.in</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);reset(input);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assign(output,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">cryptcow.out</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);rewrite(output);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ss:</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">Begin&nbsp;the&nbsp;Escape&nbsp;execution&nbsp;at&nbsp;the&nbsp;Break&nbsp;of&nbsp;Dawn</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readln(st);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fillchar(hash,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(hash),</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;search(st,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writeln(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">0&nbsp;0</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close(output);<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">end;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">end.<br></span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/91413.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-07-28 09:27 <a href="http://www.cppblog.com/xiongnanbin/articles/91413.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Fence Loops 篱笆回路】</title><link>http://www.cppblog.com/xiongnanbin/articles/91362.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Mon, 27 Jul 2009 09:13:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/91362.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/91362.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/91362.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/91362.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/91362.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">农夫布朗的牧场上的篱笆已经失去控制了。它们分成了1~200英尺长的线段。只有在线段的端点处才能连接两个线段，有时给定的一个端点上会有两个以上的篱笆。结果篱笆形成了一张网分割了布朗的牧场。布朗想将牧场恢复原样，出于这个考虑，他首先得知道牧场上哪一块区域的周长最小。布朗将他的每段篱笆从1到N进行了标号（N=线段的总数）。他知道每段篱笆的有如下属性：</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp; * 该段篱笆的长度<br>&nbsp;&nbsp;&nbsp; * 该段篱笆的一端所连接的另一段篱笆的标号<br>&nbsp;&nbsp;&nbsp; * 该段篱笆的另一端所连接的另一段篱笆的标号 </p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">幸运的是，没有篱笆连接它自身。对于一组有关篱笆如何分割牧场的数据，写一个程序来计算出所有分割出的区域中最小的周长。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">例如，标号1~10的篱笆由下图的形式组成（下面的数字是篱笆的标号）：</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1<br>&nbsp; +---------------+<br>&nbsp; |\&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /|<br>&nbsp;2| \7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; / |<br>&nbsp; |&nbsp; \&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&nbsp; |<br>&nbsp; +---+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&nbsp;&nbsp; |6<br>&nbsp; | 8&nbsp; \&nbsp;&nbsp;&nbsp;&nbsp; /10&nbsp; |<br>&nbsp;3|&nbsp;&nbsp;&nbsp;&nbsp; \9&nbsp; /&nbsp;&nbsp;&nbsp;&nbsp; |<br>&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \ /&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>&nbsp; +-------+-------+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">上图中周长最小的区域是由2，7，8号篱笆形成的。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">格式<br>PROGRAM NAME: fence6<br>INPUT FORMAT:(file fence6.in)</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">第1行: N (1 &lt;= N &lt;= 100)</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">第2行到第3*N+1行: 每三行为一组，共N组信息:</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">每组信息的第1行有4个整数: s, 这段篱笆的标号(1 &lt;= s &lt;= N); Ls, 这段篱笆的长度 (1 &lt;= Ls &lt;= 255); N1s (1 &lt;= N1s &lt;= 8) 与本段篱笆的一端所相邻的篱笆的数量; N2s与本段篱笆的另一端所相邻的篱笆的数量。 (1 &lt;= N2s &lt;= 8).</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">每组信息的的第2行有 N1s个整数, 分别描述与本段篱笆的一端所相邻的篱笆的标号。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">每组信息的的第3行有N2s个整数, 分别描述与本段篱笆的另一端所相邻的篱笆的标号。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">OUTPUT FORMAT:(file fence6.out)</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">输出的内容为单独的一行，用一个整数来表示最小的周长。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">SAMPLE INPUT<br>10<br>1 16 2 2<br>2 7<br>10 6<br>2 3 2 2<br>1 7<br>8 3<br>3 3 2 1<br>8 2<br>4<br>4 8 1 3<br>3<br>9 10 5<br>5 8 3 1<br>9 10 4<br>6<br>6 6 1 2 <br>5 <br>1 10<br>7 5 2 2 <br>1 2<br>8 9<br>8 4 2 2<br>2 3<br>7 9<br>9 5 2 3<br>7 8<br>4 5 10<br>10 10 2 3<br>1 6<br>4 9 5</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">SAMPLE OUTPUT<br>12<br><br><span style="COLOR: #ff0000">分析：<br>&nbsp; 把边变成&#8220;点&#8221;。在把&#8220;边&#8221;的长度设定为边两端的&#8220;点&#8221;（既原来的边）的长度的和。</span></p>
<p style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 宋体">&nbsp; 用由floyd算法改进的求最小环的算法求最小环。注意的是枚举&#8220;点&#8221;时，注意&#8220;点&#8221;连接的两&#8220;点&#8221;要是分别连接到该&#8220;点&#8221;代表的边的两个端点。<br>&nbsp; 这个复杂度为O(n^3)。超级快&#8230;&#8230;<br>&nbsp; <br>&nbsp; 把篱笆看成是图的顶点，在建图的时候将每一条边的权值赋为它与相邻篱笆的长度和（也就是说每个顶点引出n1s+n2s条边）。<br>用floyed求最小环的方法求出长度，除以2就是结果。<br><br><strong>【参考程序】：</strong></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: Arial; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;fence6<br>LANG:&nbsp;C++<br></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstdlib</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;len[</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">],sy[</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">],lss[</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">],rss[</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;ls[</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">],rs[</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;temp[</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">],gr[</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n,ans;<br>inline&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;MIN(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(a</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">b)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;b;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;a;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;floyed()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;ii,jj;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;k</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;k</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">lss[k];i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ii</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ls[k][i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(ii</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">k)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">rss[k];j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jj</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">rs[k][j];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(jj</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">k&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;jj</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">ii)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">MIN(ans,gr[ii][jj]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">temp[ii][k]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">temp[k][jj]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(i</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">k)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(j</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">i&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">k)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gr[i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">MIN(gr[i][j],gr[i][k]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">gr[k][j]);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">fence6.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">fence6.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">n);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gr[i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1000000</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;num;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">num,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">len[i],</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">lss[i],</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">rss[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sy[num]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">lss[i];j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">ls[i][j]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">rss[i];j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">rs[i][j]);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">lss[i];j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ls[i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">sy[ls[i][j]];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gr[i][ls[i][j]]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">len[i]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">len[ls[i][j]];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">rss[i];j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs[i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">sy[rs[i][j]];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gr[i][rs[i][j]]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">len[i]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">len[rs[i][j]];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;memcpy(temp,gr,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0xFFFFFFF</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;floyed();<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,ans</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}</span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/91362.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-07-27 17:13 <a href="http://www.cppblog.com/xiongnanbin/articles/91362.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Fence Rails 栅栏的木料】</title><link>http://www.cppblog.com/xiongnanbin/articles/91343.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Mon, 27 Jul 2009 06:55:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/91343.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/91343.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/91343.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/91343.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/91343.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt">农民John准备建一个栅栏来围住他的牧场。他已经确定了栅栏的形状，但是他在木料方面有些问题。当地的杂货储存商扔给John一些木板，而John必须从这些木板中找出尽可能多所需的木料。</p>
<p style="FONT-SIZE: 12pt">当然，John可以切木板。因此，一个9英尺的木板可以切成一个5英尺和一个4英尺的木料 (当然也能切成3个3英尺的，等等)。John有一把梦幻之锯，因此他在切木料时，不会有木料的损失。</p>
<p style="FONT-SIZE: 12pt">所需要的木料规格都已经给定。你不必切出更多木料，那没有用。</p>
<p style="FONT-SIZE: 12pt">格式<br>PROGRAM NAME: fence8<br>INPUT FORMAT:(file fence8.in)</p>
<p style="FONT-SIZE: 12pt">第1行: N (1 &lt;= N &lt;= 50), 表示提供的木板的数目</p>
<p style="FONT-SIZE: 12pt">第2行到第N+1行: N行，每行包括一个整数，表示各个木板的长度。</p>
<p style="FONT-SIZE: 12pt">第N+2行: R (1 &lt;= R &lt;= 1023), 所需木料的数目</p>
<p style="FONT-SIZE: 12pt">第N+3行到第N+R+1行: R行，每行包括一个整数(1 &lt;= ri &lt;= 128)表示所需木料的长度。</p>
<p style="FONT-SIZE: 12pt">OUTPUT FORMAT:(file fence8.out)</p>
<p style="FONT-SIZE: 12pt">只有一行，一个数字，表示能切出的最多的所需木料的数目。当然，并不是任何时候都能切出所有所需木料。</p>
<p style="FONT-SIZE: 12pt">SAMPLE INPUT<br>4<br>30<br>40<br>50<br>25<br>10<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>25<br>24<br>30</p>
<p style="FONT-SIZE: 12pt">SAMPLE OUTPUT<br>7<br><br><span style="FONT-SIZE: 12pt"><strong>借鉴：<a href="http://www.nocow.cn/index.php/USACO/fence8"><span style="COLOR: #0000ff">nocow的分析和优化技巧</span></a></strong><br></span><br><strong>【参考程序】：</strong></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: Arial; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;fence8<br>LANG:&nbsp;C++<br></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n,nr,sumb,ans;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b[</span><span style="COLOR: #000000">51</span><span style="COLOR: #000000">],sum[</span><span style="COLOR: #000000">1024</span><span style="COLOR: #000000">],r[</span><span style="COLOR: #000000">1024</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;cmp(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">t)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=*</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)s,j</span><span style="COLOR: #000000">=*</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)t;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">j;<br>}<br></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;dfsid(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;left,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;m)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;ni,nleft;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(x</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">m;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(b[i]</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">r[x])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b[i]</span><span style="COLOR: #000000">-=</span><span style="COLOR: #000000">r[x];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(b[i]</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">r[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nleft</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">left</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">b[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(nleft</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">sum[ans]</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">sumb)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b[i]</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">r[x];&nbsp;</span><span style="COLOR: #0000ff">continue</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;nleft</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">left;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(r[x]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">r[x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">])&nbsp;ni</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;ni</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(dfsid(nleft,x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,ni))&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b[i]</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">r[x];<br>&nbsp;&nbsp;&nbsp;&nbsp;&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: #0000ff">false</span><span style="COLOR: #000000">;<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">fence8.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">fence8.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">n);<br>&nbsp;&nbsp;&nbsp;&nbsp;sumb</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">b[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sumb</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">b[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;qsort(b</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,n,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">),cmp);<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">nr);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">nr;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">r[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;qsort(r</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,nr,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">),cmp);<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(sum,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(sum));<br>&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">nr;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">nr;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum[i]</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">sum[i</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">r[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(sum[i]</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">sumb)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">dfsid(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,ans,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">))&nbsp;ans</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,ans);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}</span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/91343.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-07-27 14:55 <a href="http://www.cppblog.com/xiongnanbin/articles/91343.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Beef McNuggets 麦香牛块】</title><link>http://www.cppblog.com/xiongnanbin/articles/91306.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Mon, 27 Jul 2009 02:30:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/91306.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/91306.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/91306.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/91306.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/91306.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt">农夫布朗的奶牛们正在进行斗争，因为它们听说麦当劳正在考虑引进一种新产品：麦香牛块。奶牛们正在想尽一切办法让这种可怕的设想泡汤。奶牛们进行斗争的策略之一是&#8220;劣质的包装&#8221;。&#8220;看，&#8221;，奶牛们说，&#8220;如果你只用一次能装3块、6块或者10块的三种包装盒包装麦香牛块，你就不可能满足一次只想买1、 2、4、5、7、8、11、14或者17块麦香牛块的顾客了。劣质的包装意味着劣质的产品。&#8221;</p>
<p style="FONT-SIZE: 12pt">你的任务是帮助这些奶牛。给出包装盒的种类数N(1&lt;=N&lt;=10)和N个代表不同种类包装盒容纳麦香牛块个数的正整数 (1&lt;=i&lt;=256)，输出顾客不能用上述包装盒(每种盒子数量无限)买到麦香牛块的最大块数。如果所有购买方案都能得到满足或者不存在不能买到块数的上限，则输出0。不能买到的最大块数（倘它存在）不超过2,000,000,000。</p>
<p style="FONT-SIZE: 12pt">格式<br>PROGRAM NAME: nuggets<br>INPUT FORMAT:(file nuggets.in)</p>
<p style="FONT-SIZE: 12pt">第1行: 包装盒的种类数N</p>
<p style="FONT-SIZE: 12pt">第2行到N+1行: 每个种类包装盒容纳麦香牛块的个数</p>
<p style="FONT-SIZE: 12pt">OUTPUT FORMAT:(file nuggets.out)</p>
<p style="FONT-SIZE: 12pt">输出文件只有一行数字：顾客不能用包装盒买到麦香牛块的最大块数或0(如果所有购买方案都能得到满足或者顾客不能买到的块数没有上限)。</p>
<p style="FONT-SIZE: 12pt">SAMPLE INPUT<br>3<br>3<br>6<br>10</p>
<p style="FONT-SIZE: 12pt">SAMPLE OUTPUT<br>17<br><br><strong>【参考程序】：</strong></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: Arial; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br>ID:&nbsp;XIONGNNA1<br>PROG:&nbsp;nuggets<br>LANG:&nbsp;C++<br></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">1.如果读入的数的最大公约数大于(&gt;1)1,那麽就是没有解的。<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">2.如果上述的不成立，那麽只要用最大的两个的最小公倍数去填就行啦！<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">3.如果有解那必定是在0--最小功倍数-1之间的。</span><span style="COLOR: #008000"><br></span><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>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a[</span><span style="COLOR: #000000">11</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;bo[</span><span style="COLOR: #000000">65536</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;gcd(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(x</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;y;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;gcd(y</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">x,x);<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;cmp(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">s,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">t)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=*</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)s,j</span><span style="COLOR: #000000">=*</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)t;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">j;<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">nuggets.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">nuggets.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">n);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(n</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">0\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;exit(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">a[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">gcd(k,a[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(k</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">0\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;qsort(a</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,n,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">),cmp);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;m</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a[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">a[n]</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">gcd(a[n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">],a[n])</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">m;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;bo[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bo[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a[i];j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">m;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bo[j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">bo[j]&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;bo[j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a[i]];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(bo[m])&nbsp;m</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,m);<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>}</span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/91306.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-07-27 10:30 <a href="http://www.cppblog.com/xiongnanbin/articles/91306.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Raucous Rockers“破锣摇滚”乐队】</title><link>http://www.cppblog.com/xiongnanbin/articles/91303.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Mon, 27 Jul 2009 01:58:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/91303.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/91303.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/91303.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/91303.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/91303.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt">你刚刚继承了流行的&#8220;破锣摇滚&#8221;乐队录制的尚未发表的N(1 &lt;= N &lt;= 20)首歌的版权。你打算从中精选一些歌曲，发行M(1 &lt;= M &lt;= 20)张CD。每一张CD最多可以容纳T(1 &lt;= T &lt;= 20)分钟的音乐，一首歌不能分装在两张CD中。</p>
<p style="FONT-SIZE: 12pt">不巧你是一位古典音乐迷，不懂如何判定这些歌的艺术价值。于是你决定根据以下标准进行选择：</p>
<p style="FONT-SIZE: 12pt">&nbsp;1.歌曲必须按照创作的时间顺序在CD盘上出现。<br>&nbsp;2.选中的歌曲数目尽可能地多。</p>
<p style="FONT-SIZE: 12pt">格式<br>PROGRAM NAME: rockers<br>INPUT FORMAT:(file rockers.in)</p>
<p style="FONT-SIZE: 12pt">第一行： 三个整数：N, T, M.</p>
<p style="FONT-SIZE: 12pt">第二行： N个整数，分别表示每首歌的长度，按创作时间顺序排列。</p>
<p style="FONT-SIZE: 12pt">OUTPUT FORMAT:(file rockers.out)</p>
<p style="FONT-SIZE: 12pt">一个整数，表示可以装进M张CD盘的乐曲的最大数目。</p>
<p style="FONT-SIZE: 12pt">SAMPLE INPUT<br>4 5 2<br>4 3 4 2</p>
<p style="FONT-SIZE: 12pt">SAMPLE OUTPUT<br>3<br><br><strong style="FONT-SIZE: 12pt">【参考程序】：</strong></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: Arial; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;rockers<br>LANG:&nbsp;C++<br></span><span style="COLOR: #008000">*/</span><span><br>#include&lt;</span><span style="COLOR: #000000">iostream</span><span>&gt;<br>#include&lt;</span><span style="COLOR: #000000">cstring</span><span>&gt;<br>using</span><span style="COLOR: #000000">&nbsp;</span><span>namespace&nbsp;std;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;f[</span><span style="COLOR: #000000">21</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">21</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">21</span><span style="COLOR: #000000">],a[</span><span>21];<br></span><span>int&nbsp;n,t,m;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;MAX(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x,</span><span>int&nbsp;y)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;x</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">y</span><span>?x:y;<br>}<br></span><span>int&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">rockers.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span>",stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">rockers.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span>",stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">n,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">t,</span><span>&amp;m);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span>&amp;a[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(f,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span>sizeof(f));<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span>++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">m;j</span><span>++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;k</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">t;k</span><span>++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(k</span><span>&lt;a[i])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[i][j][k]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">MAX(f[i][j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][t],f[i</span><span style="COLOR: #000000">-</span><span>1][j][k]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[i][j][k]=</span><span style="COLOR: #000000">MAX(f[i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][t],f[i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][j][k</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a[i]]</span><span style="COLOR: #000000">+</span><span>1);<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span>",f[n][m][t]);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span>0;<br>}</span></div>
<p style="FONT-SIZE: 12pt"><br>&nbsp;</p>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/91303.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-07-27 09:58 <a href="http://www.cppblog.com/xiongnanbin/articles/91303.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Electric Fences 电网】</title><link>http://www.cppblog.com/xiongnanbin/articles/91295.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Mon, 27 Jul 2009 01:22:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/91295.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/91295.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/91295.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/91295.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/91295.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt">在本题中，格点是指横纵坐标皆为整数的点。</p>
<p style="FONT-SIZE: 12pt">为了圈养他的牛，农夫约翰建造了一个三角形的电网。他从原点（0,0）牵出一根通电的电线，连接格点[n,m]（0&lt;=n&lt;32000,0&lt;m&lt;32000），再连接格点[p,0]（p&gt;0），最后回到原点。</p>
<p style="FONT-SIZE: 12pt">牛可以在不碰到电网的情况下被放到电网内部的每一个格点上（十分苗条的牛）。如果一个格点碰到了电网，牛绝对不可以被放到该格点之上。那么有多少头牛可以被放到农夫约翰的电网中去呢？</p>
<p style="FONT-SIZE: 12pt">格式<br>PROGRAM NAME: fence9<br>INPUT FORMAT:(file fence9.in)</p>
<p style="FONT-SIZE: 12pt">输入文件只有一行，包含三个用空格隔开的整数：n,m和p。</p>
<p style="FONT-SIZE: 12pt">OUTPUT FORMAT:(file fence9.out)</p>
<p style="FONT-SIZE: 12pt">输出文件只有一行，包含一个整数，代表能被指定的电网包含的牛的数目。</p>
<p style="FONT-SIZE: 12pt">SAMPLE INPUT<br>7 5 10</p>
<p style="FONT-SIZE: 12pt">SAMPLE OUTPUT<br>20<br><img height=328 alt="" src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/tu1.jpg" width=534 border=0><br><br><strong>【参考程序】：</strong></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: Arial; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;fence9<br>LANG:&nbsp;C++<br></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#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>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n,m,p;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">fence9.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">fence9.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">n,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">m,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">p);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;s</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,x1,x2;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;y</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">m</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;y</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(y</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">p)</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">m</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;x2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(y</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">p)</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">m)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">p</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;x2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)floor(y</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">p)</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">(m</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">p);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)floor(y</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">(m</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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">x2</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">x1</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,s);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}</span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/91295.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-07-27 09:22 <a href="http://www.cppblog.com/xiongnanbin/articles/91295.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【American Heritage 美国血统】</title><link>http://www.cppblog.com/xiongnanbin/articles/91273.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Sun, 26 Jul 2009 13:14:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/91273.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/91273.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/91273.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/91273.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/91273.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">农夫约翰非常认真地对待他的奶牛们的血统。然而他不是一个真正优秀的记帐员。他把他的奶牛们的家谱作成二叉树，并且把二叉树以更线性的&#8220;树的中序遍历&#8221;和&#8220;树的前序遍历&#8221;的符号加以记录而不是用图形的方法。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">你的任务是在被给予奶牛家谱的&#8220;树中序遍历&#8221;和&#8220;树前序遍历&#8221;的符号后，创建奶牛家谱的&#8220;树的后序遍历&#8221;的符号。每一头奶牛的姓名被译为一个唯一的字母。（你可能已经知道你可以在知道树的两种遍历以后可以经常地重建这棵树。）显然，这里的树不会有多余26个的顶点。这是在样例输入和样例输出中的树的图形表达方式：</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; / \<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&nbsp;&nbsp; \<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B&nbsp;&nbsp;&nbsp;&nbsp; G<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; / \&nbsp;&nbsp; /<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp; D H<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; / \<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; E&nbsp;&nbsp; F</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">树的中序遍历是打印左子树，根和右子树。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">树的前序遍历是打印根，左子树和右子树。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">树的后序遍历是打印左子树，右子树和根。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">格式<br>PROGRAM NAME: heritage<br>INPUT FORMAT:(file heritage.in)</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">第一行： 树的中序遍历</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">第二行： 同样的树的前序遍历</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">OUTPUT FORMAT:(file heritage.out)</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">单独的一行表示该树的后序遍历。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">SAMPLE INPUT<br>ABEDFCHG<br>CBADEFGH</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">SAMPLE OUTPUT<br>AEFDBHGC<br><br><strong>【参考程序】：<br></strong></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: Arial; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;heritage<br>LANG:&nbsp;C++<br></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;s1,s2,str;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;len1,len2;<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;cal(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x1,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y1,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x2,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y2)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(x2</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">y2)&nbsp;str</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">s2[x2];</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">cout&lt;&lt;s2[x2];</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">x1;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">y1;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(s1[i]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">s2[x2])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(k</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">x1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cal(x1</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,y1,x2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,y2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">s2[x2];</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">cout&lt;&lt;s2[x2];</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(k</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">y1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cal(x1,y1</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,x2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,y2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">s2[x2];</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">cout&lt;&lt;s2[x2];</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cal(x1,k</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,x2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,x2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">(k</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">x1</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cal(k</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,y1,x2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">(k</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">x1</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">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,y2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">s2[x2];</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">cout&lt;&lt;s2[x2];</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">heritage.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">heritage.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;cin</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">s1</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">s2;<br>&nbsp;&nbsp;&nbsp;&nbsp;len1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">s1.length();&nbsp;len2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">s2.length();<br>&nbsp;&nbsp;&nbsp;&nbsp;s1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">s1;&nbsp;s2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">s2;<br>&nbsp;&nbsp;&nbsp;&nbsp;str</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;cal(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,len1,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,len2);<br>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">str</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}</span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/91273.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-07-26 21:14 <a href="http://www.cppblog.com/xiongnanbin/articles/91273.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Closed Fences 闭合的栅栏】</title><link>http://www.cppblog.com/xiongnanbin/articles/91251.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Sun, 26 Jul 2009 09:02:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/91251.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/91251.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/91251.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/91251.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/91251.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">一个闭合的栅栏是平面上的一些不相交的首尾相连的线段形成的多边形，有N个角(顶点) (3 &lt; N &lt; 200)。 顶点不重合，它以逆时针方式以数组{xi, yi}给出(i=1,2,...,N)。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">每一对相邻的顶点都是一条栅栏。因此共有N条栅栏 (定义xN+1=x1, yN+1=y1)。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">这里有一个栅栏的例子和一个点x,y:</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * x3,y3<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x5,y5&nbsp; / \<br>&nbsp;&nbsp; x,y *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp; /&nbsp;&nbsp; \<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; / \ /&nbsp;&nbsp;&nbsp;&nbsp; \<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x6,y6*&nbsp;&nbsp; x4,y4&nbsp;&nbsp;&nbsp;&nbsp; \<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x1,y1*----------------* x2,y2</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">请编写一个程序实现下面的任务:</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp; * 检查输入的顶点列表{xi,yi}, i=1,2,...,N, 判断它是否为一个合法的闭合栅栏。<br>&nbsp;&nbsp;&nbsp; * 找出所有可以被站在点(x,y)处的人所能看到的栅栏(忽略人的高度)，因为有的栅栏会被另外的栅栏所挡住。 </p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">只有当存在从(x,y)发射的一条射线第一个穿过栅栏i时，栅栏i是可以被看见的。如果栅栏是平行于目光的，它并不认为是可以看见的。在上面的例子里，线段[x3,y3]-[x4,y4], [x5,y5]-[x6,y6], [x6-y6]-[x1,y1]是可以被(x,y)看见的。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">格式<br>PROGRAM NAME: fence4<br>INPUT FORMAT:(file fence4.in)</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">第一行: N, 表示闭合栅栏的顶点数。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">第二行: 两个整数x和y，表示观测者的位置。两个整数都是16位的。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">第3到N+2行: 每行一对整数(x,y)表示对应闭合栅栏的第k个顶点的坐标。坐标以逆时针顺序给出。整数绝对值不超过1000。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">OUTPUT FORMAT:(file fence4.out)</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">如果给出的序列不是一个合法的闭合栅栏，那么输出文件只需要输出&#8220;NOFENCE&#8221;。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">栅栏用两端的顶点表示，顶点的输出顺序以输入文件中的顺序为准。把栅栏按照最后一个点在输入文件中的顺序排序。如果两条栅栏的最后一个点是一样的，就以它们第一个点的顺序排序。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">SAMPLE INPUT<br>13<br>5 5<br>0 0<br>7 0<br>5 2<br>7 5<br>5 7<br>3 5<br>4 9<br>1 8<br>2 5<br>0 9<br>-2 7<br>0 3<br>-3 1 </p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">SAMPLE OUTPUT<br>7<br>0 0 7 0<br>5 2 7 5<br>7 5 5 7<br>5 7 3 5<br>-2 7 0 3<br>0 0 -3 1<br>0 3 -3 1<br><br><br>解析：(转载)</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">比较复杂的计算几何，容易疏忽，且对数学功底要求较高。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">首先判断多边形，主要是以下步骤：</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">枚举任意不相邻两条边</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp; &nbsp;1.利用叉积做跨立试验，看是否规范相交。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp; 2.出现叉积为0时立即判断点积的符号，如果点积&lt;=0那么就是非规范相交。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp; 3.如果1和2均不满足就是不相交。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">当不存在不相邻的边相交时就可以肯定这是个闭合多边形。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">然后就是寻找可以观察到的边。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">这里提供一个比较方便的方法：</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">连接观察者与所有点顶点，延长（取很远一点）,然后将这些线绕观察者旋转一个很小的角度（0.0001即可）</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">旋转后的射线可以投射到的边就是可以观察到的。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">对于第二问，我在这里给出一些数学推导：</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">(1)延长的计算公式：</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A------------&gt;B-------------&gt;C</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;已知A(x1,y1) B(x2,y2) 设C(x3,y3)</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 那么AB(x2-x1,y2-y1)&nbsp;&nbsp; AC(x3-x1,y3-y1)&nbsp; </p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因为AB与AC共线 故 (这里k我们定义成一个很大的常量)</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x3-x1=k(x2-x1)&nbsp;&nbsp; =&gt;&nbsp;&nbsp;&nbsp; x3=k(x2-x1)+x1</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y3-y1=k(y2-y1)&nbsp;&nbsp; =&gt;&nbsp;&nbsp;&nbsp; y3=k(y2-y1)+y1</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">(2)旋转后的坐标</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设延长点的坐标为(a,b)，观察者的坐标为(x,y)</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;先将坐标系平移，使观察者在原点处，此时延长点坐标为(a-x,b-y) </p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设这个射线的长度为R那么 R*cos(x)=a-x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; R*sin(x)=b-y</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 旋转k度后设其坐标为(c,d)则</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c=R*cos(x+k)=R*cos(x)*cos(k)-R*sin(x)*sin(k)=cos(k)(a-x)-sin(k)(b-y)</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d=R*sin(x+k)=R*sin(x)*cos(k)+R*cos(x)*sin(k)=cos(k)(b-y)+sin(k)(a-x)将坐标系平移成原状：其旋转点坐标(A,B)为(cos(k)(a-x)-sin(k)(b-y)+x,cos(k)(b-y)+sin(k)(a-x)+y)</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">(3)关于截距</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这里要说的就是，我们要判断旋转后的射线射到哪些边，就是对于每条射线要找到与该射线相交的边中截距最小的那条。因此我们必须用比较简单的方法算出解距。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们这里用到共边定理：在四边形ABCD中，假定对角线AC与BD交于O</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;则BO:OD=S(ABC):S(ADC)</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;考虑到叉积的性质，这里可以转化为BO:OD=(ABxBC):(ADxDC)&nbsp; </p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (这里注意叉积的符号问题，如果出现比值为负要及时纠正顺序) </p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 回到本题中，求射线的截距，我们将射线与边看成上面四边形的两条对角线(BD是射线B是观察者)。</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后先用两点间的距离公式求出射线的长度d，接着算出上述两个叉积k1,k2&nbsp; (k1*k2&gt;0)</p>
<p style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 那么这个截距BO=d*k1/(k1+k2)<br><br><br><strong>【参考程序】：</strong></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: Arial; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;fence4<br>LANG:&nbsp;C++<br></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#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>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;k&nbsp;1000</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;POINT<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;x;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;y;<br>}&nbsp;v[</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">],vv[</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;EDGE<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;POINT&nbsp;a;<br>&nbsp;&nbsp;&nbsp;&nbsp;POINT&nbsp;b;<br>}&nbsp;e[</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;hash[</span><span style="COLOR: #000000">1000</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">};<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;n;<br></span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;x,y;<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;read()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i;<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">n);&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%lf%lf</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">x,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">y);<br>&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">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%lf%lf</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">v[i].x,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">v[i].y);<br>&nbsp;&nbsp;&nbsp;&nbsp;e[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">].a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">v[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];e[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">].b</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">v[n];<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e[i].a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">v[i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e[i].b</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">v[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;cp(</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;x1,</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;y1,</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;x2,</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;y2)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;x1</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">y2</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">x2</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">y1;<br>}<br></span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;dp(</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;x1,</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;y1,</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;x2,</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;y2)<br>{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;x1</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">x2</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">y1</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">y2;<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;between(POINT&nbsp;a,EDGE&nbsp;b)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&lt;-----.(a)-------&gt;&nbsp;&nbsp;&nbsp;&nbsp;点积&lt;=0&nbsp;在线上<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;0&nbsp;不在线上&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;返回值&nbsp;0不在线上&nbsp;1在顶点上&nbsp;2在中间&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;x1,x2,y1,y2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">b.a.x;&nbsp;y1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">b.a.y;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">b.b.x;&nbsp;y2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">b.b.y;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dp(x1,y1,x2,y2)</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dp(x1,y1,x2,y2)</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dp(x1,y1,x2,y2)</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;cross(EDGE&nbsp;a,EDGE&nbsp;b)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;x1,y1,x2,y2,x3,y3;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;flag1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,flag2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">相交类型:&nbsp;0:不相交&nbsp;1:规范相交&nbsp;2:不规范相交&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">跨立实验1：&nbsp;b.a&nbsp;-----\(a)-----b.b</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a.b.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a.a.x;&nbsp;y1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a.b.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a.a.y;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">向量&nbsp;a&nbsp;.b----&gt;a.a</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b.a.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a.a.x;&nbsp;y2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b.a.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a.a.y;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">跨立向量b.a--&gt;a.a&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x3</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b.b.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a.a.x;&nbsp;y3</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b.b.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a.a.y;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">跨立向量b.b--&gt;a.a</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(cp(x3,y3,x1,y1)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">cp(x2,y2,x1,y1)</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;flag1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(cp(x3,y3,x1,y1)</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(between(b.b,a))&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(cp(x2,y2,x1,y1)</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(between(b.a,a))&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">跨立实验2：&nbsp;a.a&nbsp;-----\(b)-----a.b</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b.b.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">b.a.x;&nbsp;y1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b.b.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">b.a.y;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">向量&nbsp;b.b----&gt;b.a</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a.a.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">b.a.x;&nbsp;y2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a.a.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">b.a.y;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">跨立向量a.a--&gt;b.a&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x3</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a.b.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">b.a.x;&nbsp;y3</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a.b.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">b.a.y;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">跨立向量a.b--&gt;b.a</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(cp(x3,y3,x1,y1)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">cp(x2,y2,x1,y1)</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;&nbsp;flag2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(cp(x3,y3,x1,y1)</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(between(a.b,b))&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(cp(x2,y2,x1,y1)</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(between(a.a,b))&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(flag1</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">flag2)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;isnext(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(a</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">n)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(b</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">n)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(a</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">a)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(a</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">b)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;check()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,j;<br>&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">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(isnext(i,j))&nbsp;</span><span style="COLOR: #0000ff">continue</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(cross(e[i],e[j]))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">NOFENCE\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;dis(POINT&nbsp;a,EDGE&nbsp;b)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;x1,y1,x2,y2,x3,y3,x4,y4;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;d;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;k1,k2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b.a.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">x;&nbsp;y1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b.a.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">y;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b.b.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">x;&nbsp;y2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b.b.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">y;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x3</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b.a.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a.x;&nbsp;y3</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b.a.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a.y;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x4</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b.b.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a.x;&nbsp;y4</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b.b.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">a.y;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">cp(x1,y1,x2,y2);&nbsp;k2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">cp(x4,y4,x3,y3);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">sqrt((a.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">x)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(a.x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">x)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">(a.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">y)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(a.y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">y));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">d</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(k1</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">(k1</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">k2));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;d;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;ray()</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">主要算法流程：投影--〉旋转--〉取最小截距&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,j,op;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;min</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">99999999</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;c,s;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">cos(</span><span style="COLOR: #000000">0.0001</span><span style="COLOR: #000000">);s</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">sin(</span><span style="COLOR: #000000">0.0001</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EDGE&nbsp;temp;<br>&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">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vv[i].x</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">k</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(v[i].x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">x)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">x;vv[i].y</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">k</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(v[i].y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">y)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">y;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vv[i].x</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">c</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(vv[i].x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">x)</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">s</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(vv[i].y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">y)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">x;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vv[i].y</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">c</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(vv[i].y</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">y)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">s</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(vv[i].x</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">x)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">y;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">投影且旋转</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;min</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">99999999</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;op</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.a.x</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">x;&nbsp;temp.a.y</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">y;&nbsp;temp.b</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">vv[i];<br>&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">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(cross(temp,e[j])</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(dis(vv[i],e[j])</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">min)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;op</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">j;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;min</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">dis(vv[i],e[j]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hash[op]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;print()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,sum</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(hash[i])&nbsp;sum</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,sum);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(hash[i])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%.lf&nbsp;%.lf&nbsp;%.lf&nbsp;%.lf\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,e[i].a.x,e[i].a.y,e[i].b.x,e[i].b.y);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(hash[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%.lf&nbsp;%.lf&nbsp;%.lf&nbsp;%.lf\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,e[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">].a.x,e[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">].a.y,e[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">].b.x,e[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">].b.y);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(hash[i])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%.lf&nbsp;%.lf&nbsp;%.lf&nbsp;%.lf\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,e[i].a.x,e[i].a.y,e[i].b.x,e[i].b.y);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">fence4.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">fence4.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;read();<br>&nbsp;&nbsp;&nbsp;&nbsp;check();<br>&nbsp;&nbsp;&nbsp;&nbsp;ray();<br>&nbsp;&nbsp;&nbsp;&nbsp;print();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}<br></span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/91251.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-07-26 17:02 <a href="http://www.cppblog.com/xiongnanbin/articles/91251.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【A Game 游戏】</title><link>http://www.cppblog.com/xiongnanbin/articles/91250.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Sun, 26 Jul 2009 07:57:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/91250.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/91250.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/91250.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/91250.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/91250.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt">有如下一个双人游戏:N(2 &lt;= N &lt;= 100)个正整数的序列放在一个游戏平台上，两人轮流从序列的两端取数，取数后该数字被去掉并累加到本玩家的得分中，当数取尽时，游戏结束。以最终得分多者为胜。</p>
<p style="FONT-SIZE: 12pt">编一个执行最优策略的程序，最优策略就是使自己能得到在当前情况下最大的可能的总分的策略。你的程序要始终为两位玩家执行最优策略。</p>
<p style="FONT-SIZE: 12pt">格式<br>PROGRAM NAME: game1<br>INPUT FORMAT:(file game1.in)</p>
<p style="FONT-SIZE: 12pt">第一行: 正整数N, 表示序列中正整数的个数。</p>
<p style="FONT-SIZE: 12pt">第二行至末尾: 用空格分隔的N个正整数（大小为1-200）。</p>
<p style="FONT-SIZE: 12pt">OUTPUT FORMAT:(file game1.out)</p>
<p style="FONT-SIZE: 12pt">只有一行，用空格分隔的两个整数: 依次为玩家一和玩家二最终的得分。</p>
<p style="FONT-SIZE: 12pt">SAMPLE INPUT<br>6 <br>4 7 2 9 5 2</p>
<p style="FONT-SIZE: 12pt">SAMPLE OUTPUT<br>18 11<br><br><strong style="FONT-SIZE: 12pt">解析： <a href="http://www.nocow.cn/index.php/USACO/game1"><span style="COLOR: #0000ff">nocow的解析和CODE</span></a></strong><br></p>
<strong>【参考程序】：<br></strong>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: Arial; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;game1<br>LANG:&nbsp;C++<br></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a[</span><span style="COLOR: #000000">201</span><span style="COLOR: #000000">],f[</span><span style="COLOR: #000000">201</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">201</span><span style="COLOR: #000000">],sum[</span><span style="COLOR: #000000">201</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">201</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n;<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;DP()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum[i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">sum[i][j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">a[j];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">max(sum[i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][j]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">a[i]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">f[i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][j],sum[i][j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">a[j]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">f[i][j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">game1.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">game1.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">n);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">a[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum[i][i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a[i];&nbsp;f[i][i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;DP();<br>&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">,f[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][n],sum[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][n]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">f[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][n]);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}</span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/91250.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-07-26 15:57 <a href="http://www.cppblog.com/xiongnanbin/articles/91250.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Camelot 亚瑟王的宫殿】</title><link>http://www.cppblog.com/xiongnanbin/articles/91244.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Sun, 26 Jul 2009 06:35:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/91244.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/91244.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/91244.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/91244.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/91244.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt">很久以前，亚瑟王和他的骑士习惯每年元旦去庆祝他们的友谊。为了纪念上述事件，我们把这些是看作是一个有一人玩的棋盘游戏。有一个国王和若干个骑士被放置在一个由许多方格组成的棋盘上，没有两个骑士在同一个方格内。</p>
<p style="FONT-SIZE: 12pt">这个例子是标准的8*8棋盘<br><img height=206 alt="" src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/q.jpg" width=226 border=0></p>
<p style="FONT-SIZE: 12pt">国王可以移动到任何一个相邻的方格，从 到 前提是他不掉出棋盘之外。<br><img height=69 alt="" src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/king.jpg" width=103 border=0></p>
<p style="FONT-SIZE: 12pt">一个骑士可以从 移动到 (走&#8220;日&#8221;字形） 但前提是他不掉出棋盘之外。<br><img height=130 alt="" src="http://www.cppblog.com/images/cppblog_com/xiongnanbin/qi.jpg" width=167 border=0></p>
<p style="FONT-SIZE: 12pt">在游戏中，玩家可在每个方格上放不止一个棋子，假定方格足够大，任何棋子都不会阻碍到其他棋子正常行动。</p>
<p style="FONT-SIZE: 12pt">玩家的任务就是把所有的棋子移动到同一个方格里——用最小的步数。为了完成这个任务，他必须按照上面所说的规则去移动棋子。另外，玩家可以选择一个骑士跟国王从他们两个相遇的那个点开始一起行动，这时他们按照骑士的行动规则行动，其他的单独骑士则自己一直走到集中点。骑士和国王一起走的时候，只算一个人走的步数。</p>
<p style="FONT-SIZE: 12pt">写一个程序去计算他们集中在一起的最小步数，而且玩家必须自己找出这个集中点。当然，这些棋子可以在棋盘的任何地方集合。</p>
<p style="FONT-SIZE: 12pt">格式<br>PROGRAM NAME: camelot<br>INPUT FORMAT:(file camelot.in)</p>
<p style="FONT-SIZE: 12pt">第一行： 两个用空格隔开的整数：R,C 分别为棋盘行和列的长。不超过26列，30行。</p>
<p style="FONT-SIZE: 12pt">第二行..结尾： 输入文件包含了一些有空格隔开的字母/数字对，一行有一个或以上。第一对为国王的位置，接下来是骑士的位置。可能没有骑士，也可能整个棋盘都是骑士。行从1开始，列从大写字母A开始。</p>
<p style="FONT-SIZE: 12pt">OUTPUT FORMAT:(file camelot.out)</p>
<p style="FONT-SIZE: 12pt">单独一行表示棋子集中在一个方格的最小步数。</p>
<p style="FONT-SIZE: 12pt">SAMPLE INPUT<br>8 8<br>D 4<br>A 3 A 8<br>H 1 H 8</p>
<p style="FONT-SIZE: 12pt">国王位置在D4。一共有四个骑士，位置分别是A3,A8,H1和H8。</p>
<p style="FONT-SIZE: 12pt">SAMPLE OUTPUT<br>10</p>
<p style="FONT-SIZE: 12pt">SAMPLE OUTPUT ELABORATION</p>
<p style="FONT-SIZE: 12pt">他们集中在B5。 <br>骑士1: A3 - B5 (1步)&nbsp; <br>骑士2: A8 - C7 - B5 (2步) <br>骑士3: H1 - G3 - F5 - D4 (此时国王开始与这个骑士一起走) - B5 (4步) <br>骑士4: H8 - F7 - D6 - B5 (3步) <br>1 + 2 + 4 + 3 = 10步<br><br><strong style="FONT-SIZE: 12pt">解析： <a href="http://www.nocow.cn/index.php/USACO/camelot"><strong style="FONT-SIZE: 12pt; COLOR: #0000ff">nocow 的分析和题解</strong><br></a></strong><br><strong>【参考程序】：</strong></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: Arial; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;camelot<br>LANG:&nbsp;C++<br></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;dir[</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">{{</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">},{</span><span style="COLOR: #000000">2</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">,</span><span style="COLOR: #000000">2</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">1</span><span style="COLOR: #000000">},<br>{</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</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">,</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">,</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">,</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">}};<br></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;data<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x,y,d;<br>}list[</span><span style="COLOR: #000000">10000</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;use[</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x[</span><span style="COLOR: #000000">1001</span><span style="COLOR: #000000">],y[</span><span style="COLOR: #000000">1001</span><span style="COLOR: #000000">],d[</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n,m,kx,ky,tt</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,res</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2147483647</span><span style="COLOR: #000000">;<br>inline&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;MAX(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(a</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">b)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;a;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;b;<br>}<br>inline&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;MIN(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(a</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">b)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;b;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;a;<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">camelot.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">camelot.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;cy;<br>&nbsp;&nbsp;&nbsp;&nbsp;cin</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">m;&nbsp;cin</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">cy</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">kx;<br>&nbsp;&nbsp;&nbsp;&nbsp;ky</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">cy</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">A</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;tt</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(cin</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">cy</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">x[tt])<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y[tt]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">cy</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">A</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tt</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</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;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">m;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;k</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;k</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;t</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;t</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">m;t</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d[i][j][k][t]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">10000000</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</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;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">m;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(list,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(list));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(use,</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(use));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;head</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,tail</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">].x</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;&nbsp;list[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">].y</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">j;&nbsp;use[i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d[i][j][i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(head</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">tail)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;k</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">;k</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;xx</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">list[head].x</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">dir[k][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">],yy</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">list[head].y</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">dir[k][</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(((xx</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">(xx</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n)</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">(yy</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">(yy</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">m)</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">use[xx][yy])))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tail</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list[tail].x</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">xx;&nbsp;list[tail].y</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">yy;&nbsp;d[i][j][xx][yy]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">list[head].d</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list[tail].d</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">d[i][j][xx][yy];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;use[xx][yy]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;head</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">m;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;minn</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2147483647</span><span style="COLOR: #000000">,sum</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;k</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">tt;k</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">d[i][j][x[k]][y[k]];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(sum</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">MAX(abs(kx</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">i),abs(ky</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">j))</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">minn)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minn</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">sum</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">MAX(abs(kx</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">i),abs(ky</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">j));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;xx</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">MAX(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,kx</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);xx</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">MIN(n,kx</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);xx</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;yy</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">MAX(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,ky</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);yy</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">MIN(m,ky</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);yy</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;k</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">tt;k</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;now</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">sum</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">d[i][j][x[k]][y[k]]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">d[x[k]][y[k]][xx][yy]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">d[xx][yy][i][j]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">MAX(abs(kx</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">xx),abs(ky</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">yy));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(now</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">minn)&nbsp;minn</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">now;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(minn</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">res)&nbsp;res</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">minn;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">res</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}</span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/91244.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-07-26 14:35 <a href="http://www.cppblog.com/xiongnanbin/articles/91244.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【Home on the Range 家的范围】</title><link>http://www.cppblog.com/xiongnanbin/articles/91197.html</link><dc:creator>开拓者</dc:creator><author>开拓者</author><pubDate>Sun, 26 Jul 2009 02:17:00 GMT</pubDate><guid>http://www.cppblog.com/xiongnanbin/articles/91197.html</guid><wfw:comment>http://www.cppblog.com/xiongnanbin/comments/91197.html</wfw:comment><comments>http://www.cppblog.com/xiongnanbin/articles/91197.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiongnanbin/comments/commentRss/91197.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiongnanbin/services/trackbacks/91197.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt">农民约翰在一片边长是N (2 &lt;= N &lt;= 250)英里的正方形牧场上放牧他的奶牛。(因为一些原因，他的奶牛只在正方形的牧场上吃草。)遗憾的是,他的奶牛已经毁坏一些土地。( 一些1平方英里的正方形)</p>
<p style="FONT-SIZE: 12pt">农民约翰需要统计那些可以放牧奶牛的正方形牧场(至少是2x2的,在这些较大的正方形中没有一个点是被破坏的，也就是说，所有的点都是&#8220;1&#8221;)。</p>
<p style="FONT-SIZE: 12pt">你的工作要在被供应的数据组里面统计所有不同的正方形放牧区域(&gt;=2x2)的个数。当然，放牧区域可能是重叠.</p>
<p style="FONT-SIZE: 12pt">格式<br>PROGRAM NAME: range<br>INPUT FORMAT:(file range.in)</p>
<p style="FONT-SIZE: 12pt">第 1 行:N,牧区的边长。</p>
<p style="FONT-SIZE: 12pt">第 2 到　n+1行:N个没有空格分开的字符。</p>
<p style="FONT-SIZE: 12pt">0 表示 "那一个区段被毁坏了";1 表示 " 准备好被吃"。</p>
<p style="FONT-SIZE: 12pt">OUTPUT FORMAT:(file range.out)</p>
<p style="FONT-SIZE: 12pt">输出那些存在的正方形的边长和个数，一种一行。</p>
<p style="FONT-SIZE: 12pt">SAMPLE INPUT<br>6<br>101111<br>001111<br>111111<br>001111<br>101101<br>111001</p>
<p style="FONT-SIZE: 12pt">SAMPLE OUTPUT<br>2 10<br>3 4<br>4 1<br><br>分析:<br>&nbsp; 这道题可以动态规划。二维的动态规划。</p>
<p style="FONT-SIZE: 12pt">状态定义：G[i][j]为以(i,j)为左上角顶点的正方形的最大边长。</p>
<p style="FONT-SIZE: 12pt">边界条件：G[i][j]为初始读入的矩阵。</p>
<p style="FONT-SIZE: 12pt">状态转移方程： G[i][j]=min{ G[i+1][j] , G[i][j+1] , G[i+1][j+1] } + 1;</p>
<p style="FONT-SIZE: 12pt">解析： <br>G[i+1][j] , G[i][j+1] , G[i+1][j+1]分别为(i,j)向下、向右、向右下一格的状况。在(n-1,n-1)当且仅当三者都为1的时候，正方形才能扩充。从最右下向上，依次扩充即可。<br><br><strong>【参考程序】：</strong></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 12pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: Arial; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br>ID:&nbsp;XIONGNA1<br>PROG:&nbsp;range<br>LANG:&nbsp;C++<br></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;map[</span><span style="COLOR: #000000">251</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">251</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n;<br></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;expand(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(map[x</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][y]&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;map[x][y</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;map[x</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">][y</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>}<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">range.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">range.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,stdout);<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">n);&nbsp;getchar();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;ch;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%c</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">ch);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(ch</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">)&nbsp;map[i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;map[i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getchar();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;sum;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;s</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;s</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n;s</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">s</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">s</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map[i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">map[i][j]&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;expand(i,j);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(map[i][j])&nbsp;sum</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(sum</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&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">,s,sum);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(sum</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<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>}</span></div>
<img src ="http://www.cppblog.com/xiongnanbin/aggbug/91197.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiongnanbin/" target="_blank">开拓者</a> 2009-07-26 10:17 <a href="http://www.cppblog.com/xiongnanbin/articles/91197.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>