﻿<?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++博客-NARUTOACM-随笔分类-POJ解题报告</title><link>http://www.cppblog.com/NARUTOACM/category/11681.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 09 Apr 2010 15:56:06 GMT</lastBuildDate><pubDate>Fri, 09 Apr 2010 15:56:06 GMT</pubDate><ttl>60</ttl><item><title>POJ3347 线段相交+线段树</title><link>http://www.cppblog.com/NARUTOACM/archive/2010/04/09/112108.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Fri, 09 Apr 2010 13:35:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2010/04/09/112108.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/112108.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2010/04/09/112108.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/112108.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/112108.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 前几个礼拜看了这题，感觉很难，没做，今天把它A了！题目地址：http://162.105.81.212/JudgeOnline/problem?id=3347描述下这题的话大概就是线段相交+线段树。此题是扩大数据化成整型处理的典型，把边长乘以2&#8730;2，新边长为2&#8730;2*a。可得正方形对角线长度为4a(扩大&#8730;2倍应该也可以，但是我的程序改成扩大&#8730...&nbsp;&nbsp;<a href='http://www.cppblog.com/NARUTOACM/archive/2010/04/09/112108.html'>阅读全文</a><img src ="http://www.cppblog.com/NARUTOACM/aggbug/112108.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2010-04-09 21:35 <a href="http://www.cppblog.com/NARUTOACM/archive/2010/04/09/112108.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ2352解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2010/03/21/110188.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Sat, 20 Mar 2010 16:41:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2010/03/21/110188.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/110188.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2010/03/21/110188.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/110188.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/110188.html</trackback:ping><description><![CDATA[<p class=pst>Problem 2352 Stars<br><br>Description</p>
<div lang=en-US class=ptx>Astronomers often examine star maps where stars are represented by points on a plane and each star has Cartesian coordinates. Let the level of a star be an amount of the stars that are not higher and not to the right of the given star. Astronomers want to know the distribution of the levels of the stars. <br>
<center><img src="http://162.105.81.212/JudgeOnline/images/2352_1.jpg"></center><br>For example, look at the map shown on the figure above. Level of the star number 5 is equal to 3 (it's formed by three stars with a numbers 1, 2 and 4). And the levels of the stars numbered by 2 and 4 are 1. At this map there are only one star of the level 0, two stars of the level 1, one star of the level 2, and one star of the level 3. <br><br>You are to write a program that will count the amounts of the stars of each level on a given map.</div>
<p class=pst>Input</p>
<div lang=en-US class=ptx>The first line of the input file contains a number of stars N (1&lt;=N&lt;=15000). The following N lines describe coordinates of stars (two integers X and Y per line separated by a space, 0&lt;=X,Y&lt;=32000). There can be only one star at one point of the plane. Stars are listed in ascending order of Y coordinate. Stars with equal Y coordinates are listed in ascending order of X coordinate. <br></div>
<p class=pst>Output</p>
<div lang=en-US class=ptx>The output should contain N lines, one number per line. The first line contains amount of stars of the level 0, the second does amount of stars of the level 1 and so on, the last line contains amount of stars of the level N-1.</div>
<p class=pst>Sample Input</p>
<pre class=sio>5
1 1
5 1
7 1
3 3
5 5</pre>
<p class=pst>Sample Output</p>
<pre class=sio>1
2
1
1
0</pre>
<pre class=sio>
<h2 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">解题思路</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></h2>
<p style="TEXT-ALIGN: left; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 5pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">题意：</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="TEXT-ALIGN: left; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 5pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: normal; mso-spacerun: 'yes'">题目不长，很容易理解，自己看<font face=Arial>-&nbsp;-</font></span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: normal; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">思路：</span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'">让我们来看树状数组的第一个题。有关树状数组请看：</span><span><a href="http://hi.baidu.com/narutoacm/blog/item/fd514c0d9d58c7266059f3a9.html"><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 10pt; TEXT-DECORATION: underline; mso-spacerun: 'yes'" class=15>http://hi.baidu.com/narutoacm/blog/item/fd514c0d9d58c7266059f3a9.html</span></a></span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'">或者：</span><span><a href="http://www.cppblog.com/NARUTOACM/archive/2010/03/21/110186.html"><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 10pt; TEXT-DECORATION: underline; mso-spacerun: 'yes'" class=15>http://www.cppblog.com/NARUTOACM/archive/2010/03/21/110186.html</span></a></span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'">题目告诉我们输入是按照<font face="Times New Roman">y</font><font face=宋体>的大小从小到大输入的，如果</font><font face="Times New Roman">y</font><font face=宋体>相等就按照</font><font face="Times New Roman">x</font><font face=宋体>大小从小到大输入，这无疑为我们提供了方便。当我们考虑某点时，显然我们可以只看在该点前面出现的点中的</font><font face="Times New Roman">x</font><font face=宋体>坐标，当点的</font><font face="Times New Roman">x</font><font face=宋体>坐标小于该点的</font><font face="Times New Roman">x</font><font face=宋体>坐标时，显然点被该点覆盖。于是我们可以用树状数组很快的统计出所有的点覆盖了多少点</font><font face="Times New Roman">(</font><font face=宋体>包括本身</font><font face="Times New Roman">)</font><font face=宋体>，即等级为多少。由于坐标下限是</font><font face="Times New Roman">0</font><font face=宋体>，所以插入和统计的时候都</font><font face="Times New Roman">+1.</font><font face=宋体>源代码如下：</font></span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<h2 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">源程序</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></h2>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">algorithm</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;N;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;C[</span><span style="COLOR: #000000">32005</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;X[</span><span style="COLOR: #000000">15005</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;p[</span><span style="COLOR: #000000">15005</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;lowbit(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x)<br><img id=Codehighlighter1_127_150_Open_Image onclick="this.style.display='none'; Codehighlighter1_127_150_Open_Text.style.display='none'; Codehighlighter1_127_150_Closed_Image.style.display='inline'; Codehighlighter1_127_150_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_127_150_Closed_Image onclick="this.style.display='none'; Codehighlighter1_127_150_Closed_Text.style.display='none'; Codehighlighter1_127_150_Open_Image.style.display='inline'; Codehighlighter1_127_150_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_127_150_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_127_150_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;x</span><span style="COLOR: #000000">&amp;</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">1</span><span style="COLOR: #000000">));<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></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;i,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;value)<br><img id=Codehighlighter1_178_234_Open_Image onclick="this.style.display='none'; Codehighlighter1_178_234_Open_Text.style.display='none'; Codehighlighter1_178_234_Closed_Image.style.display='inline'; Codehighlighter1_178_234_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_178_234_Closed_Image onclick="this.style.display='none'; Codehighlighter1_178_234_Closed_Text.style.display='none'; Codehighlighter1_178_234_Open_Image.style.display='inline'; Codehighlighter1_178_234_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_178_234_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_178_234_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">32001</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_198_232_Open_Image onclick="this.style.display='none'; Codehighlighter1_198_232_Open_Text.style.display='none'; Codehighlighter1_198_232_Closed_Image.style.display='inline'; Codehighlighter1_198_232_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_198_232_Closed_Image onclick="this.style.display='none'; Codehighlighter1_198_232_Closed_Text.style.display='none'; Codehighlighter1_198_232_Open_Image.style.display='inline'; Codehighlighter1_198_232_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_198_232_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_198_232_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C[i]</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">value;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">lowbit(i);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;SUM(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i)<br><img id=Codehighlighter1_251_325_Open_Image onclick="this.style.display='none'; Codehighlighter1_251_325_Open_Text.style.display='none'; Codehighlighter1_251_325_Closed_Image.style.display='inline'; Codehighlighter1_251_325_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_251_325_Closed_Image onclick="this.style.display='none'; Codehighlighter1_251_325_Closed_Text.style.display='none'; Codehighlighter1_251_325_Open_Image.style.display='inline'; Codehighlighter1_251_325_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_251_325_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_251_325_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;sum</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_278_310_Open_Image onclick="this.style.display='none'; Codehighlighter1_278_310_Open_Text.style.display='none'; Codehighlighter1_278_310_Closed_Image.style.display='inline'; Codehighlighter1_278_310_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_278_310_Closed_Image onclick="this.style.display='none'; Codehighlighter1_278_310_Closed_Text.style.display='none'; Codehighlighter1_278_310_Open_Image.style.display='inline'; Codehighlighter1_278_310_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_278_310_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_278_310_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">C[i];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="COLOR: #000000">-=</span><span style="COLOR: #000000">lowbit(i);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;sum;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_338_604_Open_Image onclick="this.style.display='none'; Codehighlighter1_338_604_Open_Text.style.display='none'; Codehighlighter1_338_604_Closed_Image.style.display='inline'; Codehighlighter1_338_604_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_338_604_Closed_Image onclick="this.style.display='none'; Codehighlighter1_338_604_Closed_Text.style.display='none'; Codehighlighter1_338_604_Open_Image.style.display='inline'; Codehighlighter1_338_604_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_338_604_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_338_604_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x,y;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">N)</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">EOF)<br><img id=Codehighlighter1_387_591_Open_Image onclick="this.style.display='none'; Codehighlighter1_387_591_Open_Text.style.display='none'; Codehighlighter1_387_591_Closed_Image.style.display='inline'; Codehighlighter1_387_591_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_387_591_Closed_Image onclick="this.style.display='none'; Codehighlighter1_387_591_Closed_Text.style.display='none'; Codehighlighter1_387_591_Open_Image.style.display='inline'; Codehighlighter1_387_591_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_387_591_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_387_591_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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><img id=Codehighlighter1_411_450_Open_Image onclick="this.style.display='none'; Codehighlighter1_411_450_Open_Text.style.display='none'; Codehighlighter1_411_450_Closed_Image.style.display='inline'; Codehighlighter1_411_450_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_411_450_Closed_Image onclick="this.style.display='none'; Codehighlighter1_411_450_Closed_Text.style.display='none'; Codehighlighter1_411_450_Open_Image.style.display='inline'; Codehighlighter1_411_450_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_411_450_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_411_450_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;X[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">x;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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><img id=Codehighlighter1_474_519_Open_Image onclick="this.style.display='none'; Codehighlighter1_474_519_Open_Text.style.display='none'; Codehighlighter1_474_519_Closed_Image.style.display='inline'; Codehighlighter1_474_519_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_474_519_Closed_Image onclick="this.style.display='none'; Codehighlighter1_474_519_Closed_Text.style.display='none'; Codehighlighter1_474_519_Open_Image.style.display='inline'; Codehighlighter1_474_519_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_474_519_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_474_519_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(X[i]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[SUM(X[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">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">N;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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">,p[i]);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(p,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(p));<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"></span></p>
</pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/110188.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2010-03-21 00:41 <a href="http://www.cppblog.com/NARUTOACM/archive/2010/03/21/110188.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ1026解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2010/03/20/110183.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Sat, 20 Mar 2010 15:45:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2010/03/20/110183.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/110183.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2010/03/20/110183.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/110183.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/110183.html</trackback:ping><description><![CDATA[<p class=pst>Problem 1026 Cipher<br><br>Description</p>
<div lang=en-US class=ptx>Bob and Alice started to use a brand-new encoding scheme. Surprisingly it is not a Public Key Cryptosystem, but their encoding and decoding is based on secret keys. They chose the secret key at their last meeting in Philadelphia on February 16th, 1996. They chose as a secret key a sequence of n distinct integers, a1 ; . . .; an, greater than zero and less or equal to n. The encoding is based on the following principle. The message is written down below the key, so that characters in the message and numbers in the key are correspondingly aligned. Character in the message at the position i is written in the encoded message at the position ai, where ai is the corresponding number in the key. And then the encoded message is encoded in the same way. This process is repeated k times. After kth encoding they exchange their message. <br><br>The length of the message is always less or equal than n. If the message is shorter than n, then spaces are added to the end of the message to get the message with the length n. <br><br>Help Alice and Bob and write program which reads the key and then a sequence of pairs consisting of k and message to be encoded k times and produces a list of encoded messages. <br></div>
<p class=pst>Input</p>
<div lang=en-US class=ptx>The input file consists of several blocks. Each block has a number 0 &lt; n &lt;= 200 in the first line. The next line contains a sequence of n numbers pairwise distinct and each greater than zero and less or equal than n. Next lines contain integer number k and one message of ascii characters separated by one space. The lines are ended with eol, this eol does not belong to the message. The block ends with the separate line with the number 0. After the last block there is in separate line the number 0. </div>
<p class=pst>Output</p>
<div lang=en-US class=ptx>Output is divided into blocks corresponding to the input blocks. Each block contains the encoded input messages in the same order as in input file. Each encoded message in the output file has the lenght n. After each block there is one empty line. </div>
<p class=pst>Sample Input</p>
<pre class=sio>10
4 5 3 7 2 8 1 6 10 9
1 Hello Bob
1995 CERC
0
0
</pre>
<p class=pst>Sample Output</p>
<pre class=sio>BolHeol  b
C RCE</pre>
<pre class=sio>
<h2 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">解题思路</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></h2>
<p style="TEXT-ALIGN: left; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 5pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">题意：</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="TEXT-ALIGN: left; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 5pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: normal; mso-spacerun: 'yes'">告诉你加密方式，让你按照那方式编码。</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: normal; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">思路：</span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'">模拟题，不过纯模拟的话有可能会<font face="Times New Roman">TLE</font><font face=宋体>，我们可以先算出周期</font><font face="Times New Roman">T</font><font face=宋体>，然后就可以去秒了。源代码如下：</font></span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<h2 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">源程序</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></h2>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n,k;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;p[</span><span style="COLOR: #000000">205</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;s[</span><span style="COLOR: #000000">205</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;s2[</span><span style="COLOR: #000000">205</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;T[</span><span style="COLOR: #000000">205</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_111_677_Open_Image onclick="this.style.display='none'; Codehighlighter1_111_677_Open_Text.style.display='none'; Codehighlighter1_111_677_Closed_Image.style.display='inline'; Codehighlighter1_111_677_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_111_677_Closed_Image onclick="this.style.display='none'; Codehighlighter1_111_677_Closed_Text.style.display='none'; Codehighlighter1_111_677_Open_Image.style.display='inline'; Codehighlighter1_111_677_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_111_677_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_111_677_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,j;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">n)</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">n)<br><img id=Codehighlighter1_150_664_Open_Image onclick="this.style.display='none'; Codehighlighter1_150_664_Open_Text.style.display='none'; Codehighlighter1_150_664_Closed_Image.style.display='inline'; Codehighlighter1_150_664_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_150_664_Closed_Image onclick="this.style.display='none'; Codehighlighter1_150_664_Closed_Text.style.display='none'; Codehighlighter1_150_664_Open_Image.style.display='inline'; Codehighlighter1_150_664_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_150_664_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_150_664_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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">p[i]);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">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><img id=Codehighlighter1_216_300_Open_Image onclick="this.style.display='none'; Codehighlighter1_216_300_Open_Text.style.display='none'; Codehighlighter1_216_300_Closed_Image.style.display='inline'; Codehighlighter1_216_300_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_216_300_Closed_Image onclick="this.style.display='none'; Codehighlighter1_216_300_Closed_Text.style.display='none'; Codehighlighter1_216_300_Open_Image.style.display='inline'; Codehighlighter1_216_300_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_216_300_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_216_300_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;c</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(p[j]</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">i)<br><img id=Codehighlighter1_259_285_Open_Image onclick="this.style.display='none'; Codehighlighter1_259_285_Open_Text.style.display='none'; Codehighlighter1_259_285_Closed_Image.style.display='inline'; Codehighlighter1_259_285_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_259_285_Closed_Image onclick="this.style.display='none'; Codehighlighter1_259_285_Closed_Text.style.display='none'; Codehighlighter1_259_285_Open_Image.style.display='inline'; Codehighlighter1_259_285_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_259_285_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_259_285_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">p[j];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">c;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">k)</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">k)<br><img id=Codehighlighter1_331_644_Open_Image onclick="this.style.display='none'; Codehighlighter1_331_644_Open_Text.style.display='none'; Codehighlighter1_331_644_Closed_Image.style.display='inline'; Codehighlighter1_331_644_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_331_644_Closed_Image onclick="this.style.display='none'; Codehighlighter1_331_644_Closed_Text.style.display='none'; Codehighlighter1_331_644_Open_Image.style.display='inline'; Codehighlighter1_331_644_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_331_644_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_331_644_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getchar();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gets(s</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;m</span><span style="COLOR: #000000">=-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;len</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">strlen(s</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s2[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(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">len;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_460_562_Open_Image onclick="this.style.display='none'; Codehighlighter1_460_562_Open_Text.style.display='none'; Codehighlighter1_460_562_Closed_Image.style.display='inline'; Codehighlighter1_460_562_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_460_562_Closed_Image onclick="this.style.display='none'; Codehighlighter1_460_562_Closed_Text.style.display='none'; Codehighlighter1_460_562_Open_Image.style.display='inline'; Codehighlighter1_460_562_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_460_562_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_460_562_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">k</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">T[i];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(x</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">p[j];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s2[j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">s[i];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(j</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">m)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">j;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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">m;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">s2[i];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s[m</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">'</span><span style="COLOR: #000000">\0</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s\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">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"></span><!--endfragment--></p>
</pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/110183.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2010-03-20 23:45 <a href="http://www.cppblog.com/NARUTOACM/archive/2010/03/20/110183.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ1469解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2010/03/09/109305.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Tue, 09 Mar 2010 09:47:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2010/03/09/109305.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/109305.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2010/03/09/109305.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/109305.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/109305.html</trackback:ping><description><![CDATA[<p class=pst>Problem 1469 COURSES<br><br>Description</p>
<div lang=en-US class=ptx>Consider a group of N students and P courses. Each student visits zero, one or more than one courses. Your task is to determine whether it is possible to form a committee of exactly P students that satisfies simultaneously the conditions: <br>
<ul><br>
    <li>every student in the committee represents a different course (a student can represent a course if he/she visits that course) <br>
    <li>each course has a representative in the committee <br></li>
</ul>
</div>
<p class=pst>Input</p>
<div lang=en-US class=ptx>Your program should read sets of data from the std input. The first line of the input contains the number of the data sets. Each data set is presented in the following format: <br><br>P N <br>Count1 Student<sub>1 1</sub> Student<sub>1 2</sub> ... Student<sub>1 Count1</sub> <br>Count2 Student<sub>2 1</sub> Student<sub>2 2</sub> ... Student<sub>2 Count2</sub> <br>... <br>CountP Student<sub>P 1</sub> Student<sub>P 2</sub> ... Student<sub>P CountP</sub> <br><br>The first line in each data set contains two positive integers separated by one blank: P (1 &lt;= P &lt;= 100) - the number of courses and N (1 &lt;= N &lt;= 300) - the number of students. The next P lines describe in sequence of the courses �from course 1 to course P, each line describing a course. The description of course i is a line that starts with an integer Count i (0 &lt;= Count i &lt;= N) representing the number of students visiting course i. Next, after a blank, you抣l find the Count i students, visiting the course, each two consecutive separated by one blank. Students are numbered with the positive integers from 1 to N. <br>There are no blank lines between consecutive sets of data. Input data are correct. <br></div>
<p class=pst>Output</p>
<div lang=en-US class=ptx>The result of the program is on the standard output. For each input data set the program prints on a single line "YES" if it is possible to form a committee and "NO" otherwise. There should not be any leading blanks at the start of the line. </div>
<p class=pst>Sample Input</p>
<pre class=sio>2
3 3
3 1 2 3
2 1 2
1 1
3 3
2 1 3
2 1 3
1 1</pre>
<p class=pst>Sample Output</p>
<pre class=sio>YES
NO</pre>
<pre class=sio>
<h2 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">解题思路</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></h2>
<p style="TEXT-ALIGN: left; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 5pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">题意：</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="TEXT-ALIGN: left; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 5pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: normal; mso-spacerun: 'yes'">学生选课，要求没门课都有人选，而且选的学生都是愿意选这门课的，学生可以选择选或不选，选的话就选自己想选的课。问这样的选课关系能不能满足上述条件，满足输出<font face=Arial>YES</font><font face=宋体>，否则输出</font><font face=Arial>NO</font><font face=宋体>。</font></span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: normal; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">思路：</span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'">显然的<font face="Times New Roman">2</font><font face=宋体>分图匹配，匹配数</font><font face="Times New Roman">=</font><font face=宋体>课数即为</font><font face="Times New Roman">YES</font><font face=宋体>，否则为</font><font face="Times New Roman">NO</font><font face=宋体>。只会匈牙利算法，但是貌似效率有点低，</font><font face="Times New Roman">407MS....</font><font face=宋体>看来要学别的算法了的说</font><font face="Times New Roman">.....</font><font face=宋体>源代码如下：</font></span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<h2 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">源程序</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></h2>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"></span><!--endfragment--></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;P,N;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Map[</span><span style="COLOR: #000000">105</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">305</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;visit[</span><span style="COLOR: #000000">305</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;prematch[</span><span style="COLOR: #000000">305</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;match;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;crosspath(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k)<br><img id=Codehighlighter1_136_363_Open_Image onclick="this.style.display='none'; Codehighlighter1_136_363_Open_Text.style.display='none'; Codehighlighter1_136_363_Closed_Image.style.display='inline'; Codehighlighter1_136_363_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_136_363_Closed_Image onclick="this.style.display='none'; Codehighlighter1_136_363_Closed_Text.style.display='none'; Codehighlighter1_136_363_Open_Image.style.display='inline'; Codehighlighter1_136_363_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_136_363_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_136_363_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(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[k][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">];i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_174_346_Open_Image onclick="this.style.display='none'; Codehighlighter1_174_346_Open_Text.style.display='none'; Codehighlighter1_174_346_Closed_Image.style.display='inline'; Codehighlighter1_174_346_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_174_346_Closed_Image onclick="this.style.display='none'; Codehighlighter1_174_346_Closed_Text.style.display='none'; Codehighlighter1_174_346_Open_Image.style.display='inline'; Codehighlighter1_174_346_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_174_346_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_174_346_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">visit[Map[k][i]])<br><img id=Codehighlighter1_202_343_Open_Image onclick="this.style.display='none'; Codehighlighter1_202_343_Open_Text.style.display='none'; Codehighlighter1_202_343_Closed_Image.style.display='inline'; Codehighlighter1_202_343_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_202_343_Closed_Image onclick="this.style.display='none'; Codehighlighter1_202_343_Closed_Text.style.display='none'; Codehighlighter1_202_343_Open_Image.style.display='inline'; Codehighlighter1_202_343_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_202_343_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_202_343_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[Map[k][i]]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">prematch[Map[k][i]]</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">crosspath(prematch[Map[k][i]]))<br><img id=Codehighlighter1_290_339_Open_Image onclick="this.style.display='none'; Codehighlighter1_290_339_Open_Text.style.display='none'; Codehighlighter1_290_339_Closed_Image.style.display='inline'; Codehighlighter1_290_339_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_290_339_Closed_Image onclick="this.style.display='none'; Codehighlighter1_290_339_Closed_Text.style.display='none'; Codehighlighter1_290_339_Open_Image.style.display='inline'; Codehighlighter1_290_339_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_290_339_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_290_339_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prematch[Map[k][i]]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">k;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;hungray()<br><img id=Codehighlighter1_380_479_Open_Image onclick="this.style.display='none'; Codehighlighter1_380_479_Open_Text.style.display='none'; Codehighlighter1_380_479_Closed_Image.style.display='inline'; Codehighlighter1_380_479_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_380_479_Closed_Image onclick="this.style.display='none'; Codehighlighter1_380_479_Closed_Text.style.display='none'; Codehighlighter1_380_479_Open_Image.style.display='inline'; Codehighlighter1_380_479_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_380_479_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_380_479_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(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">)<br><img id=Codehighlighter1_410_477_Open_Image onclick="this.style.display='none'; Codehighlighter1_410_477_Open_Text.style.display='none'; Codehighlighter1_410_477_Closed_Image.style.display='inline'; Codehighlighter1_410_477_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_410_477_Closed_Image onclick="this.style.display='none'; Codehighlighter1_410_477_Closed_Text.style.display='none'; Codehighlighter1_410_477_Open_Image.style.display='inline'; Codehighlighter1_410_477_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_410_477_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_410_477_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(crosspath(i))<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;match</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(visit,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(visit));<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_492_825_Open_Image onclick="this.style.display='none'; Codehighlighter1_492_825_Open_Text.style.display='none'; Codehighlighter1_492_825_Closed_Image.style.display='inline'; Codehighlighter1_492_825_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_492_825_Closed_Image onclick="this.style.display='none'; Codehighlighter1_492_825_Closed_Text.style.display='none'; Codehighlighter1_492_825_Open_Image.style.display='inline'; Codehighlighter1_492_825_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_492_825_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_492_825_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;T,i,j,c;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">T);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(T</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_538_812_Open_Image onclick="this.style.display='none'; Codehighlighter1_538_812_Open_Text.style.display='none'; Codehighlighter1_538_812_Closed_Image.style.display='inline'; Codehighlighter1_538_812_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_538_812_Closed_Image onclick="this.style.display='none'; Codehighlighter1_538_812_Closed_Text.style.display='none'; Codehighlighter1_538_812_Open_Image.style.display='inline'; Codehighlighter1_538_812_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_538_812_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_538_812_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">P,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">N);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">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">)<br><img id=Codehighlighter1_585_683_Open_Image onclick="this.style.display='none'; Codehighlighter1_585_683_Open_Text.style.display='none'; Codehighlighter1_585_683_Closed_Image.style.display='inline'; Codehighlighter1_585_683_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_585_683_Closed_Image onclick="this.style.display='none'; Codehighlighter1_585_683_Closed_Text.style.display='none'; Codehighlighter1_585_683_Open_Image.style.display='inline'; Codehighlighter1_585_683_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_585_683_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_585_683_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map[i][</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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">c;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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">Map[i][</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">Map[i][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]]);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hungray();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(match</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">P)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">YES\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">NO\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;match</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(prematch,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(prematch));<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
</pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/109305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2010-03-09 17:47 <a href="http://www.cppblog.com/NARUTOACM/archive/2010/03/09/109305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ1149解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2010/03/05/108954.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Fri, 05 Mar 2010 04:50:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2010/03/05/108954.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/108954.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2010/03/05/108954.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/108954.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/108954.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Problem 1149 PIGSDescriptionMirko works on a pig farm that consists of M locked pig-houses and Mirko can't unlock any pighouse because he doesn't have the keys. Customers come to the farm one after ...&nbsp;&nbsp;<a href='http://www.cppblog.com/NARUTOACM/archive/2010/03/05/108954.html'>阅读全文</a><img src ="http://www.cppblog.com/NARUTOACM/aggbug/108954.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2010-03-05 12:50 <a href="http://www.cppblog.com/NARUTOACM/archive/2010/03/05/108954.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ1325解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2010/03/05/108952.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Fri, 05 Mar 2010 04:34:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2010/03/05/108952.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/108952.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2010/03/05/108952.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/108952.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/108952.html</trackback:ping><description><![CDATA[<p class=pst>Problem 1325 Machine Schedule<br><br>Description</p>
<div lang=en-US class=ptx>As we all know, machine scheduling is a very classical problem in computer science and has been studied for a very long history. Scheduling problems differ widely in the nature of the constraints that must be satisfied and the type of schedule desired. Here we consider a 2-machine scheduling problem. <br><br>There are two machines A and B. Machine A has n kinds of working modes, which is called mode_0, mode_1, ..., mode_n-1, likewise machine B has m kinds of working modes, mode_0, mode_1, ... , mode_m-1. At the beginning they are both work at mode_0. <br><br>For k jobs given, each of them can be processed in either one of the two machines in particular mode. For example, job 0 can either be processed in machine A at mode_3 or in machine B at mode_4, job 1 can either be processed in machine A at mode_2 or in machine B at mode_4, and so on. Thus, for job i, the constraint can be represent as a triple (i, x, y), which means it can be processed either in machine A at mode_x, or in machine B at mode_y. <br><br>Obviously, to accomplish all the jobs, we need to change the machine's working mode from time to time, but unfortunately, the machine's working mode can only be changed by restarting it manually. By changing the sequence of the jobs and assigning each job to a suitable machine, please write a program to minimize the times of restarting machines. <br></div>
<p class=pst>Input</p>
<div lang=en-US class=ptx>The input file for this program consists of several configurations. The first line of one configuration contains three positive integers: n, m (n, m &lt; 100) and k (k &lt; 1000). The following k lines give the constrains of the k jobs, each line is a triple: i, x, y. <br><br>The input will be terminated by a line containing a single zero. <br></div>
<p class=pst>Output</p>
<div lang=en-US class=ptx>The output should be one integer per line, which means the minimal times of restarting machine.</div>
<p class=pst>Sample Input</p>
<pre class=sio>5 5 10
0 1 1
1 1 2
2 1 3
3 1 4
4 2 1
5 2 2
6 2 3
7 2 4
8 3 3
9 4 3
0
</pre>
<p class=pst>Sample Output</p>
<pre class=sio>3</pre>
<pre class=sio>&nbsp;
<h2 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">解题思路</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></h2>
<p style="TEXT-ALIGN: left; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 5pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">题意：</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="TEXT-ALIGN: left; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 5pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: normal; mso-spacerun: 'yes'">有任务和两个机器，每个机器有他的几种工作模式，每一种任务都可以由两个机器的一种模式来加工。机器开始是在<font face=Arial>0</font><font face=宋体>模式，每换一次模式要重启一次，所以要通过安排任务的执行顺序来使得重启数量最少并且完成所有任务，求最少的重启数量。</font></span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: normal; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">思路：</span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'">以任务作为边，机器的模式为点。如果一任务可以由<font face="Times New Roman">A</font><font face=宋体>机器的模式</font><font face="Times New Roman">i</font><font face=宋体>或</font><font face="Times New Roman">B</font><font face=宋体>机器的模式</font><font face="Times New Roman">j</font><font face=宋体>加工，那么</font><font face="Times New Roman">ij</font><font face=宋体>连边，边代表该任务。于是问题变成了求以最少的点来覆盖所有边的问题，即最小点覆盖，即可在转变成由求最大匹配得到。运用著名的匈牙利算法即可快速的求解该问题。需要注意的是由于机器开始都处于</font><font face="Times New Roman">0</font><font face=宋体>模式，所以如果有任务可以有任一种机器的</font><font face="Times New Roman">0</font><font face=宋体>模式加工的话可先直接加工该任务而不要重启机器，即不要连边。源代码如下：</font></span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<h2 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">源程序</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></h2>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n,m,k;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Map[</span><span style="COLOR: #000000">110</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">110</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;match;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;use[</span><span style="COLOR: #000000">110</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;mat[</span><span style="COLOR: #000000">110</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;crosspath(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k)<br><img id=Codehighlighter1_131_319_Open_Image onclick="this.style.display='none'; Codehighlighter1_131_319_Open_Text.style.display='none'; Codehighlighter1_131_319_Closed_Image.style.display='inline'; Codehighlighter1_131_319_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_131_319_Closed_Image onclick="this.style.display='none'; Codehighlighter1_131_319_Closed_Text.style.display='none'; Codehighlighter1_131_319_Open_Image.style.display='inline'; Codehighlighter1_131_319_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_131_319_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_131_319_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,j;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(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[k][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">];i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_171_302_Open_Image onclick="this.style.display='none'; Codehighlighter1_171_302_Open_Text.style.display='none'; Codehighlighter1_171_302_Closed_Image.style.display='inline'; Codehighlighter1_171_302_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_171_302_Closed_Image onclick="this.style.display='none'; Codehighlighter1_171_302_Closed_Text.style.display='none'; Codehighlighter1_171_302_Open_Image.style.display='inline'; Codehighlighter1_171_302_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_171_302_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_171_302_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">Map[k][i];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">use[j])<br><img id=Codehighlighter1_204_299_Open_Image onclick="this.style.display='none'; Codehighlighter1_204_299_Open_Text.style.display='none'; Codehighlighter1_204_299_Closed_Image.style.display='inline'; Codehighlighter1_204_299_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_204_299_Closed_Image onclick="this.style.display='none'; Codehighlighter1_204_299_Closed_Text.style.display='none'; Codehighlighter1_204_299_Open_Image.style.display='inline'; Codehighlighter1_204_299_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_204_299_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_204_299_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;use[j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(mat[j]</span><span style="COLOR: #000000">==-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">crosspath(mat[j]))<br><img id=Codehighlighter1_259_295_Open_Image onclick="this.style.display='none'; Codehighlighter1_259_295_Open_Text.style.display='none'; Codehighlighter1_259_295_Closed_Image.style.display='inline'; Codehighlighter1_259_295_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_259_295_Closed_Image onclick="this.style.display='none'; Codehighlighter1_259_295_Closed_Text.style.display='none'; Codehighlighter1_259_295_Open_Image.style.display='inline'; Codehighlighter1_259_295_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_259_295_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_259_295_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mat[j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">k;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;hungary()<br><img id=Codehighlighter1_336_430_Open_Image onclick="this.style.display='none'; Codehighlighter1_336_430_Open_Text.style.display='none'; Codehighlighter1_336_430_Closed_Image.style.display='inline'; Codehighlighter1_336_430_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_336_430_Closed_Image onclick="this.style.display='none'; Codehighlighter1_336_430_Closed_Text.style.display='none'; Codehighlighter1_336_430_Open_Image.style.display='inline'; Codehighlighter1_336_430_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_336_430_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_336_430_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(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;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_365_428_Open_Image onclick="this.style.display='none'; Codehighlighter1_365_428_Open_Text.style.display='none'; Codehighlighter1_365_428_Closed_Image.style.display='inline'; Codehighlighter1_365_428_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_365_428_Closed_Image onclick="this.style.display='none'; Codehighlighter1_365_428_Closed_Text.style.display='none'; Codehighlighter1_365_428_Open_Image.style.display='inline'; Codehighlighter1_365_428_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_365_428_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_365_428_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(crosspath(i))<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;match</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(use,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(use));<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_443_779_Open_Image onclick="this.style.display='none'; Codehighlighter1_443_779_Open_Text.style.display='none'; Codehighlighter1_443_779_Closed_Image.style.display='inline'; Codehighlighter1_443_779_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_443_779_Closed_Image onclick="this.style.display='none'; Codehighlighter1_443_779_Closed_Text.style.display='none'; Codehighlighter1_443_779_Open_Image.style.display='inline'; Codehighlighter1_443_779_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_443_779_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_443_779_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,j,x,y;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">n)</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">n)<br><img id=Codehighlighter1_486_766_Open_Image onclick="this.style.display='none'; Codehighlighter1_486_766_Open_Text.style.display='none'; Codehighlighter1_486_766_Closed_Image.style.display='inline'; Codehighlighter1_486_766_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_486_766_Closed_Image onclick="this.style.display='none'; Codehighlighter1_486_766_Closed_Text.style.display='none'; Codehighlighter1_486_766_Open_Image.style.display='inline'; Codehighlighter1_486_766_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_486_766_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_486_766_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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">m,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">k);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(mat,</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">(mat));<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</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><img id=Codehighlighter1_562_603_Open_Image onclick="this.style.display='none'; Codehighlighter1_562_603_Open_Text.style.display='none'; Codehighlighter1_562_603_Closed_Image.style.display='inline'; Codehighlighter1_562_603_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_562_603_Closed_Image onclick="this.style.display='none'; Codehighlighter1_562_603_Closed_Text.style.display='none'; Codehighlighter1_562_603_Open_Image.style.display='inline'; Codehighlighter1_562_603_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_562_603_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_562_603_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">m;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map[i][j]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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">k;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_627_714_Open_Image onclick="this.style.display='none'; Codehighlighter1_627_714_Open_Text.style.display='none'; Codehighlighter1_627_714_Closed_Image.style.display='inline'; Codehighlighter1_627_714_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_627_714_Closed_Image onclick="this.style.display='none'; Codehighlighter1_627_714_Closed_Text.style.display='none'; Codehighlighter1_627_714_Open_Image.style.display='inline'; Codehighlighter1_627_714_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_627_714_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_627_714_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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">i,</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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(x</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">y</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">continue</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map[x][</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">Map[x][</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">y;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hungary();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,match);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;match</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"></span><!--endfragment--></p>
</pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/108952.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2010-03-05 12:34 <a href="http://www.cppblog.com/NARUTOACM/archive/2010/03/05/108952.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ1087解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2010/03/01/108680.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Mon, 01 Mar 2010 10:13:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2010/03/01/108680.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/108680.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2010/03/01/108680.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/108680.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/108680.html</trackback:ping><description><![CDATA[<p class=pst>Problem 1087 A Plug for UNIX<br><br>Description</p>
<div lang=en-US class=ptx>You are in charge of setting up the press room for the inaugural meeting of the United Nations Internet eXecutive (UNIX), which has an international mandate to make the free flow of information and ideas on the Internet as cumbersome and bureaucratic as possible. <br>Since the room was designed to accommodate reporters and journalists from around the world, it is equipped with electrical receptacles to suit the different shapes of plugs and voltages used by appliances in all of the countries that existed when the room was built. Unfortunately, the room was built many years ago when reporters used very few electric and electronic devices and is equipped with only one receptacle of each type. These days, like everyone else, reporters require many such devices to do their jobs: laptops, cell phones, tape recorders, pagers, coffee pots, microwave ovens, blow dryers, curling <br>irons, tooth brushes, etc. Naturally, many of these devices can operate on batteries, but since the meeting is likely to be long and tedious, you want to be able to plug in as many as you can. <br>Before the meeting begins, you gather up all the devices that the reporters would like to use, and attempt to set them up. You notice that some of the devices use plugs for which there is no receptacle. You wonder if these devices are from countries that didn't exist when the room was built. For some receptacles, there are several devices that use the corresponding plug. For other receptacles, there are no devices that use the corresponding plug. <br>In order to try to solve the problem you visit a nearby parts supply store. The store sells adapters that allow one type of plug to be used in a different type of outlet. Moreover, adapters are allowed to be plugged into other adapters. The store does not have adapters for all possible combinations of plugs and receptacles, but there is essentially an unlimited supply of the ones they do have. </div>
<p class=pst>Input</p>
<div lang=en-US class=ptx>The input will consist of one case. The first line contains a single positive integer n (1 &lt;= n &lt;= 100) indicating the number of receptacles in the room. The next n lines list the receptacle types found in the room. Each receptacle type consists of a string of at most 24 alphanumeric characters. The next line contains a single positive integer m (1 &lt;= m &lt;= 100) indicating the number of devices you would like to plug in. Each of the next m lines lists the name of a device followed by the type of plug it uses (which is identical to the type of receptacle it requires). A device name is a string of at most 24 alphanumeric <br>characters. No two devices will have exactly the same name. The plug type is separated from the device name by a space. The next line contains a single positive integer k (1 &lt;= k &lt;= 100) indicating the number of different varieties of adapters that are available. Each of the next k lines describes a variety of adapter, giving the type of receptacle provided by the adapter, followed by a space, followed by the type of plug. </div>
<p class=pst>Output</p>
<div lang=en-US class=ptx>A line containing a single non-negative integer indicating the smallest number of devices that cannot be plugged in. </div>
<p class=pst>Sample Input</p>
<pre class=sio>4
A
B
C
D
5
laptop B
phone C
pager B
clock B
comb X
3
B X
X A
X D </pre>
<p class=pst>Sample Output</p>
<pre class=sio>1</pre>
<pre class=sio>
<h2 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">解题思路</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></h2>
<p style="TEXT-ALIGN: left; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 5pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">题意：</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="TEXT-ALIGN: left; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 5pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: normal; mso-spacerun: 'yes'">有插座用电器和适配器，用电器有插头，适配器本身有一个插孔和插头，它的作用是可以把别的插头插入到适合该适配器插孔的适配器，然后就可以用适配器的插头接到适合的插座，相当于转换插头的作用。每个插座只能插入一个插头。<font face=Arial>3</font><font face=宋体>种东西都最多有</font><font face=Arial>100</font><font face=宋体>个，但是任一种适配器可以有无限个。问最后最少能剩下几个用电器不能用上电。</font></span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: normal; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">思路：</span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'">每一种插头看成一个点，注意是每一种，每一个用电器看成一个点，注意是每一个，然后构图。用电器可以插入对应的插座，所以该用电器这个点可以和该插座对应的插头种类这个点连线，权为<font face="Times New Roman">1</font><font face=宋体>。由于适配器有无数个，所以适配器的插孔对应的插头和适配器的插头连线，权为</font><font face="Times New Roman">INF</font><font face=宋体>。自取源点汇点，令源点和所有用电器连线，权为</font><font face="Times New Roman">1</font><font face=宋体>，</font><font face="Times New Roman">n</font><font face=宋体>个插座对应的插头与汇点相连，权为</font><font face="Times New Roman">1.</font><font face=宋体>以</font><font face="Times New Roman">sample</font><font face=宋体>为例，绘图如下：<br></font></span></p>
<!--endfragment--><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><font face=宋体></font></span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span>
<h2 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/narutoacm/1.png" width=1071 height=505><br>源程序</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></h2>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">queue</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">map</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Map[</span><span style="COLOR: #000000">502</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">502</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n,m,k;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">map</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">M;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;t;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;S,T,F;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;pre[</span><span style="COLOR: #000000">502</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">queue</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">Q;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;addFlow(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;d)<br><img id=Codehighlighter1_200_304_Open_Image onclick="this.style.display='none'; Codehighlighter1_200_304_Open_Text.style.display='none'; Codehighlighter1_200_304_Closed_Image.style.display='inline'; Codehighlighter1_200_304_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_200_304_Closed_Image onclick="this.style.display='none'; Codehighlighter1_200_304_Closed_Text.style.display='none'; Codehighlighter1_200_304_Open_Image.style.display='inline'; Codehighlighter1_200_304_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_200_304_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_200_304_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">T;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">pre[T];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">S)<br><img id=Codehighlighter1_241_295_Open_Image onclick="this.style.display='none'; Codehighlighter1_241_295_Open_Text.style.display='none'; Codehighlighter1_241_295_Closed_Image.style.display='inline'; Codehighlighter1_241_295_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_241_295_Closed_Image onclick="this.style.display='none'; Codehighlighter1_241_295_Closed_Text.style.display='none'; Codehighlighter1_241_295_Open_Image.style.display='inline'; Codehighlighter1_241_295_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_241_295_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_241_295_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map[i][j]</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">d;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map[j][i]</span><span style="COLOR: #000000">-=</span><span style="COLOR: #000000">d;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">j;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">pre[i];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;F</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">d;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;fulk()<br><img id=Codehighlighter1_318_663_Open_Image onclick="this.style.display='none'; Codehighlighter1_318_663_Open_Text.style.display='none'; Codehighlighter1_318_663_Closed_Image.style.display='inline'; Codehighlighter1_318_663_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_318_663_Closed_Image onclick="this.style.display='none'; Codehighlighter1_318_663_Closed_Text.style.display='none'; Codehighlighter1_318_663_Open_Image.style.display='inline'; Codehighlighter1_318_663_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_318_663_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_318_663_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_339_661_Open_Image onclick="this.style.display='none'; Codehighlighter1_339_661_Open_Text.style.display='none'; Codehighlighter1_339_661_Closed_Image.style.display='inline'; Codehighlighter1_339_661_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_339_661_Closed_Image onclick="this.style.display='none'; Codehighlighter1_339_661_Closed_Text.style.display='none'; Codehighlighter1_339_661_Open_Image.style.display='inline'; Codehighlighter1_339_661_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_339_661_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_339_661_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(pre,</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">(pre));<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">Q.empty())<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Q.pop();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Q.push(S);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">Q.empty())<br><img id=Codehighlighter1_438_608_Open_Image onclick="this.style.display='none'; Codehighlighter1_438_608_Open_Text.style.display='none'; Codehighlighter1_438_608_Closed_Image.style.display='inline'; Codehighlighter1_438_608_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_438_608_Closed_Image onclick="this.style.display='none'; Codehighlighter1_438_608_Closed_Text.style.display='none'; Codehighlighter1_438_608_Open_Image.style.display='inline'; Codehighlighter1_438_608_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_438_608_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_438_608_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;ns</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">Q.front();Q.pop();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(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">T;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_493_575_Open_Image onclick="this.style.display='none'; Codehighlighter1_493_575_Open_Text.style.display='none'; Codehighlighter1_493_575_Closed_Image.style.display='inline'; Codehighlighter1_493_575_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_493_575_Closed_Image onclick="this.style.display='none'; Codehighlighter1_493_575_Closed_Text.style.display='none'; Codehighlighter1_493_575_Open_Image.style.display='inline'; Codehighlighter1_493_575_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_493_575_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_493_575_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(Map[ns][i]</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">pre[i]</span><span style="COLOR: #000000">==-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_532_570_Open_Image onclick="this.style.display='none'; Codehighlighter1_532_570_Open_Text.style.display='none'; Codehighlighter1_532_570_Closed_Image.style.display='inline'; Codehighlighter1_532_570_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_532_570_Closed_Image onclick="this.style.display='none'; Codehighlighter1_532_570_Closed_Text.style.display='none'; Codehighlighter1_532_570_Open_Image.style.display='inline'; Codehighlighter1_532_570_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_532_570_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_532_570_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pre[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ns;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Q.push(i);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(pre[T]</span><span style="COLOR: #000000">!=-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(pre[T]</span><span style="COLOR: #000000">!=-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addFlow(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_676_1337_Open_Image onclick="this.style.display='none'; Codehighlighter1_676_1337_Open_Text.style.display='none'; Codehighlighter1_676_1337_Closed_Image.style.display='inline'; Codehighlighter1_676_1337_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_676_1337_Closed_Image onclick="this.style.display='none'; Codehighlighter1_676_1337_Closed_Text.style.display='none'; Codehighlighter1_676_1337_Open_Image.style.display='inline'; Codehighlighter1_676_1337_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_676_1337_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_676_1337_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;temp[</span><span style="COLOR: #000000">25</span><span style="COLOR: #000000">],name[</span><span style="COLOR: #000000">25</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;s;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(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><img id=Codehighlighter1_759_802_Open_Image onclick="this.style.display='none'; Codehighlighter1_759_802_Open_Text.style.display='none'; Codehighlighter1_759_802_Closed_Image.style.display='inline'; Codehighlighter1_759_802_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_759_802_Closed_Image onclick="this.style.display='none'; Codehighlighter1_759_802_Closed_Text.style.display='none'; Codehighlighter1_759_802_Open_Image.style.display='inline'; Codehighlighter1_759_802_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_759_802_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_759_802_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,name);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">name;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;M[s]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;t</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">n;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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">m);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(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><img id=Codehighlighter1_847_960_Open_Image onclick="this.style.display='none'; Codehighlighter1_847_960_Open_Text.style.display='none'; Codehighlighter1_847_960_Closed_Image.style.display='inline'; Codehighlighter1_847_960_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_847_960_Closed_Image onclick="this.style.display='none'; Codehighlighter1_847_960_Closed_Text.style.display='none'; Codehighlighter1_847_960_Open_Image.style.display='inline'; Codehighlighter1_847_960_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_847_960_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_847_960_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s&nbsp;%s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,temp,name);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">name;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(M.find(s)</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">M.end())<br><img id=Codehighlighter1_914_937_Open_Image onclick="this.style.display='none'; Codehighlighter1_914_937_Open_Text.style.display='none'; Codehighlighter1_914_937_Closed_Image.style.display='inline'; Codehighlighter1_914_937_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_914_937_Closed_Image onclick="this.style.display='none'; Codehighlighter1_914_937_Closed_Text.style.display='none'; Codehighlighter1_914_937_Open_Image.style.display='inline'; Codehighlighter1_914_937_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_914_937_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_914_937_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;M[s]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">t;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map[i][m</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">M[s]]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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">k);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(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">)<br><img id=Codehighlighter1_999_1205_Open_Image onclick="this.style.display='none'; Codehighlighter1_999_1205_Open_Text.style.display='none'; Codehighlighter1_999_1205_Closed_Image.style.display='inline'; Codehighlighter1_999_1205_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_999_1205_Closed_Image onclick="this.style.display='none'; Codehighlighter1_999_1205_Closed_Text.style.display='none'; Codehighlighter1_999_1205_Open_Image.style.display='inline'; Codehighlighter1_999_1205_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_999_1205_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_999_1205_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s&nbsp;%s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,temp,name);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">temp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(M.find(s)</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">M.end())<br><img id=Codehighlighter1_1066_1089_Open_Image onclick="this.style.display='none'; Codehighlighter1_1066_1089_Open_Text.style.display='none'; Codehighlighter1_1066_1089_Closed_Image.style.display='inline'; Codehighlighter1_1066_1089_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_1066_1089_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1066_1089_Closed_Text.style.display='none'; Codehighlighter1_1066_1089_Open_Image.style.display='inline'; Codehighlighter1_1066_1089_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_1066_1089_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1066_1089_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;M[s]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">t;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">name;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(M.find(s)</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">M.end())<br><img id=Codehighlighter1_1128_1151_Open_Image onclick="this.style.display='none'; Codehighlighter1_1128_1151_Open_Text.style.display='none'; Codehighlighter1_1128_1151_Closed_Image.style.display='inline'; Codehighlighter1_1128_1151_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_1128_1151_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1128_1151_Closed_Text.style.display='none'; Codehighlighter1_1128_1151_Open_Image.style.display='inline'; Codehighlighter1_1128_1151_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_1128_1151_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1128_1151_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;M[s]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">t;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;ss</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">temp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map[m</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">M[ss]][m</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">M[s]]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">99999999</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;S</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;T</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">m</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">t</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;F</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</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">m;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map[S][i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map[m</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">i][T]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;fulk();<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">F);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"></span><!--endfragment--></p>
</pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/108680.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2010-03-01 18:13 <a href="http://www.cppblog.com/NARUTOACM/archive/2010/03/01/108680.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ1200解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2010/02/27/108528.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Sat, 27 Feb 2010 02:24:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2010/02/27/108528.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/108528.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2010/02/27/108528.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/108528.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/108528.html</trackback:ping><description><![CDATA[<p class=pst>Problem 1200 Crazy Search<br><br>Description</p>
<div lang=zh-CN class=ptx>Many people like to solve hard puzzles some of which may lead them to madness. One such puzzle could be finding a hidden prime number in a given text. Such number could be the number of different substrings of a given size that exist in the text. As you soon will discover, you really need the help of a computer and a good algorithm to solve such a puzzle. <br>Your task is to write a program that given the size, N, of the substring, the number of different characters that may occur in the text, NC, and the text itself, determines the number of different substrings of size N that appear in the text. <br><br>As an example, consider N=3, NC=4 and the text "daababac". The different substrings of size 3 that can be found in this text are: "daa"; "aab"; "aba"; "bab"; "bac". Therefore, the answer should be 5. <br></div>
<p class=pst>Input</p>
<div lang=zh-CN class=ptx>The first line of input consists of two numbers, N and NC, separated by exactly one space. This is followed by the text where the search takes place. You may assume that the maximum number of substrings formed by the possible set of characters does not exceed 16 Millions. </div>
<p class=pst>Output</p>
<div lang=zh-CN class=ptx>The program should output just an integer corresponding to the number of different substrings of size N found in the given text. </div>
<p class=pst>Sample Input</p>
<pre class=sio>3 4
daababac</pre>
<p class=pst>Sample Output</p>
<pre class=sio>5</pre>
<pre class=sio>
<h2 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">解题思路</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></h2>
<p style="TEXT-ALIGN: left; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 5pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">题意：</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="TEXT-ALIGN: left; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 5pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: normal; mso-spacerun: 'yes'">N<font face=宋体>代表子串长度，</font><font face=Arial>NC</font><font face=宋体>代表串中不同字符的个数，求母串中含有多少个不同的子串。</font></span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: normal; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">思路：</span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'">不难想到可以用<font face="Times New Roman">NC</font><font face=宋体>进制数表示子串，直接</font><font face="Times New Roman">hash</font><font face=宋体>。有一点可能会纠结，题目没说串中只有小写字母，还可能是很多不同的字符，所以去</font><font face="Times New Roman">-'a'</font><font face=宋体>的</font><font face="Times New Roman">tx</font><font face=宋体>要注意了。关于这个问题我的办法是先处理母串，把母串扫描一遍，把不同的字符都分别赋值到一个数组，计算的时候直接用就可以了。也许扫描要费时间等，反正程序很垃圾，用了</font><font face="Times New Roman">94MS</font><font face=宋体>。源代码如下：</font></span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<h2 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">源程序</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></h2>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">__int64&nbsp;N,NC;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;p[</span><span style="COLOR: #000000">100000000</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;hash[</span><span style="COLOR: #000000">100000000</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a[</span><span style="COLOR: #000000">10000</span><span style="COLOR: #000000">];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_119_458_Open_Image onclick="this.style.display='none'; Codehighlighter1_119_458_Open_Text.style.display='none'; Codehighlighter1_119_458_Closed_Image.style.display='inline'; Codehighlighter1_119_458_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_119_458_Closed_Image onclick="this.style.display='none'; Codehighlighter1_119_458_Closed_Text.style.display='none'; Codehighlighter1_119_458_Open_Image.style.display='inline'; Codehighlighter1_119_458_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_119_458_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_119_458_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,j;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&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">NC);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,p);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;len</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">strlen(p);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;__int64&nbsp;sum;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;ans</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;count</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">len;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_251_289_Open_Image onclick="this.style.display='none'; Codehighlighter1_251_289_Open_Text.style.display='none'; Codehighlighter1_251_289_Closed_Image.style.display='inline'; Codehighlighter1_251_289_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_251_289_Closed_Image onclick="this.style.display='none'; Codehighlighter1_251_289_Closed_Text.style.display='none'; Codehighlighter1_251_289_Open_Image.style.display='inline'; Codehighlighter1_251_289_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_251_289_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_251_289_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">a[p[i]])<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[p[i]]</span><span style="COLOR: #000000">=++</span><span style="COLOR: #000000">count;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">len</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">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_316_423_Open_Image onclick="this.style.display='none'; Codehighlighter1_316_423_Open_Text.style.display='none'; Codehighlighter1_316_423_Closed_Image.style.display='inline'; Codehighlighter1_316_423_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_316_423_Closed_Image onclick="this.style.display='none'; Codehighlighter1_316_423_Closed_Text.style.display='none'; Codehighlighter1_316_423_Open_Image.style.display='inline'; Codehighlighter1_316_423_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_316_423_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_316_423_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;j</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">N;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">sum</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">NC</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">a[p[j]];<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">hash[sum])<br><img id=Codehighlighter1_390_420_Open_Image onclick="this.style.display='none'; Codehighlighter1_390_420_Open_Text.style.display='none'; Codehighlighter1_390_420_Closed_Image.style.display='inline'; Codehighlighter1_390_420_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_390_420_Closed_Image onclick="this.style.display='none'; Codehighlighter1_390_420_Closed_Text.style.display='none'; Codehighlighter1_390_420_Open_Image.style.display='inline'; Codehighlighter1_390_420_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_390_420_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_390_420_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hash[sum]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;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><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"></span><!--endfragment--></p>
</pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/108528.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2010-02-27 10:24 <a href="http://www.cppblog.com/NARUTOACM/archive/2010/02/27/108528.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ2709解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2010/01/21/106126.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Thu, 21 Jan 2010 05:06:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2010/01/21/106126.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/106126.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2010/01/21/106126.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/106126.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/106126.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Problem 2709 PainterDescriptionThe local toy store sells small fingerpainting kits with between three and twelve 50ml bottles of paint, each a different color. The paints are bright and fun to work ...&nbsp;&nbsp;<a href='http://www.cppblog.com/NARUTOACM/archive/2010/01/21/106126.html'>阅读全文</a><img src ="http://www.cppblog.com/NARUTOACM/aggbug/106126.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2010-01-21 13:06 <a href="http://www.cppblog.com/NARUTOACM/archive/2010/01/21/106126.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ1182解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2010/01/20/106082.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Wed, 20 Jan 2010 12:26:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2010/01/20/106082.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/106082.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2010/01/20/106082.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/106082.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/106082.html</trackback:ping><description><![CDATA[<p class=pst>Problem 1182 食物链<br><br>Description</p>
<div lang=en-US class=ptx>动物王国中有三类动物A,B,C，这三类动物的食物链构成了有趣的环形。A吃B， B吃C，C吃A。 <br>现有N个动物，以1－N编号。每个动物都是A,B,C中的一种，但是我们并不知道它到底是哪一种。 <br>有人用两种说法对这N个动物所构成的食物链关系进行描述： <br>第一种说法是"1 X Y"，表示X和Y是同类。 <br>第二种说法是"2 X Y"，表示X吃Y。 <br>此人对N个动物，用上述两种说法，一句接一句地说出K句话，这K句话有的是真的，有的是假的。当一句话满足下列三条之一时，这句话就是假话，否则就是真话。 <br>1） 当前的话与前面的某些真的话冲突，就是假话； <br>2） 当前的话中X或Y比N大，就是假话； <br>3） 当前的话表示X吃X，就是假话。 <br>你的任务是根据给定的N（1 &lt;= N &lt;= 50,000）和K句话（0 &lt;= K &lt;= 100,000），输出假话的总数。 <br></div>
<p class=pst>Input</p>
<div lang=en-US class=ptx>第一行是两个整数N和K，以一个空格分隔。 <br>以下K行每行是三个正整数 D，X，Y，两数之间用一个空格隔开，其中D表示说法的种类。 <br>若D=1，则表示X和Y是同类。 <br>若D=2，则表示X吃Y。</div>
<p class=pst>Output</p>
<div lang=en-US class=ptx>只有一个整数，表示假话的数目。</div>
<p class=pst>Sample Input</p>
<pre class=sio>100 7
1 101 1
2 1 2
2 2 3
2 3 3
1 1 3
2 3 1
1 5 5
</pre>
<p class=pst>Sample Output</p>
<pre class=sio>3</pre>
<pre class=sio>
<h2 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">解题思路</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></h2>
<p style="TEXT-ALIGN: left; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 5pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">题意：</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="TEXT-ALIGN: left; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 5pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: normal; mso-spacerun: 'yes'">中文别跟我说你看不懂除非你是外国人那么很抱歉我无法把这篇文章翻译成英语。<font face=Arial>(</font><font face=宋体>这句话好长。。</font><font face=Arial>)</font></span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: normal; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">思路：</span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'">并查集的应用。</span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'">p(x)<font face=宋体>为</font><font face="Times New Roman">x</font><font face=宋体>所属树的根节点。</font><font face="Times New Roman">kind(x)</font><font face=宋体>为</font><font face="Times New Roman">x</font><font face=宋体>与该树根节点的关系。</font><font face="Times New Roman">rank(x)</font><font face=宋体>为树</font><font face="Times New Roman">x</font><font face=宋体>的高度。现在规定：</font></span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'">0<font face=宋体>：同类关系。</font></span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'">1<font face=宋体>：吃关系。</font></span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'">2<font face=宋体>：被吃关系。</font></span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'">我们用<font face="Times New Roman">x--r--&gt;y</font><font face=宋体>表示</font><font face="Times New Roman">x</font><font face=宋体>和</font><font face="Times New Roman">y</font><font face=宋体>之间的关系是</font><font face="Times New Roman">r</font><font face=宋体>，比如</font><font face="Times New Roman">x--1--y</font><font face=宋体>代表</font><font face="Times New Roman">x</font><font face=宋体>吃</font><font face="Times New Roman">y</font><font face=宋体>。现在，若已知</font><font face="Times New Roman">x--r1--&gt;y</font><font face=宋体>，</font><font face="Times New Roman">y--r2--&gt;z</font><font face=宋体>，如何求</font><font face="Times New Roman">x--?--&gt;z</font><font face=宋体>？，于是我们不难发<br>现，</font><font face="Times New Roman">x--(r1+r2)%3--&gt;z</font><font face=宋体>。有了这个结论，我们就可以做题了。</font></span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'">我们初始化<font face="Times New Roman">kind(1-N)=0</font><font face=宋体>，表示自己和自己为同类。</font><font face="Times New Roman">P(1-N)=i</font><font face=宋体>，代表各个节点都是一棵树。当</font><font face="Times New Roman">D&nbsp;X&nbsp;Y</font><font face=宋体>时，则应合并</font><font face="Times New Roman">X</font><font face=宋体>的根节点和</font><font face="Times New Roman">Y</font><font face=宋体>的根节点，<br>同时修改各自的</font><font face="Times New Roman">kind</font><font face=宋体>。那么问题来了，合并了之后，被合并的根节点的</font><font face="Times New Roman">kind</font><font face=宋体>值如何变化呢？</font></span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'">现有<font face="Times New Roman">x</font><font face=宋体>和</font><font face="Times New Roman">y</font><font face=宋体>，</font><font face="Times New Roman">d</font><font face=宋体>为</font><font face="Times New Roman">x</font><font face=宋体>和</font><font face="Times New Roman">y</font><font face=宋体>的关系，</font><font face="Times New Roman">px</font><font face=宋体>和</font><font face="Times New Roman">py</font><font face=宋体>分别是</font><font face="Times New Roman">x</font><font face=宋体>和</font><font face="Times New Roman">y</font><font face=宋体>的根节点，于是我们有</font><font face="Times New Roman">x--kind[x]--&gt;px</font><font face=宋体>，</font><font face="Times New Roman">y--kind[y]--&gt;py</font><font face=宋体>，显然我们可以得到<br></font><font face="Times New Roman">px--(3-kind[x])--&gt;x</font><font face=宋体>，</font><font face="Times New Roman">py--(3-kind[y])--&gt;y</font><font face=宋体>。假如合并后</font><font face="Times New Roman">px</font><font face=宋体>为新的树的根节点，那么原先</font><font face="Times New Roman">px</font><font face=宋体>树上的节点不需变化，</font><font face="Times New Roman">py</font><font face=宋体>树则需改变了，因为</font><font face="Times New Roman">kind<br></font><font face=宋体>值为该节点和树根的关系。这里只改变</font><font face="Times New Roman">kind(py)</font><font face=宋体>即可，因为在进行</font><font face="Times New Roman">find_set</font><font face=宋体>操作时可相应改变</font><font face="Times New Roman">py</font><font face=宋体>树的所有节点的</font><font face="Times New Roman">kind</font><font face=宋体>值。于是问题变成了<br></font><font face="Times New Roman">py--?--&gt;px</font><font face=宋体>。我们不难发现</font><font face="Times New Roman">py--(3-kind[y])--&gt;y--(3-d)--&gt;x--kind[x]--&gt;px</font><font face=宋体>，根据前面的结论，我们有</font><font face="Times New Roman">py--(3-kind[y]+3-d+kind[x])%3--&gt;px</font><font face=宋体>。我们<br>求解了</font><font face="Times New Roman">px</font><font face=宋体>和</font><font face="Times New Roman">py</font><font face=宋体>的关系了。</font></span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'">那么<font face="Times New Roman">AC</font><font face=宋体>之就变得简单了，于是：源代码如下：</font></span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<h2 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">源程序</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></h2>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'">//rank<font face=宋体>数组只是用于启发式合并过程，其实不要那个</font><font face="Times New Roman">rank</font><font face=宋体>速度还更快些，因为我这里的</font><font face="Times New Roman">union_set</font><font face=宋体>只改变了根节点，所以</font><font face="Times New Roman">rank</font><font face=宋体>无任何作用，<br>大家大可把他去掉。</font></span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><font face=宋体>#include&lt;iostream&gt;<br>using namespace std;<br>int p[50001],kind[50001],rank[50001];<br>int N,K,D,X,Y;<br>void make_set(int N)<br>{<br>&nbsp;int i;<br>&nbsp;for(i=1;i&lt;=N;i++)<br>&nbsp;&nbsp;p[i]=i,rank[i]=kind[i]=0;<br>}<br>int find_set(int x)<br>{<br>&nbsp;if(x==p[x])<br>&nbsp;&nbsp;return x;<br>&nbsp;int temp=p[x];<br>&nbsp;p[x]=find_set(p[x]);<br>&nbsp;kind[x]=(kind[x]+kind[temp])%3;<br>&nbsp;return p[x];<br>}<br>void union_set(int px,int py,int x,int y,int d)<br>{<br>&nbsp;if(rank[px]&gt;rank[py])<br>&nbsp;{<br>&nbsp;&nbsp;p[py]=px;<br>&nbsp;&nbsp;kind[py]=(3-kind[y]+3-d+kind[x])%3;<br>&nbsp;}<br>&nbsp;else<br>&nbsp;{<br>&nbsp;&nbsp;if(rank[px]==rank[py])<br>&nbsp;&nbsp;&nbsp;rank[py]++;<br>&nbsp;&nbsp;p[px]=py;<br>&nbsp;&nbsp;kind[px]=(3-kind[x]+d+kind[y])%3;<br>&nbsp;}<br>}<br>int main()<br>{<br>&nbsp;int i;<br>&nbsp;int count=0;<br>&nbsp;scanf("%d%d",&amp;N,&amp;K);<br>&nbsp;make_set(N);<br>&nbsp;for(i=1;i&lt;=K;i++)<br>&nbsp;{<br>&nbsp;&nbsp;scanf("%d%d%d",&amp;D,&amp;X,&amp;Y);<br>&nbsp;&nbsp;if(X&gt;N||Y&gt;N)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;count++;<br>&nbsp;&nbsp;&nbsp;continue;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;if(D==2&amp;&amp;X==Y)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;count++;<br>&nbsp;&nbsp;&nbsp;continue;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;int px=find_set(X);<br>&nbsp;&nbsp;int py=find_set(Y);<br>&nbsp;&nbsp;if(px==py)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if(D==1&amp;&amp;kind[X]!=kind[Y])<br>&nbsp;&nbsp;&nbsp;&nbsp;count++;<br>&nbsp;&nbsp;&nbsp;if(D==2&amp;&amp;(kind[X]+3-kind[Y])%3!=1)<br>&nbsp;&nbsp;&nbsp;&nbsp;count++;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;union_set(px,py,X,Y,D-1);<br>&nbsp;}<br>&nbsp;printf("%d\n",count);<br>&nbsp;return 0;<br>}</font><!--endfragment--></p>
</pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/106082.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2010-01-20 20:26 <a href="http://www.cppblog.com/NARUTOACM/archive/2010/01/20/106082.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ1521解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2010/01/11/105421.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Mon, 11 Jan 2010 11:41:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2010/01/11/105421.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/105421.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2010/01/11/105421.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/105421.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/105421.html</trackback:ping><description><![CDATA[<p class=pst>Problem 1521 Entropy<br><br>Description</p>
<div lang=zh-CN class=ptx>An entropy encoder is a data encoding method that achieves lossless data compression by encoding a message with "wasted" or "extra" information removed. In other words, entropy encoding removes information that was not necessary in the first place to accurately encode the message. A high degree of entropy implies a message with a great deal of wasted information; english text encoded in ASCII is an example of a message type that has very high entropy. Already compressed messages, such as JPEG graphics or ZIP archives, have very little entropy and do not benefit from further attempts at entropy encoding. <br><br>English text encoded in ASCII has a high degree of entropy because all characters are encoded using the same number of bits, eight. It is a known fact that the letters E, L, N, R, S and T occur at a considerably higher frequency than do most other letters in english text. If a way could be found to encode just these letters with four bits, then the new encoding would be smaller, would contain all the original information, and would have less entropy. ASCII uses a fixed number of bits for a reason, however: it&#8217;s easy, since one is always dealing with a fixed number of bits to represent each possible glyph or character. How would an encoding scheme that used four bits for the above letters be able to distinguish between the four-bit codes and eight-bit codes? This seemingly difficult problem is solved using what is known as a "prefix-free variable-length" encoding. <br><br>In such an encoding, any number of bits can be used to represent any glyph, and glyphs not present in the message are simply not encoded. However, in order to be able to recover the information, no bit pattern that encodes a glyph is allowed to be the prefix of any other encoding bit pattern. This allows the encoded bitstream to be read bit by bit, and whenever a set of bits is encountered that represents a glyph, that glyph can be decoded. If the prefix-free constraint was not enforced, then such a decoding would be impossible. <br><br>Consider the text "AAAAABCD". Using ASCII, encoding this would require 64 bits. If, instead, we encode "A" with the bit pattern "00", "B" with "01", "C" with "10", and "D" with "11" then we can encode this text in only 16 bits; the resulting bit pattern would be "0000000000011011". This is still a fixed-length encoding, however; we&#8217;re using two bits per glyph instead of eight. Since the glyph "A" occurs with greater frequency, could we do better by encoding it with fewer bits? In fact we can, but in order to maintain a prefix-free encoding, some of the other bit patterns will become longer than two bits. An optimal encoding is to encode "A" with "0", "B" with "10", "C" with "110", and "D" with "111". (This is clearly not the only optimal encoding, as it is obvious that the encodings for B, C and D could be interchanged freely for any given encoding without increasing the size of the final encoded message.) Using this encoding, the message encodes in only 13 bits to "0000010110111", a compression ratio of 4.9 to 1 (that is, each bit in the final encoded message represents as much information as did 4.9 bits in the original encoding). Read through this bit pattern from left to right and you&#8217;ll see that the prefix-free encoding makes it simple to decode this into the original text even though the codes have varying bit lengths. <br><br>As a second example, consider the text "THE CAT IN THE HAT". In this text, the letter "T" and the space character both occur with the highest frequency, so they will clearly have the shortest encoding bit patterns in an optimal encoding. The letters "C", "I&#8217; and "N" only occur once, however, so they will have the longest codes. <br><br>There are many possible sets of prefix-free variable-length bit patterns that would yield the optimal encoding, that is, that would allow the text to be encoded in the fewest number of bits. One such optimal encoding is to encode spaces with "00", "A" with "100", "C" with "1110", "E" with "1111", "H" with "110", "I" with "1010", "N" with "1011" and "T" with "01". The optimal encoding therefore requires only 51 bits compared to the 144 that would be necessary to encode the message with 8-bit ASCII encoding, a compression ratio of 2.8 to 1. <br></div>
<p class=pst>Input</p>
<div lang=zh-CN class=ptx>The input file will contain a list of text strings, one per line. The text strings will consist only of uppercase alphanumeric characters and underscores (which are used in place of spaces). The end of the input will be signalled by a line containing only the word &#8220;END&#8221; as the text string. This line should not be processed.</div>
<p class=pst>Output</p>
<div lang=zh-CN class=ptx>For each text string in the input, output the length in bits of the 8-bit ASCII encoding, the length in bits of an optimal prefix-free variable-length encoding, and the compression ratio accurate to one decimal point.</div>
<p class=pst>Sample Input</p>
<pre class=sio>AAAAABCD
THE_CAT_IN_THE_HAT
END</pre>
<p class=pst>Sample Output</p>
<pre class=sio>64 13 4.9
144 51 2.8</pre>
<pre class=sio>
<h2 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">解题思路</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></h2>
<p style="TEXT-ALIGN: left; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 5pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">题意：</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="TEXT-ALIGN: left; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 5pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: normal; mso-spacerun: 'yes'">看了第一自然段你大概往那方面去猜了。。然后怀疑自己肯定猜错了。。因为才<font face=Arial>500+AC</font><font face=宋体>的题。。然后继续看第二自然段</font></span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: normal; mso-spacerun: 'yes'">。。看着看着你又往那方面想去了。。然后又怀疑自己。。继续看。。循环。。至倒数几个自然段。。于是你杯具的发现。。还是让我无情的告诉你：是的！就是你想的那样！<font face=Arial>just&nbsp;huffman</font><font face=宋体>编码！！</font></span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: normal; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">思路：</span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'">Huffman<font face=宋体>算法不懂的话那么有书的也该翻翻你的离散数学了，没书的就直接</font><font face="Times New Roman">google</font><font face=宋体>之吧，就是贪心思想，这里也不说了，没事在这写什么鬼</font><font face="Times New Roman">huffman</font><font face=宋体>算法。。（偷了个懒，用了</font><font face="Times New Roman">STL</font><font face=宋体>中的优先队列</font><font face="Times New Roman">-&nbsp;-</font><font face=宋体>）源代码如下：</font></span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<h2 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">源程序</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></h2>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><font face=宋体>#include&lt;iostream&gt;<br>#include&lt;queue&gt;<br>using namespace std;<br>char s[500];<br>int c[200];<br>class cmp<br>{<br>public:<br>&nbsp;bool operator()(int x,int y)<br>&nbsp;{<br>&nbsp;&nbsp;return x&gt;y;<br>&nbsp;}<br>};<br>priority_queue&lt;int,vector&lt;int&gt;,cmp&gt;Q;<br>int main()<br>{<br>&nbsp;int i,l;<br>&nbsp;while(gets(s))<br>&nbsp;{<br>&nbsp;&nbsp;if(!strcmp(s,"END"))<br>&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;l=strlen(s);<br>&nbsp;&nbsp;for(i=0;i&lt;l;i++)<br>&nbsp;&nbsp;&nbsp;c[s[i]]++;<br>&nbsp;&nbsp;for(i=0;i&lt;200;i++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if(c[i])<br>&nbsp;&nbsp;&nbsp;&nbsp;Q.push(c[i]),c[i]=0;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;int sum=0;<br>&nbsp;&nbsp;while(Q.size()&gt;1)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;int a=Q.top();Q.pop();<br>&nbsp;&nbsp;&nbsp;int b=Q.top();Q.pop();<br>&nbsp;&nbsp;&nbsp;sum+=a+b;<br>&nbsp;&nbsp;&nbsp;Q.push(a+b);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;if(!sum)<br>&nbsp;&nbsp;&nbsp;sum=l;<br>&nbsp;&nbsp;while(!Q.empty())<br>&nbsp;&nbsp;&nbsp;Q.pop();<br>&nbsp;&nbsp;printf("%d %d %.1f\n",8*l,sum,double(double(8*l)/sum));<br>&nbsp;}<br>}</font></p>
</pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/105421.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2010-01-11 19:41 <a href="http://www.cppblog.com/NARUTOACM/archive/2010/01/11/105421.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ2506解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2010/01/06/105038.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Wed, 06 Jan 2010 12:41:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2010/01/06/105038.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/105038.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2010/01/06/105038.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/105038.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/105038.html</trackback:ping><description><![CDATA[<p class=pst>Problem 2506 Tiling<br><br>Description</p>
<div lang=zh-CN class=ptx>In how many ways can you tile a 2xn rectangle by 2x1 or 2x2 tiles? <br>Here is a sample tiling of a 2x17 rectangle. <br>
<center><img src="http://162.105.81.212/JudgeOnline/images/2506_1.jpg"></center><br></div>
<p class=pst>Input</p>
<div lang=zh-CN class=ptx>Input is a sequence of lines, each line containing an integer number 0 &lt;= n &lt;= 250.</div>
<p class=pst>Output</p>
<div lang=zh-CN class=ptx>For each line of input, output one integer number in a separate line giving the number of possible tilings of a 2xn rectangle. <br></div>
<p class=pst>Sample Input</p>
<pre class=sio>2
8
12
100
200</pre>
<p class=pst>Sample Output</p>
<pre class=sio>3
171
2731
845100400152152934331135470251
1071292029505993517027974728227441735014801995855195223534251</pre>
<pre class=sio>
<h2 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">解题思路</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></h2>
<p style="TEXT-ALIGN: left; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 5pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">题意：</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="TEXT-ALIGN: left; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 5pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: normal; mso-spacerun: 'yes'">用<font face=Arial>2*1</font><font face=宋体>和</font><font face=Arial>2*2</font><font face=宋体>的格子填充</font><font face=Arial>2*n</font><font face=宋体>的格子的方案数</font></span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: normal; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">思路：</span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'">矩阵乘法<font face="Times New Roman">+Java</font><font face=宋体>高精，详见</font><font face="Times New Roman">Matrix67</font><font face=宋体>大牛，再次</font><font face="Times New Roman">OrzMatrix67</font><font face=宋体>。源代码如下：</font></span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<h2 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">源程序</span></h2>
<font face=宋体>import java.math.*;<br>import java.util.*;<br>public class Main {<br>&nbsp;public BigInteger A[][]=new BigInteger[4][4];<br>&nbsp;public BigInteger fA[][]=new BigInteger[4][4];<br>&nbsp;public void init(){<br>&nbsp;&nbsp;int i,j;<br>&nbsp;&nbsp;for(i=0;i&lt;4;i++){<br>&nbsp;&nbsp;&nbsp;for(j=0;j&lt;4;j++){<br>&nbsp;&nbsp;&nbsp;&nbsp;A[i][j]=new BigInteger("0");<br>&nbsp;&nbsp;&nbsp;&nbsp;fA[i][j]=new BigInteger("0");<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;fA[0][3]=A[0][3]=BigInteger.valueOf(2);<br>&nbsp;&nbsp;fA[2][1]=A[2][1]=BigInteger.valueOf(1);<br>&nbsp;&nbsp;fA[1][2]=A[1][2]=BigInteger.valueOf(1);<br>&nbsp;&nbsp;fA[3][0]=A[3][0]=BigInteger.valueOf(1);<br>&nbsp;&nbsp;fA[3][3]=A[3][3]=BigInteger.valueOf(1);<br>&nbsp;}<br>&nbsp;public void matrixmul(BigInteger A[][],BigInteger B[][],int n)&nbsp;&nbsp; //n阶方阵相乘<br>&nbsp;{<br>&nbsp;&nbsp;int i,j,k;<br>&nbsp;&nbsp;BigInteger C[][]=new BigInteger[4][4];<br>&nbsp;&nbsp;for(i=0;i&lt;n;i++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;for(j=0;j&lt;n;j++)<br>&nbsp;&nbsp;&nbsp;&nbsp;C[i][j]=new BigInteger("0");<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;for(i=0;i&lt;n;i++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;for(j=0;j&lt;n;j++)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;for(k=0;k&lt;n;k++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C[i][j]=C[i][j].add(A[i][k].multiply(B[k][j]));<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;for(i=0;i&lt;n;i++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;for(j=0;j&lt;n;j++)<br>&nbsp;&nbsp;&nbsp;&nbsp;A[i][j]=C[i][j];<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;public void matrixpow(BigInteger A[][],int n,int k)&nbsp; //n阶方阵的k次幂<br>&nbsp;{<br>&nbsp;&nbsp;if(k==1)<br>&nbsp;&nbsp;&nbsp;return;<br>&nbsp;&nbsp;if((k&amp;1)==0)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;matrixpow(A,n,k/2);<br>&nbsp;&nbsp;&nbsp;matrixmul(A,A,n);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;else<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;matrixpow(A,n,k/2);<br>&nbsp;&nbsp;&nbsp;matrixmul(A,A,n);<br>&nbsp;&nbsp;&nbsp;matrixmul(A,fA,n);<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;public static void main(String args[]){<br>&nbsp;&nbsp;Main t=new Main();<br>&nbsp;&nbsp;t.init();<br>&nbsp;&nbsp;Scanner cin=new Scanner(System.in);<br>&nbsp;&nbsp;int n;<br>&nbsp;&nbsp;while(cin.hasNext()){<br>&nbsp;&nbsp;&nbsp;n=cin.nextInt();<br>&nbsp;&nbsp;&nbsp;if(n==0){<br>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(1);<br>&nbsp;&nbsp;&nbsp;&nbsp;continue;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;t.matrixpow(t.A,4,n);<br>&nbsp;&nbsp;&nbsp;System.out.println(t.A[3][3]);<br>&nbsp;&nbsp;&nbsp;t.init();<br>&nbsp;&nbsp;}<br>&nbsp;}<br>}</font><!--endfragment--></pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/105038.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2010-01-06 20:41 <a href="http://www.cppblog.com/NARUTOACM/archive/2010/01/06/105038.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ3233解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2010/01/06/105034.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Wed, 06 Jan 2010 12:38:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2010/01/06/105034.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/105034.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2010/01/06/105034.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/105034.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/105034.html</trackback:ping><description><![CDATA[<p class=pst>Problem 3233 Matrix Power Series<br><br>Description</p>
<div lang=zh-CN class=ptx><span lang=en-us>
<p>Given a <em>n</em> &#215; <em>n</em> matrix <em>A</em> and a positive integer <em>k</em>, find the sum <em>S</em> = <em>A</em> + <em>A</em><sup>2</sup> + <em>A</em><sup>3</sup> + &#8230; + <em>A<sup>k</sup></em>.</p>
</span></div>
<p class=pst>Input</p>
<div lang=zh-CN class=ptx><span lang=en-us>
<p>The input contains exactly one test case. The first line of input contains three positive integers <em>n</em> (<em>n</em> &#8804; 30), <em>k</em> (<em>k</em> &#8804; 10<sup>9</sup>) and <em>m</em> (<em>m</em> &lt; 10<sup>4</sup>). Then follow <em>n</em> lines each containing <em>n</em> nonnegative integers below 32,768, giving <em>A</em>&#8217;s elements in row-major order.</p>
</span></div>
<p class=pst>Output</p>
<div lang=zh-CN class=ptx>
<p>Output the elements of <em>S</em> modulo <em>m</em> in the same way as <em>A</em> is given.</p>
</div>
<p class=pst>Sample Input</p>
<pre class=sio>2 2 4
0 1
1 1</pre>
<p class=pst>Sample Output</p>
<pre class=sio>1 2
2 3</pre>
<h2 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=sio><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">解题思路</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></h2>
<pre style="TEXT-ALIGN: left; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 5pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">题意：</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></pre>
<pre style="MARGIN-TOP: 5pt; MARGIN-BOTTOM: 5pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: normal; mso-spacerun: 'yes'">给出<font face=Arial>n</font><font face=宋体>阶方阵</font><font face=Arial>A</font><font face=宋体>，输出矩阵</font><font face=Arial>S&nbsp;=&nbsp;A&nbsp;+&nbsp;A^2&nbsp;+&nbsp;A^3&nbsp;+&nbsp;</font><font face=宋体>&#8230;&nbsp;</font><font face=Arial>+&nbsp;A^k.</font><font face=宋体>矩阵每个数结果摸</font><font face=Arial>m</font></span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: normal; mso-spacerun: 'yes'"><o:p></o:p></span></pre>
<pre style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">思路：</span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></pre>
<pre style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'">当<font face="Times New Roman">k</font><font face=宋体>为偶数，则</font><font face="Times New Roman">S=A+...+A^(k/2)+A^(k/2)(A+...+A^(k/2)).</font><font face=宋体>于是只需二分求出</font><font face="Times New Roman">A+...+A(k/2)</font><font face=宋体>和</font><font face="Times New Roman">A^(k/2).</font><font face=宋体>矩阵的幂同样可以二分，因为矩阵相乘满足结合律。</font></span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></pre>
<pre style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'">当<font face="Times New Roman">k</font><font face=宋体>为奇数时，则</font><font face="Times New Roman">S(k)=S(k-1)+A^k.</font><font face=宋体>源代码如下：</font></span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></pre>
<h2 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=sio><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">源程序</span></h2>
<p style="MARGIN-RIGHT: 0px" dir=ltr>#include&lt;iostream&gt;<br>using namespace std;<br>int A[31][31];<br>int fA[31][31];<br>int n,k,m;<br>void matrixadd(int A[][31],int B[][31],int n)&nbsp;&nbsp; //n阶方阵相加<br>{<br>&nbsp;int i,j;<br>&nbsp;for(i=1;i&lt;=n;i++)<br>&nbsp;{<br>&nbsp;&nbsp;for(j=1;j&lt;=n;j++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;A[i][j]+=B[i][j];<br>&nbsp;&nbsp;&nbsp;A[i][j]%=m;<br>&nbsp;&nbsp;}<br>&nbsp;}<br>}<br>void matrixmul(int A[][31],int B[][31],int n)&nbsp;&nbsp; //n阶方阵相乘<br>{<br>&nbsp;int i,j,k;<br>&nbsp;int C[31][31];<br>&nbsp;for(i=1;i&lt;=n;i++)<br>&nbsp;{<br>&nbsp;&nbsp;for(j=i;j&lt;=n;j++)<br>&nbsp;&nbsp;&nbsp;C[i][j]=C[j][i]=0;<br>&nbsp;}<br>&nbsp;for(i=1;i&lt;=n;i++)<br>&nbsp;{<br>&nbsp;&nbsp;for(j=1;j&lt;=n;j++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;for(k=1;k&lt;=n;k++)<br>&nbsp;&nbsp;&nbsp;&nbsp;C[i][j]+=(A[i][k]*B[k][j])%m;<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;for(i=1;i&lt;=n;i++)<br>&nbsp;{<br>&nbsp;&nbsp;for(j=1;j&lt;=n;j++)<br>&nbsp;&nbsp;&nbsp;A[i][j]=C[i][j]%m;<br>&nbsp;}<br>}<br>void matrixpow(int A[][31],int n,int k)&nbsp; //n阶方阵的k次幂<br>{<br>&nbsp;if(k==1)<br>&nbsp;&nbsp;return;<br>&nbsp;if((k&amp;1)==0)<br>&nbsp;{<br>&nbsp;&nbsp;matrixpow(A,n,k/2);<br>&nbsp;&nbsp;matrixmul(A,A,n);<br>&nbsp;}<br>&nbsp;else<br>&nbsp;{<br>&nbsp;&nbsp;matrixpow(A,n,k/2);<br>&nbsp;&nbsp;matrixmul(A,A,n);<br>&nbsp;&nbsp;matrixmul(A,fA,n);<br>&nbsp;}<br>}<br>void NARUTOACM(int A[][31],int n,int k)&nbsp; //解决问题<br>{<br>&nbsp;int i,j;<br>&nbsp;if(k==1)<br>&nbsp;&nbsp;return;<br>&nbsp;if((k&amp;1)==0)<br>&nbsp;{<br>&nbsp;&nbsp;NARUTOACM(A,n,k/2);<br>&nbsp;&nbsp;int B[31][31];<br>&nbsp;&nbsp;for(i=1;i&lt;=n;i++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;for(j=1;j&lt;=n;j++)<br>&nbsp;&nbsp;&nbsp;&nbsp;B[i][j]=fA[i][j];<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;matrixpow(B,n,k/2);<br>&nbsp;&nbsp;matrixmul(B,A,n);<br>&nbsp;&nbsp;matrixadd(A,B,n);<br>&nbsp;}<br>&nbsp;else<br>&nbsp;{<br>&nbsp;&nbsp;NARUTOACM(A,n,k-1);<br>&nbsp;&nbsp;int B[31][31];<br>&nbsp;&nbsp;for(i=1;i&lt;=n;i++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;for(j=1;j&lt;=n;j++)<br>&nbsp;&nbsp;&nbsp;&nbsp;B[i][j]=fA[i][j];<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;matrixpow(B,n,k);<br>&nbsp;&nbsp;matrixadd(A,B,n);<br>&nbsp;}<br>}<br>int main()<br>{<br>&nbsp;int i,j;<br>&nbsp;scanf("%d%d%d",&amp;n,&amp;k,&amp;m);<br>&nbsp;for(i=1;i&lt;=n;i++)<br>&nbsp;{<br>&nbsp;&nbsp;for(j=1;j&lt;=n;j++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;scanf("%d",&amp;A[i][j]);<br>&nbsp;&nbsp;&nbsp;fA[i][j]=A[i][j];<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;NARUTOACM(A,n,k);<br>&nbsp;for(i=1;i&lt;=n;i++)<br>&nbsp;{<br>&nbsp;&nbsp;for(j=1;j&lt;n;j++)<br>&nbsp;&nbsp;&nbsp;printf("%d ",A[i][j]);<br>&nbsp;&nbsp;printf("%d\n",A[i][j]);<br>&nbsp;}<br>&nbsp;return 0;<br>}&nbsp;</p>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/105034.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2010-01-06 20:38 <a href="http://www.cppblog.com/NARUTOACM/archive/2010/01/06/105034.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ2411解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2009/12/22/103716.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Tue, 22 Dec 2009 11:18:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2009/12/22/103716.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/103716.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2009/12/22/103716.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/103716.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/103716.html</trackback:ping><description><![CDATA[<p class=pst>Problem 2411 Mondriaan's Dream<br><br>Description</p>
<div lang=zh-CN class=ptx>Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, after producing the drawings in his 'toilet series' (where he had to use his toilet paper to draw on, for all of his paper was filled with squares and rectangles), he dreamt of filling a large rectangle with small rectangles of width 2 and height 1 in varying ways. <br>
<center><img src="http://162.105.81.212/JudgeOnline/images/2411_1.jpg"></center><br>Expert as he was in this material, he saw at a glance that he'll need a computer to calculate the number of ways to fill the large rectangle whose dimensions were integer values, as well. Help him, so that his dream won't turn into a nightmare!</div>
<p class=pst>Input</p>
<div lang=zh-CN class=ptx>The input contains several test cases. Each test case is made up of two integer numbers: the height h and the width w of the large rectangle. Input is terminated by h=w=0. Otherwise, 1&lt;=h,w&lt;=11. </div>
<p class=pst>Output</p>
<div lang=zh-CN class=ptx><img align=right src="http://162.105.81.212/JudgeOnline/images/2411_2.jpg">For each test case, output the number of different ways the given rectangle can be filled with small rectangles of size 2 times 1. Assume the given large rectangle is oriented, i.e. count symmetrical tilings multiple times. </div>
<p class=pst>Sample Input</p>
<pre class=sio>1 2
1 3
1 4
2 2
2 3
2 4
2 11
4 11
0 0
</pre>
<p class=pst>Sample Output</p>
<pre class=sio>1
0
1
2
3
5
144
51205</pre>
<pre class=sio>
<h2 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">解题思路</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></h2>
<p style="TEXT-ALIGN: left; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 5pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">题意：</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="TEXT-ALIGN: left; MARGIN-TOP: 5pt; MARGIN-BOTTOM: 5pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: normal; mso-spacerun: 'yes'">有<font face=Arial>1*2</font><font face=宋体>和</font><font face=Arial>2*1</font><font face=宋体>的小矩形，让你填充给定长宽的大矩形，求有多少种填充方法。</font></span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: normal; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,0); FONT-SIZE: 12pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">思路：</span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'">名字的话貌似叫做状态压缩<font face="Times New Roman">DP</font><font face=宋体>吧。</font><font face="Times New Roman">0</font><font face=宋体>表示该格子为向右横排，或者向上竖排，</font><font face="Times New Roman">1</font><font face=宋体>表示该格子为向下竖排，上小到大一行一行考察，以</font><font face="Times New Roman">f(i,j)</font><font face=宋体>表示在第</font><font face="Times New Roman">i</font><font face=宋体>行状态为</font><font face="Times New Roman">j</font><font face=宋体>时的总数，于是</font><font face="Times New Roman">f(h,0)</font><font face=宋体>即为所求。即最后一排状态全为</font><font face="Times New Roman">0</font><font face=宋体>，因为有</font><font face="Times New Roman">1</font><font face=宋体>的话就会对下一排产生影响。所以一行中满足要求的就有</font><font face="Times New Roman">1</font><font face=宋体>、</font><font face="Times New Roman">00</font><font face=宋体>序列，不满足要求的有</font><font face="Times New Roman">10</font><font face=宋体>，因为单个格子无法用小矩形填充。</font></span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'">则有方程<font face="Times New Roman">f(i,j)=sigamaf(i-1,k)</font><font face=宋体>，</font><font face="Times New Roman">j</font><font face=宋体>，</font><font face="Times New Roman">k</font><font face=宋体>是满足能够排好的状态。源代码如下：</font></span><span style="FONT-FAMILY: '宋体'; FONT-SIZE: 12pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<h2 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'">源程序</span><span style="FONT-FAMILY: '宋体'; COLOR: rgb(0,0,255); FONT-SIZE: 16pt; FONT-WEIGHT: bold; mso-spacerun: 'yes'"><o:p></o:p></span></h2>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><font face="Times New Roman">#include&lt;iostream&gt;<br>using namespace std;<br>const int maxstatus=1&lt;&lt;11;<br>__int64 f[12][maxstatus];<br>bool check(int nstatus)&nbsp;  //此处传入的为逆状态（0&lt;——&gt;1互换）,很有好处滴。。<br>{<br>&nbsp;while(1)<br>&nbsp;{<br>&nbsp;&nbsp;if((nstatus&amp;1)==0)<br>&nbsp;&nbsp;&nbsp;nstatus&gt;&gt;=1;<br>&nbsp;&nbsp;else if((nstatus&amp;1)==1&amp;&amp;(nstatus&amp;2)==0)<br>&nbsp;&nbsp;&nbsp;return false;<br>&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;nstatus&gt;&gt;=2;<br>&nbsp;&nbsp;if(nstatus==0)<br>&nbsp;&nbsp;&nbsp;return true;<br>&nbsp;}<br>}<br>void init(int w)<br>{<br>&nbsp;int i;<br>&nbsp;int status=(1&lt;&lt;w)-1;<br>&nbsp;for(i=0;i&lt;=status;i++)<br>&nbsp;{<br>&nbsp;&nbsp;if(check(status-i))<br>&nbsp;&nbsp;&nbsp;f[1][i]=1;<br>&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;f[1][i]=0;<br>&nbsp;}<br>}<br>__int64 dp(int h,int w)<br>{<br>&nbsp;if((h&amp;1)==1&amp;&amp;(w&amp;1)==1)<br>&nbsp;&nbsp;return 0;<br>&nbsp;init(w);<br>&nbsp;int i,j,k;<br>&nbsp;int status=(1&lt;&lt;w)-1;<br>&nbsp;for(i=2;i&lt;=h;i++)<br>&nbsp;{<br>&nbsp;&nbsp;for(j=0;j&lt;=status;j++)&nbsp;&nbsp; //该行的状态<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;f[i][j]=0;<br>&nbsp;&nbsp;&nbsp;for(k=0;k&lt;=status;k++)&nbsp;&nbsp; //上一行的状态<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;if(f[i-1][k]&amp;&amp;!(j&amp;k)&amp;&amp;check(status-(j|k)))&nbsp; //j|k为了说明该行某位置为0且上一行为1的状态，该情况0不表示横排，而表示向上竖排<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[i][j]+=f[i-1][k];&nbsp;<br>&nbsp;&nbsp;&nbsp;}&nbsp;<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;return f[h][0];<br>}<br>int main()<br>{<br>&nbsp;int h,w;<br>&nbsp;while(scanf("%d%d",&amp;h,&amp;w)&amp;&amp;(h+w))<br>&nbsp;{<br>&nbsp;&nbsp;if(h&lt;w)<br>&nbsp;&nbsp;&nbsp;h^=w^=h^=w;<br>&nbsp;&nbsp;printf("%I64d\n",dp(h,w));<br>&nbsp;}<br>}</font><!--endfragment--></p>
</pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/103716.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2009-12-22 19:18 <a href="http://www.cppblog.com/NARUTOACM/archive/2009/12/22/103716.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ2049解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2009/12/05/102597.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Sat, 05 Dec 2009 05:50:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2009/12/05/102597.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/102597.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2009/12/05/102597.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/102597.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/102597.html</trackback:ping><description><![CDATA[<p class=pst>Problem 2049 Finding Nemo<br><br>Description</p>
<div class=ptx lang=en-US>Nemo is a naughty boy. One day he went into the deep sea all by himself. Unfortunately, he became lost and couldn't find his way home. Therefore, he sent a signal to his father, Marlin, to ask for help. <br>After checking the map, Marlin found that the sea is like a labyrinth with walls and doors. All the walls are parallel to the X-axis or to the Y-axis. The thickness of the walls are assumed to be zero. <br>All the doors are opened on the walls and have a length of 1. Marlin cannot go through a wall unless there is a door on the wall. Because going through a door is dangerous (there may be some virulent medusas near the doors), Marlin wants to go through as few doors as he could to find Nemo. <br>Figure-1 shows an example of the labyrinth and the path Marlin went through to find Nemo. <br>
<center><img src="http://162.105.81.212/JudgeOnline/images/2049_1.jpg"></center><br>We assume Marlin's initial position is at (0, 0). Given the position of Nemo and the configuration of walls and doors, please write a program to calculate the minimum number of doors Marlin has to go through in order to reach Nemo.</div>
<p class=pst>Input</p>
<div class=ptx lang=en-US>The input consists of several test cases. Each test case is started by two non-negative integers M and N. M represents the number of walls in the labyrinth and N represents the number of doors. <br>Then follow M lines, each containing four integers that describe a wall in the following format: <br>x y d t <br>(x, y) indicates the lower-left point of the wall, d is the direction of the wall -- 0 means it's parallel to the X-axis and 1 means that it's parallel to the Y-axis, and t gives the length of the wall. <br>The coordinates of two ends of any wall will be in the range of [1,199]. <br>Then there are N lines that give the description of the doors: <br>x y d <br>x, y, d have the same meaning as the walls. As the doors have fixed length of 1, t is omitted. <br>The last line of each case contains two positive float numbers: <br>f1 f2 <br>(f1, f2) gives the position of Nemo. And it will not lie within any wall or door. <br>A test case of M = -1 and N = -1 indicates the end of input, and should not be processed.</div>
<p class=pst>Output</p>
<div class=ptx lang=en-US>For each test case, in a separate line, please output the minimum number of doors Marlin has to go through in order to rescue his son. If he can't reach Nemo, output -1.</div>
<p class=pst>Sample Input</p>
<pre class=sio>8 9
1 1 1 3
2 1 1 3
3 1 1 3
4 1 1 3
1 1 0 3
1 2 0 3
1 3 0 3
1 4 0 3
2 1 1
2 2 1
2 3 1
3 1 1
3 2 1
3 3 1
1 2 0
3 3 0
4 3 1
1.5 1.5
4 0
1 1 0 1
1 1 1 1
2 1 1 1
1 2 0 1
1.5 1.7
-1 -1</pre>
<p class=pst>Sample Output</p>
<pre class=sio>5
-1</pre>
<pre class=sio>&nbsp;
<h2><span>解题思路</span></h2>
<p align=left><strong><span>题意：</span></strong><strong></strong></p>
<p align=left><span>Marlin</span><span>的儿子</span><span>Nemo</span><span>迷路了，他发信号向他爸爸求救，于是</span><span>Marlin</span><span>就得到了地图，要你设计一条道路去救他儿子。要求你穿过最少的门，因为穿过门时会有危险。</span><span>Marlin</span><span>的初始位置在</span><span>(0,0)</span><span>这个坐标。</span></p>
<p><strong><span>思路：</span></strong></p>
<p><span>这个题一看就是搜索，但是如何的搜就是问题了。一开始我也想了蛮久，后来想到把每一个格子点化，还要记录格子的四条边的情况，是通还是不通，于是</span><span>Nemo</span><span>所在地也处于一点了。然后直接</span><span>bfs</span><span>稍微加点剪枝就好了。这里注意：可通的情况有两种，一种是有门，这时穿过的门数就要加</span><span>1.</span><span>另一种是既没有墙也没有门，这也是可通的，这种情况就不要加</span><span>1</span><span>了。一开始我都没有注意到，然后经过</span><span>MasterLuo</span><span>大牛指点了下才发现这个问题，于是接下来就是去搜了。源代码如下：</span></p>
<h2><span>源程序</span></h2>
<p><span>#include&lt;iostream&gt;<br>#include&lt;queue&gt;<br>using namespace std;<br>queue&lt; pair&lt;int,int&gt; &gt;Q;<br>const int INF=1&lt;&lt;20;<br>struct grid&nbsp;&nbsp;&nbsp; //记录小格子的四条边,1代表不能通过，0代表能有门通过，-1代表通过<br>{<br>&nbsp;int l;<br>&nbsp;int r;<br>&nbsp;int t;<br>&nbsp;int b;<br>};<br>grid map[1&lt;&lt;8][1&lt;&lt;8];&nbsp; //以一个格子的左下角的坐标代表该格子<br>int M,N;<br>int X,Y; //nemo的格子的坐标<br>int x1,y1,x2,y2; //记录map的左下角的坐标和右上角的坐标；<br>int visit[1&lt;&lt;8][1&lt;&lt;8];<br>int step[1&lt;&lt;8][1&lt;&lt;8];<br>int ans=INF;<br>void BFS()<br>{<br>&nbsp;memset(step,0,sizeof(step));<br>&nbsp;memset(visit,0,sizeof(visit));<br>&nbsp;int flag=0;<br>&nbsp;int nowx,nowy;<br>&nbsp;while(!Q.empty())<br>&nbsp;&nbsp;Q.pop();<br>&nbsp;if(X&gt;=x2||X&lt;x1||Y&gt;=y2||Y&lt;y1)<br>&nbsp;{<br>&nbsp;&nbsp;printf("0\n");<br>&nbsp;&nbsp;return;<br>&nbsp;}<br>&nbsp;Q.push(make_pair(X,Y));<br>&nbsp;while(!Q.empty())<br>&nbsp;{<br>&nbsp;&nbsp;nowx=Q.front().first;nowy=Q.front().second;Q.pop();<br>&nbsp;&nbsp;if(nowx&gt;=x2||nowx&lt;x1||nowy&gt;=y2||nowy&lt;y1)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if(ans&gt;step[nowx][nowy])<br>&nbsp;&nbsp;&nbsp;&nbsp;ans=step[nowx][nowy];<br>&nbsp;&nbsp;&nbsp;flag=1;<br>&nbsp;&nbsp;&nbsp;continue;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;if(map[nowx][nowy].t!=1)<br>&nbsp;&nbsp;{&nbsp;<br>&nbsp;&nbsp;&nbsp;if(nowx&gt;=x2||nowx&lt;x1||nowy&gt;=y2||nowy&lt;y1)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;flag=1;<br>&nbsp;&nbsp;&nbsp;&nbsp;if(ans&gt;step[nowx][nowy])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans=step[nowx][nowy];<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;if(!visit[nowx][nowy+1])<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(map[nowx][nowy].t==0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;step[nowx][nowy+1]=step[nowx][nowy]+1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;step[nowx][nowy+1]=step[nowx][nowy];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[nowx][nowy+1]=1,Q.push(make_pair(nowx,nowy+1));<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;if(map[nowx][nowy].b!=1)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if(nowx&gt;=x2||nowx&lt;x1||nowy&gt;=y2||nowy&lt;y1)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;flag=1;<br>&nbsp;&nbsp;&nbsp;&nbsp;if(ans&gt;step[nowx][nowy])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans=step[nowx][nowy];<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;if(!visit[nowx][nowy-1])<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(map[nowx][nowy].b==0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;step[nowx][nowy-1]=step[nowx][nowy]+1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;step[nowx][nowy-1]=step[nowx][nowy];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[nowx][nowy-1]=1,Q.push(make_pair(nowx,nowy-1));<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;if(map[nowx][nowy].l!=1)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if(nowx&gt;=x2||nowx&lt;x1||nowy&gt;=y2||nowy&lt;y1)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;flag=1;<br>&nbsp;&nbsp;&nbsp;&nbsp;if(ans&gt;step[nowx][nowy])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans=step[nowx][nowy];<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;if(!visit[nowx-1][nowy])<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(map[nowx][nowy].l==0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;step[nowx-1][nowy]=step[nowx][nowy]+1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;step[nowx-1][nowy]=step[nowx][nowy];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[nowx-1][nowy]=1,Q.push(make_pair(nowx-1,nowy));<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;if(map[nowx][nowy].r!=1)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if(nowx&gt;=x2||nowx&lt;x1||nowy&gt;=y2||nowy&lt;y1)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;flag=1;<br>&nbsp;&nbsp;&nbsp;&nbsp;if(ans&gt;step[nowx][nowy])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans=step[nowx][nowy];<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;if(!visit[nowx+1][nowy])<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(map[nowx][nowy].r==0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;step[nowx+1][nowy]=step[nowx][nowy]+1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;step[nowx+1][nowy]=step[nowx][nowy];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[nowx+1][nowy]=1,Q.push(make_pair(nowx+1,nowy));<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;if(flag)<br>&nbsp;&nbsp;printf("%d\n",ans);<br>&nbsp;else<br>&nbsp;&nbsp;printf("-1\n");<br>}<br>int main()<br>{<br>&nbsp;int i,j;<br>&nbsp;int x,y,d,t;<br>&nbsp;double f1,f2;<br>&nbsp;while(scanf("%d%d",&amp;M,&amp;N))<br>&nbsp;{<br>&nbsp;&nbsp;if(M==-1&amp;&amp;N==-1)<br>&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;ans=INF;<br>&nbsp;&nbsp;for(i=0;i&lt;256;i++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;for(j=i;j&lt;256;j++)<br>&nbsp;&nbsp;&nbsp;&nbsp;map[i][j].b=map[i][j].l=map[i][j].r=map[i][j].t=map[j][i].b=map[j][i].l=map[j][i].r=map[j][i].t=-1;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;x1=y1=INF;x2=y2=-INF;<br>&nbsp;&nbsp;for(i=1;i&lt;=M;i++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;scanf("%d%d%d%d",&amp;x,&amp;y,&amp;d,&amp;t);<br>&nbsp;&nbsp;&nbsp;if(x2&lt;x)<br>&nbsp;&nbsp;&nbsp;&nbsp;x2=x;<br>&nbsp;&nbsp;&nbsp;if(y2&lt;y)<br>&nbsp;&nbsp;&nbsp;&nbsp;y2=y;<br>&nbsp;&nbsp;&nbsp;if(x1&gt;x)<br>&nbsp;&nbsp;&nbsp;&nbsp;x1=x;<br>&nbsp;&nbsp;&nbsp;if(y1&gt;y)<br>&nbsp;&nbsp;&nbsp;&nbsp;y1=y;<br>&nbsp;&nbsp;&nbsp;int mx=x+t,my=y+t;<br>&nbsp;&nbsp;&nbsp;if(d==0)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;for(x;x&lt;mx;x++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map[x][y-1].t=map[x][y].b=1;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;for(y;y&lt;my;y++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map[x-1][y].r=map[x][y].l=1;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;for(i=1;i&lt;=N;i++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;scanf("%d%d%d",&amp;x,&amp;y,&amp;d);<br>&nbsp;&nbsp;&nbsp;if(d==0)<br>&nbsp;&nbsp;&nbsp;&nbsp;map[x][y-1].t=map[x][y].b=0;<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;map[x-1][y].r=map[x][y].l=0;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;scanf("%lf%lf",&amp;f1,&amp;f2);<br>&nbsp;&nbsp;if(f1&gt;=x2||f1&lt;x1||f2&gt;=y2||f2&lt;y1)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;printf("0\n");<br>&nbsp;&nbsp;&nbsp;continue;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;X=int(f1);Y=int(f2);<br>&nbsp;&nbsp;BFS();<br>&nbsp;}<br>&nbsp;return 0;<br>}</span></p>
</pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/102597.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2009-12-05 13:50 <a href="http://www.cppblog.com/NARUTOACM/archive/2009/12/05/102597.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ1080解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2009/11/29/102233.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Sun, 29 Nov 2009 07:22:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2009/11/29/102233.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/102233.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2009/11/29/102233.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/102233.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/102233.html</trackback:ping><description><![CDATA[<p class=pst>Problem 1080 Human Gene Functions<br><br>Description</p>
<div class=ptx lang=zh-CN>It is well known that a human gene can be considered as a sequence, consisting of four nucleotides, which are simply denoted by four letters, A, C, G, and T. Biologists have been interested in identifying human genes and determining their functions, because these can be used to diagnose human diseases and to design new drugs for them. <br><br>A human gene can be identified through a series of time-consuming biological experiments, often with the help of computer programs. Once a sequence of a gene is obtained, the next job is to determine its function. <br>One of the methods for biologists to use in determining the function of a new gene sequence that they have just identified is to search a database with the new gene as a query. The database to be searched stores many gene sequences and their functions &#8211; many researchers have been submitting their genes and functions to the database and the database is freely accessible through the Internet. <br><br>A database search will return a list of gene sequences from the database that are similar to the query gene. <br>Biologists assume that sequence similarity often implies functional similarity. So, the function of the new gene might be one of the functions that the genes from the list have. To exactly determine which one is the right one another series of biological experiments will be needed. <br><br>Your job is to make a program that compares two genes and determines their similarity as explained below. Your program may be used as a part of the database search if you can provide an efficient one. <br>Given two genes AGTGATG and GTTAG, how similar are they? One of the methods to measure the similarity <br>of two genes is called alignment. In an alignment, spaces are inserted, if necessary, in appropriate positions of <br>the genes to make them equally long and score the resulting genes according to a scoring matrix. <br><br>For example, one space is inserted into AGTGATG to result in AGTGAT-G, and three spaces are inserted into GTTAG to result in &#8211;GT--TAG. A space is denoted by a minus sign (-). The two genes are now of equal <br>length. These two strings are aligned: <br><br>AGTGAT-G <br>-GT--TAG <br><br>In this alignment, there are four matches, namely, G in the second position, T in the third, T in the sixth, and G in the eighth. Each pair of aligned characters is assigned a score according to the following scoring matrix. <br>
<center><img src="http://162.105.81.212/JudgeOnline/images/1080/1080_1.gif"></center><br>denotes that a space-space match is not allowed. The score of the alignment above is (-3)+5+5+(-2)+(-3)+5+(-3)+5=9. <br><br>Of course, many other alignments are possible. One is shown below (a different number of spaces are inserted into different positions): <br><br>AGTGATG <br>-GTTA-G <br><br>This alignment gives a score of (-3)+5+5+(-2)+5+(-1) +5=14. So, this one is better than the previous one. As a matter of fact, this one is optimal since no other alignment can have a higher score. So, it is said that the <br>similarity of the two genes is 14. </div>
<p class=pst>Input</p>
<div class=ptx lang=zh-CN>The input consists of T test cases. The number of test cases ) (T is given in the first line of the input file. Each test case consists of two lines: each line contains an integer, the length of a gene, followed by a gene sequence. The length of each gene sequence is at least one and does not exceed 100. </div>
<p class=pst>Output</p>
<div class=ptx lang=zh-CN>The output should print the similarity of each test case, one per line. </div>
<p class=pst>Sample Input</p>
<pre class=sio>2
7 AGTGATG
5 GTTAG
7 AGCTATT
9 AGCTTTAAA </pre>
<p class=pst>Sample Output</p>
<pre class=sio>14
21</pre>
<pre class=sio>&nbsp;
<h2><span>解题思路</span></h2>
<p align=left><strong><span>题意：</span></strong><strong></strong></p>
<p><span>给两串</span><span>DNA</span><span>序列，按照给定的方法找他们最大的相似度。比如序列</span><span>AGTGATG</span><span>和</span><span>GTTAG</span><span>，化为</span><span>AGTGATG</span><span>和</span><span>-GTTA-G</span><span>，相似度最大，为</span><span>14</span><span>。</span></p>
<p><strong><span>思路：</span></strong></p>
<p><span>由低到高的往上递推，动态规划。</span></p>
<p><span>设</span><span>d(i,j)</span><span>为第一个序列</span><span>(s1)</span><span>的前</span><span>i</span><span>个数和第二个序列</span><span>(s2)</span><span>的前</span><span>j</span><span>个数的相似度的最大值。当</span><span>s1[i+1]==s2[j+1]</span><span>时，由题目给出的表显然可以得出</span><span>d(i+1,j+1)=d(i,j)+p[s1[i+1]][s2[j+1]];p</span><span>数组为题目中给出的那个表格。当</span><span>s1[i+1]!=s2[j+1]</span><span>时，反证法显然有</span><span>d(i+1,j+1)=</span></p>
<p><span>max(d(i,j)+p[s1[i+1]][s2[j+1]],d(i,j+1)+p[s1[i+1]][&#8216;-&#8216;],d(i+1,j)+p[&#8216;-&#8216;][s2[j+1]])</span><span>。于是，两个</span><span>for</span><span>就解决问题了。最后注意初始化</span><span>d</span><span>数组，当</span><span>i=0</span><span>时相当于</span><span>s1</span><span>序列全都是用</span><span>&#8217;-&#8216;</span><span>来比较，同样</span><span>j=0</span><span>相当于</span><span>s2</span><span>序列全都用</span><span>&#8217;-&#8216;</span><span>来比较</span><span>(</span><span>这样说好像有点不太严谨，反正知道意思就行了</span><span>)</span><span>。当</span><span>i==0&amp;&amp;j==0</span><span>时，显然</span><span>d(0,0)</span><span>为</span><span>0</span><span>。下面是源代码：哦。。还有。。由于题目说</span><span>&#8217;-&#8216;</span><span>和</span><span>&#8217;-&#8216;</span><span>比较无意义，故把p['-']['-']初始为负无穷大。</span></p>
<h2><span>源程序</span></h2>
<p><span>#include&lt;iostream&gt;<br>using namespace std;<br>const int INF=1&lt;&lt;20;<br>char s1[200];<br>int len1;<br>char s2[200];<br>int len2;<br>int p[200][200];<br>int d[200][200];<br>void init()<br>{<br>&nbsp;p['A']['A']=5;<br>&nbsp;p['C']['C']=5;<br>&nbsp;p['G']['G']=5;<br>&nbsp;p['T']['T']=5;<br>&nbsp;p['A']['C']=p['C']['A']=-1;<br>&nbsp;p['A']['G']=p['G']['A']=-2;<br>&nbsp;p['A']['T']=p['T']['A']=-1;<br>&nbsp;p['A']['-']=p['-']['A']=-3;<br>&nbsp;p['C']['G']=p['G']['C']=-3;<br>&nbsp;p['C']['T']=p['T']['C']=-2;<br>&nbsp;p['C']['-']=p['-']['C']=-4;<br>&nbsp;p['G']['T']=p['T']['G']=-2;<br>&nbsp;p['G']['-']=p['-']['G']=-2;<br>&nbsp;p['T']['-']=p['-']['T']=-1;<br>&nbsp;p['-']['-']=-INF;<br>}<br>int main()<br>{<br>&nbsp;init();<br>&nbsp;int t,i,j;<br>&nbsp;scanf("%d",&amp;t);<br>&nbsp;s1[0]=s2[0]='-';<br>&nbsp;while(t--)<br>&nbsp;{<br>&nbsp;&nbsp;memset(d,0,sizeof(d));<br>&nbsp;&nbsp;scanf("%d",&amp;len1);<br>&nbsp;&nbsp;for(i=1;i&lt;=len1;i++)<br>&nbsp;&nbsp;&nbsp;scanf(" %c",&amp;s1[i]);<br>&nbsp;&nbsp;scanf("%d",&amp;len2);<br>&nbsp;&nbsp;for(i=1;i&lt;=len2;i++)<br>&nbsp;&nbsp;&nbsp;scanf(" %c",&amp;s2[i]);<br>&nbsp;&nbsp;for(i=1;i&lt;=len2;i++)<br>&nbsp;&nbsp;&nbsp;d[0][i]=d[0][i-1]+p['-'][s2[i]];<br>&nbsp;&nbsp;for(i=1;i&lt;=len1;i++)<br>&nbsp;&nbsp;&nbsp;d[i][0]=d[i-1][0]+p[s1[i]]['-'];<br>&nbsp;&nbsp;for(i=1;i&lt;=len1;i++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;for(j=1;j&lt;=len2;j++)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;int ans=-INF;<br>&nbsp;&nbsp;&nbsp;&nbsp;if(s1[i]!=s2[j])<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(d[i][j-1]+p['-'][s2[j]]&gt;ans)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans=d[i][j-1]+p['-'][s2[j]];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(d[i-1][j]+p[s1[i]]['-']&gt;ans)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans=d[i-1][j]+p[s1[i]]['-'];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(d[i-1][j-1]+p[s1[i]][s2[j]]&gt;ans)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans=d[i-1][j-1]+p[s1[i]][s2[j]];<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans=d[i-1][j-1]+p[s1[i]][s2[j]];<br>&nbsp;&nbsp;&nbsp;&nbsp;d[i][j]=ans;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;printf("%d\n",d[len1][len2]);<br>&nbsp;}<br>&nbsp;return 0;<br>}</span></p>
</pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/102233.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2009-11-29 15:22 <a href="http://www.cppblog.com/NARUTOACM/archive/2009/11/29/102233.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ1753解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2009/11/14/100905.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Fri, 13 Nov 2009 16:07:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2009/11/14/100905.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/100905.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2009/11/14/100905.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/100905.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/100905.html</trackback:ping><description><![CDATA[<p class=pst>Problem 1753 Flip Game<br><br>Description</p>
<div class=ptx lang=en-US>Flip game is played on a rectangular 4x4 field with two-sided pieces placed on each of its 16 squares. One side of each piece is white and the other one is black and each piece is lying either it's black or white side up. Each round you flip 3 to 5 pieces, thus changing the color of their upper side from black to white and vice versa. The pieces to be flipped are chosen every round according to the following rules: <br>
<ol>
    <li>Choose any one of the 16 pieces. <br>
    <li>Flip the chosen piece and also all adjacent pieces to the left, to the right, to the top, and to the bottom of the chosen piece (if there are any).</li>
</ol>
<br><img src="http://162.105.81.212/JudgeOnline/images/1753_1.jpg" align=right>Consider the following position as an example: <br><br>bwbw <br>wwww <br>bbwb <br>bwwb <br>Here "b" denotes pieces lying their black side up and "w" denotes pieces lying their white side up. If we choose to flip the 1st piece from the 3rd row (this choice is shown at the picture), then the field will become: <br><br>bwbw <br>bwww <br>wwwb <br>wwwb <br>The goal of the game is to flip either all pieces white side up or all pieces black side up. You are to write a program that will search for the minimum number of rounds needed to achieve this goal. <br></div>
<p class=pst>Input</p>
<div class=ptx lang=en-US>The input consists of 4 lines with 4 characters "w" or "b" each that denote game field position.</div>
<p class=pst>Output</p>
<div class=ptx lang=en-US>Write to the output file a single integer number - the minimum number of rounds needed to achieve the goal of the game from the given position. If the goal is initially achieved, then write 0. If it's impossible to achieve the goal, then write the word "Impossible" (without quotes).</div>
<p class=pst>Sample Input</p>
<pre class=sio>bwwb
bbwb
bwwb
bwww</pre>
<p class=pst>Sample Output</p>
<pre class=sio>4</pre>
<pre class=sio>&nbsp;
<h2><span>解题思路</span></h2>
<p align=left><strong><span>题意：</span></strong><strong></strong></p>
<p><span>一个棋盘，有黑白两种棋子。你可以翻动任一颗棋子，但是翻动有个规则，那就是该棋子周围的棋子都要跟着翻转，所谓翻转就是白变黑或黑变白。让你求出至少要翻转的次数使得棋盘达到一种状态，该状态就是棋盘中所有棋子都是同一种颜色。</span></p>
<p><strong><span>思路：</span></strong></p>
<p><span>此题我用的方法是状态压缩</span><span>bfs</span><span>，令白棋的状态为</span><span>0</span><span>，黑棋状态为</span><span>1</span><span>，显然要达到所要求的状态就只有两种情况：</span><span>0000000000000000</span><span>（</span><span>2</span><span>）</span><span>=0</span><span>（</span><span>10</span><span>）；</span><span>1111111111111111</span><span>（</span><span>2</span><span>）</span><span>=65535</span><span>（</span><span>10</span><span>）；因为有</span><span>16</span><span>个棋子，每个棋子一个状态，刚好可以用一个</span><span>int</span><span>型。此题我用此方法优化到</span><span>16ms</span><span>的极限了，不晓得还能如何优化，希望大牛帮忙看看。貌似此题还可以枚举做，这样做貌似很快，一般</span><span>0ms</span><span>，但我不晓得如何枚举，希望有大牛指点指点。源代码如下：</span></p>
<h2><span>源程序</span></h2>
<span>#include&lt;iostream&gt;<br>using namespace std;<br>struct node<br>{<br>&nbsp;int s;<br>&nbsp;int c;<br>};<br>class Queue<br>{<br>public:<br>&nbsp;node n[1&lt;&lt;17];<br>&nbsp;int front;<br>&nbsp;int rear;<br>&nbsp;static const int f=(1&lt;&lt;17)-1;<br>&nbsp;Queue()<br>&nbsp;{<br>&nbsp;&nbsp;front=rear=0;<br>&nbsp;}<br>&nbsp;void push(node x)<br>&nbsp;{<br>&nbsp;&nbsp;n[rear].s=x.s;<br>&nbsp;&nbsp;n[rear].c=x.c;<br>&nbsp;&nbsp;rear++;<br>&nbsp;&nbsp;rear&amp;=f;<br>&nbsp;}<br>&nbsp;void pop(node &amp;x)<br>&nbsp;{<br>&nbsp;&nbsp;x.s=n[front].s;<br>&nbsp;&nbsp;x.c=n[front].c;<br>&nbsp;&nbsp;front++;<br>&nbsp;&nbsp;front&amp;=f;<br>&nbsp;}<br>};<br>Queue q;<br>int p[5][5];<br>int flag[1&lt;&lt;17];<br>void inline init()<br>{<br>&nbsp;int i,j;<br>&nbsp;for(i=1;i&lt;=4;i++)<br>&nbsp;{<br>&nbsp;&nbsp;for(j=1;j&lt;=4;j++)<br>&nbsp;&nbsp;&nbsp;p[i][j]=1&lt;&lt;(20-4*i-j);<br>&nbsp;}<br>}<br>int main()<br>{<br>&nbsp;init();<br>&nbsp;int s=0;<br>&nbsp;char a;<br>&nbsp;int i,j;<br>&nbsp;for(i=1;i&lt;=4;i++)<br>&nbsp;{<br>&nbsp;&nbsp;for(j=1;j&lt;=4;j++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;s=s&lt;&lt;1;<br>&nbsp;&nbsp;&nbsp;scanf("%c",&amp;a);<br>&nbsp;&nbsp;&nbsp;if(a=='b')<br>&nbsp;&nbsp;&nbsp;&nbsp;s=s^1;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;getchar();<br>&nbsp;}<br>&nbsp;node n,t;<br>&nbsp;n.s=s;<br>&nbsp;n.c=0;<br>&nbsp;q.push(n);<br>&nbsp;int f=0;<br>&nbsp;while(q.front!=q.rear)<br>&nbsp;{<br>&nbsp;&nbsp;q.pop(n);<br>&nbsp;&nbsp;if(n.s==0||n.s==65535)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;f=1;<br>&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;for(i=1;i&lt;=4;i++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;for(j=1;j&lt;=4;j++)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;int e=n.s;<br>&nbsp;&nbsp;&nbsp;&nbsp;e^=p[i][j];<br>&nbsp;&nbsp;&nbsp;&nbsp;if(i-1&gt;0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e^=p[i-1][j];<br>&nbsp;&nbsp;&nbsp;&nbsp;if(i+1&lt;5)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e^=p[i+1][j];<br>&nbsp;&nbsp;&nbsp;&nbsp;if(j-1&gt;0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e^=p[i][j-1];<br>&nbsp;&nbsp;&nbsp;&nbsp;if(j+1&lt;5)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e^=p[i][j+1];<br>&nbsp;&nbsp;&nbsp;&nbsp;t.s=e;<br>&nbsp;&nbsp;&nbsp;&nbsp;t.c=n.c+1;<br>&nbsp;&nbsp;&nbsp;&nbsp;if(!flag[e])<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q.push(t);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag[e]=1;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;if(t.s==0||t.s==65535)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n.s=t.s;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n.c=t.c;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f=1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;if(f==1)<br>&nbsp;&nbsp;&nbsp;break;<br>&nbsp;}<br>&nbsp;if(f==1)<br>&nbsp;&nbsp;printf("%d\n",n.c);<br>&nbsp;else<br>&nbsp;&nbsp;printf("Impossible\n");<br>&nbsp;return 0;<br>}</span></pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/100905.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2009-11-14 00:07 <a href="http://www.cppblog.com/NARUTOACM/archive/2009/11/14/100905.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ1953解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2009/11/09/100471.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Mon, 09 Nov 2009 07:12:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2009/11/09/100471.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/100471.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2009/11/09/100471.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/100471.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/100471.html</trackback:ping><description><![CDATA[<p class=pst>Problem 1953 World Cup Noise<br><br>Description</p>
<div class=ptx lang=zh-CN><strong>Background</strong> <br>"KO-RE-A, KO-RE-A" shout 54.000 happy football fans after their team has reached the semifinals of the FIFA World Cup in their home country. But although their excitement is real, the Korean people are still very organized by nature. For example, they have organized huge trumpets (that sound like blowing a ship's horn) to support their team playing on the field. The fans want to keep the level of noise constant throughout the match. <br>The trumpets are operated by compressed gas. However, if you blow the trumpet for 2 seconds without stopping it will break. So when the trumpet makes noise, everything is okay, but in a pause of the trumpet,the fans must chant "KO-RE-A"! <br>Before the match, a group of fans gathers and decides on a chanting pattern. The pattern is a sequence of 0's and 1's which is interpreted in the following way: If the pattern shows a 1, the trumpet is blown. If it shows a 0, the fans chant "KO-RE-A". To ensure that the trumpet will not break, the pattern is not allowed to have two consecutive 1's in it. <br><strong>Problem</strong> <br>Given a positive integer n, determine the number of different chanting patterns of this length, i.e., determine the number of n-bit sequences that contain no adjacent 1's. For example, for n = 3 the answer is 5 (sequences 000, 001, 010, 100, 101 are acceptable while 011, 110, 111 are not).</div>
<p class=pst>Input</p>
<div class=ptx lang=zh-CN>The first line contains the number of scenarios. <br>For each scenario, you are given a single positive integer less than 45 on a line by itself.</div>
<p class=pst>Output</p>
<div class=ptx lang=zh-CN>The output for every scenario begins with a line containing "Scenario #i:", where i is the number of the scenario starting at 1. Then print a single line containing the number of n-bit sequences which have no adjacent 1's. Terminate the output for the scenario with a blank line.</div>
<p class=pst>Sample Input</p>
<pre class=sio>2
3
1</pre>
<p class=pst>Sample Output</p>
<pre class=sio>Scenario #1:
5
Scenario #2:
2</pre>
<pre class=sio>&nbsp;
<h2><span>解题思路</span></h2>
<p align=left><strong><span>题意：</span></strong><strong></strong></p>
<p><span>找出</span><span>n</span><span>位</span><span>0</span><span>或</span><span>1</span><span>的组成的排列的总数，其中不能出现连续的</span><span>1.</span><span>比如</span><span>n=3.</span><span>那么有这么几种排列：</span><span>000 001 010 100 101.</span><span>如果这样：</span><span>011 110 111</span><span>就不行，因为出现了连续的</span><span>1.</span></p>
<p><strong><span>思路：</span></strong></p>
<p><span>如果一种情况一种情况的搜的话，那么</span><span>n</span><span>比较大时，</span><span>2^n</span><span>种情况显然会</span><span>TLE</span><span>。这里，我们可以发现如下规律：</span></p>
<p><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>总数</span><span>=</span><span>以</span><span>0</span><span>为尾的总数</span><span>+</span><span>以</span><span>1</span><span>为尾的总数。（这显然，无需证明）</span></p>
<p><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>设</span><span>p0[i]</span><span>为</span><span>i</span><span>位时以</span><span>0</span><span>结尾的总数，</span><span>p1[i]</span><span>为</span><span>i</span><span>位时以</span><span>1</span><span>结尾的总数。那么：</span><span>p0[i+1]=p0[i]+p1[i];p1[i+1]=p0[i];<span>&nbsp;&nbsp; </span></span><span>证明：</span><span>i</span><span>位时，我们可以在那些数的基础上往后添加</span><span>0</span><span>或</span><span>1.</span><span>当添</span><span>0</span><span>时，所有的数都可以，即得到了</span><span>i+1</span><span>位时以</span><span>0</span><span>为尾的总数。当添加</span><span>1</span><span>时，因为不能出现连续</span><span>1</span><span>，所以只能在</span><span>i</span><span>位的以</span><span>0</span><span>结尾的数的后面加</span><span>1.</span></p>
<p><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>p0[1]=1;p1[1]=1;</span><span>（显然）</span></p>
<p><span>于是这题就变成水了。。源代码如下：</span></p>
<h2><span>源程序</span></h2>
<span>#include&lt;iostream&gt;<br>using namespace std;<br>int p1[46];<br>int p0[46];<br>int main()<br>{<br>&nbsp;int i;<br>&nbsp;p1[1]=1;p0[1]=1;<br>&nbsp;for(i=2;i&lt;=45;i++)<br>&nbsp;{<br>&nbsp;&nbsp;p1[i]=p0[i-1];<br>&nbsp;&nbsp;p0[i]=p0[i-1]+p1[i-1];<br>&nbsp;}<br>&nbsp;int n,t,c=0;<br>&nbsp;scanf("%d",&amp;t);<br>&nbsp;while(t--)<br>&nbsp;{<br>&nbsp;&nbsp;c++;<br>&nbsp;&nbsp;scanf("%d",&amp;n);<br>&nbsp;&nbsp;printf("Scenario #%d:\n%d\n\n",c,p1[n]+p0[n]);<br>&nbsp;}<br>&nbsp;return 0;<br>}</span></pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/100471.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2009-11-09 15:12 <a href="http://www.cppblog.com/NARUTOACM/archive/2009/11/09/100471.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ1163解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2009/11/09/100470.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Mon, 09 Nov 2009 06:48:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2009/11/09/100470.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/100470.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2009/11/09/100470.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/100470.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/100470.html</trackback:ping><description><![CDATA[<p class=pst>Problem 1163 The Triangle<br><br>Description</p>
<div class=ptx lang=zh-CN>
<center>
<pre>7<br>3   8<br>8   1   0<br>2   7   4   4<br>4   5   2   6   5<br><br>(Figure 1)</pre>
</center>Figure 1 shows a number triangle. Write a program that calculates the highest sum of numbers passed on a route that starts at the top and ends somewhere on the base. Each step can go either diagonally down to the left or diagonally down to the right. <br></div>
<p class=pst>Input</p>
<div class=ptx lang=zh-CN>Your program is to read from standard input. The first line contains one integer N: the number of rows in the triangle. The following N lines describe the data of the triangle. The number of rows in the triangle is &gt; 1 but &lt;= 100. The numbers in the triangle, all integers, are between 0 and 99. </div>
<p class=pst>Output</p>
<div class=ptx lang=zh-CN>Your program is to write to standard output. The highest sum is written as an integer.</div>
<p class=pst>Sample Input</p>
<pre class=sio>5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5</pre>
<p class=pst>Sample Output</p>
<pre class=sio>30</pre>
<pre class=sio>&nbsp;
<h2><span>解题思路</span></h2>
<p align=left><strong><span>题意：</span></strong><strong></strong></p>
<p><span>一三角形，从头找一条线路一直到最底层，让这条路上的数的和最大。并且每步只能往下一层的左斜对角或右斜对角走。</span></p>
<p><strong><span>思路：</span></strong></p>
<p><span>显然的</span><span>dp</span><span>之。。。。我分别写了从上往下和从下往上</span><span>dp</span><span>。感觉从下往上容易多了。下面是源代码：</span></p>
<h2><span>源程序</span></h2>
<p><span>从上往下：</span></p>
<span>#include&lt;iostream&gt;<br>using namespace std;<br>int p[101][101];<br>int m[101][101]; <span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">//</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-size: 11.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">记录从第一层到第</span><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">i</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-size: 11.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">层第</span><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">j</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-size: 11.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">个数能达到的最大值</span><br>int MAX[101];  <span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">//</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-size: 11.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">记录从第一层到第</span><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">i</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-size: 11.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">层能达到的最大值</span><br>int main()<br>{<br>&nbsp;int N,i,j;<br>&nbsp;cin&gt;&gt;N;<br>&nbsp;for(i=1;i&lt;=N;i++)<br>&nbsp;{<br>&nbsp;&nbsp;for(j=1;j&lt;=i;j++)<br>&nbsp;&nbsp;&nbsp;cin&gt;&gt;p[i][j];<br>&nbsp;}<br>&nbsp;for(i=1;i&lt;=N;i++)<br>&nbsp;{<br>&nbsp;&nbsp;for(j=1;j&lt;=i;j++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if(j==1)  <span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">//</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-size: 11.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">在这层的第一个时，显然只有上层第一个才能选这条路</span><br>&nbsp;&nbsp;&nbsp;&nbsp;m[i][j]=m[i-1][j]+p[i][j];<br>&nbsp;&nbsp;&nbsp;else if(j==i)  <span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">//</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-size: 11.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">同第一个的情况</span><br>&nbsp;&nbsp;&nbsp;&nbsp;m[i][j]=m[i-1][j-1]+p[i][j];<br>&nbsp;&nbsp;&nbsp;else  <span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">//</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-size: 11.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">在中间时，上一层就可以有两种选择了</span><br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;if(m[i-1][j-1]+p[i][j]&gt;m[i-1][j]+p[i][j])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m[i][j]=m[i-1][j-1]+p[i][j];<br>&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m[i][j]=m[i-1][j]+p[i][j];<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;if(m[i][j]&gt;MAX[i])<br>&nbsp;&nbsp;&nbsp;&nbsp;MAX[i]=m[i][j];<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;cout&lt;&lt;MAX[N]&lt;&lt;endl;<br>&nbsp;return 0;<br>}<br>从下往上：<br>#include&lt;iostream&gt;<br>using namespace std;<br>int p[105][105];<br>int m[105][105]; <span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">//</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-size: 11.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">记录从第</span><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">i</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-size: 11.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">层到最后一层所能达到的最大值</span><br>int main()<br>{<br>&nbsp;int i,j;<br>&nbsp;int n;<br>&nbsp;scanf("%d",&amp;n);<br>&nbsp;for(i=1;i&lt;=n;i++)<br>&nbsp;{<br>&nbsp;&nbsp;for(j=1;j&lt;=i;j++)<br>&nbsp;&nbsp;&nbsp;scanf("%d",&amp;p[i][j]);<br>&nbsp;}<br>&nbsp;for(i=n;i&gt;=1;i--)<br>&nbsp;{<br>&nbsp;&nbsp;for(j=1;j&lt;=i;j++)<br>&nbsp;&nbsp;&nbsp;m[i][j]=m[i+1][j]&gt;m[i+1][j+1]?m[i+1][j]+p[i][j]:m[i+1][j+1]+p[i][j]; <span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">//</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-size: 11.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">每个都有两种选择</span><br>&nbsp;}<br>&nbsp;printf("%d\n",m[1][1]);<br>&nbsp;return 0;<br>}</span></pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/100470.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2009-11-09 14:48 <a href="http://www.cppblog.com/NARUTOACM/archive/2009/11/09/100470.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ3083解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2009/10/29/99722.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Thu, 29 Oct 2009 02:25:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2009/10/29/99722.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/99722.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2009/10/29/99722.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/99722.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/99722.html</trackback:ping><description><![CDATA[<p class=pst>Problem 3083 Children of the Candy Corn<br><br>Description</p>
<div class=ptx lang=en-US>The cornfield maze is a popular Halloween treat. Visitors are shown the entrance and must wander through the maze facing zombies, chainsaw-wielding psychopaths, hippies, and other terrors on their quest to find the exit. <br><br>One popular maze-walking strategy guarantees that the visitor will eventually find the exit. Simply choose either the right or left wall, and follow it. Of course, there's no guarantee which strategy (left or right) will be better, and the path taken is seldom the most efficient. (It also doesn't work on mazes with exits that are not on the edge; those types of mazes are not represented in this problem.) <br><br>As the proprieter of a cornfield that is about to be converted into a maze, you'd like to have a computer program that can determine the left and right-hand paths along with the shortest path so that you can figure out which layout has the best chance of confounding visitors. </div>
<p class=pst>Input</p>
<div class=ptx lang=en-US>Input to this problem will begin with a line containing a single integer n indicating the number of mazes. Each maze will consist of one line with a width, w, and height, h (3 &lt;= w, h &lt;= 40), followed by h lines of w characters each that represent the maze layout. Walls are represented by hash marks ('#'), empty space by periods ('.'), the start by an 'S' and the exit by an 'E'. <br><br>Exactly one 'S' and one 'E' will be present in the maze, and they will always be located along one of the maze edges and never in a corner. The maze will be fully enclosed by walls ('#'), with the only openings being the 'S' and 'E'. The 'S' and 'E' will also be separated by at least one wall ('#'). <br><br>You may assume that the maze exit is always reachable from the start point. </div>
<p class=pst>Output</p>
<div class=ptx lang=en-US>For each maze in the input, output on a single line the number of (not necessarily unique) squares that a person would visit (including the 'S' and 'E') for (in order) the left, right, and shortest paths, separated by a single space each. Movement from one square to another is only allowed in the horizontal or vertical direction; movement along the diagonals is not allowed.</div>
<p class=pst>Sample Input</p>
<pre class=sio>2
8 8
########
#......#
#.####.#
#.####.#
#.####.#
#.####.#
#...#..#
#S#E####
9 5
#########
#.#.#.#.#
S.......E
#.#.#.#.#
#########</pre>
<p class=pst>Sample Output</p>
<pre class=sio>37 5 5
17 17 9</pre>
<pre class=sio>&nbsp;
<h2><span>解题思路</span></h2>
<p align=left><strong><span>题意：</span></strong><strong></strong></p>
<p><span>题目意思是给你一个迷宫，有起点和终点，让你分别求出往左搜和往右搜需走的距离和所到达终点能走的最短距离。</span></p>
<p><strong><span>思路：</span></strong></p>
<p><span>思路就是搜索，求最短用</span><span>bfs</span><span>，四个方向一起搜，应该比深搜要快些。求往左和往右就用</span><span>dfs</span><span>，注意设置目前方向，相当于模拟往左的过程。源代码如下：</span></p>
<h2><span>源程序</span></h2>
<span>#include&lt;iostream&gt;<br>#include&lt;queue&gt;<br>using namespace std;<br>int step[4][2]={{-1,0},{0,-1},{1,0},{0,1}};<br><br>int W,H;<br>int sx,sy;<br>char g[50][50];<br>int toward;<br>int find(char *a,char x)<br>{<br>&nbsp;int i;<br>&nbsp;int len=strlen(a);<br>&nbsp;for(i=0;i&lt;len;i++)<br>&nbsp;{<br>&nbsp;&nbsp;if(a[i]==x)<br>&nbsp;&nbsp;&nbsp;return i;<br>&nbsp;}<br>&nbsp;return -1;<br>}<br>int BFS(int sx,int sy)<br>{<br>&nbsp;int i;<br>&nbsp;int cnt[50][50];<br>&nbsp;memset(cnt,0,sizeof(cnt));<br>&nbsp;queue&lt; pair&lt;int,int&gt; &gt;q;<br>&nbsp;pair&lt;int,int&gt;p=make_pair(sx,sy);<br>&nbsp;cnt[sx][sy]=1;<br>&nbsp;q.push(p);<br>&nbsp;while(!q.empty())<br>&nbsp;{<br>&nbsp;&nbsp;p=q.front();q.pop();<br>&nbsp;&nbsp;if(g[p.first][p.second]=='E')<br>&nbsp;&nbsp;&nbsp;return cnt[p.first][p.second];<br>&nbsp;&nbsp;for(i=0;i&lt;4;i++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;int x1=p.first+step[i][0];<br>&nbsp;&nbsp;&nbsp;int y1=p.second+step[i][1];<br>&nbsp;&nbsp;&nbsp;if(x1&gt;=0&amp;&amp;x1&lt;H&amp;&amp;y1&gt;=0&amp;&amp;y1&lt;W&amp;&amp;g[x1][y1]!='#'&amp;&amp;!cnt[x1][y1])<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;cnt[x1][y1]=cnt[p.first][p.second]+1;<br>&nbsp;&nbsp;&nbsp;&nbsp;q.push(make_pair(x1,y1));<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;return 0;<br>}<br>int DFS(int sx,int sy,int toward,char mark)<br>{<br>&nbsp;int i;<br>&nbsp;if(g[sx][sy]=='E')<br>&nbsp;&nbsp;return 1;<br>&nbsp;if(mark=='l')<br>&nbsp;{<br>&nbsp;&nbsp;for(i=toward+1;i&gt;=toward-2;i--)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;int t=(8+i)&amp;3;<br>&nbsp;&nbsp;&nbsp;int x1=sx+step[t][0];<br>&nbsp;&nbsp;&nbsp;int y1=sy+step[t][1];<br>&nbsp;&nbsp;&nbsp;if(x1&lt;H&amp;&amp;x1&gt;=0&amp;&amp;y1&gt;=0&amp;&amp;y1&lt;W&amp;&amp;g[x1][y1]!='#')<br>&nbsp;&nbsp;&nbsp;&nbsp;return 1+DFS(x1,y1,t,mark);<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;else if(mark=='r')<br>&nbsp;{<br>&nbsp;&nbsp;for(i=toward-1;i&lt;=toward+2;i++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;int t=(8+i)&amp;3;<br>&nbsp;&nbsp;&nbsp;int x1=sx+step[t][0];<br>&nbsp;&nbsp;&nbsp;int y1=sy+step[t][1];<br>&nbsp;&nbsp;&nbsp;if(x1&lt;H&amp;&amp;x1&gt;=0&amp;&amp;y1&gt;=0&amp;&amp;y1&lt;W&amp;&amp;g[x1][y1]!='#')<br>&nbsp;&nbsp;&nbsp;&nbsp;return 1+DFS(x1,y1,t,mark);<br>&nbsp;&nbsp;}<br>&nbsp;}<br>}<br>int main()<br>{<br>&nbsp;int t,i;<br>&nbsp;scanf("%d",&amp;t);<br>&nbsp;while(t--)<br>&nbsp;{<br>&nbsp;&nbsp;scanf("%d%d\n",&amp;W,&amp;H);<br>&nbsp;&nbsp;for(i=0;i&lt;H;i++)<br>&nbsp;&nbsp;&nbsp;gets(g[i]);<br>&nbsp;&nbsp;for(i=0;i&lt;H;i++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if((sy=find(g[i],'S'))!=-1)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;sx=i;<br>&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;if(sx==0)<br>&nbsp;&nbsp;&nbsp;toward=2;<br>&nbsp;&nbsp;else if(sx==H-1)<br>&nbsp;&nbsp;&nbsp;toward=0;<br>&nbsp;&nbsp;else if(sy==0)<br>&nbsp;&nbsp;&nbsp;toward=3;<br>&nbsp;&nbsp;else if(sy==W-1)<br>&nbsp;&nbsp;&nbsp;toward=1;<br>&nbsp;&nbsp;printf("%d %d %d\n",DFS(sx,sy,toward,'l'),DFS(sx,sy,toward,'r'),BFS(sx,sy));<br>&nbsp;}<br>&nbsp;return 0;<br>}</span></pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/99722.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2009-10-29 10:25 <a href="http://www.cppblog.com/NARUTOACM/archive/2009/10/29/99722.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ2192解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2009/10/22/99183.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Thu, 22 Oct 2009 04:35:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2009/10/22/99183.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/99183.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2009/10/22/99183.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/99183.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/99183.html</trackback:ping><description><![CDATA[<p class=pst>Problem 2192 Zipper<br><br>Description</p>
<div class=ptx lang=en-US>Given three strings, you are to determine whether the third string can be formed by combining the characters in the first two strings. The first two strings can be mixed arbitrarily, but each must stay in its original order. <br><br>For example, consider forming "tcraete" from "cat" and "tree": <br><br>String A: cat <br>String B: tree <br>String C: tcraete <br><br>As you can see, we can form the third string by alternating characters from the two strings. As a second example, consider forming "catrtee" from "cat" and "tree": <br><br>String A: cat <br>String B: tree <br>String C: catrtee <br><br>Finally, notice that it is impossible to form "cttaree" from "cat" and "tree". <br></div>
<p class=pst>Input</p>
<div class=ptx lang=en-US>The first line of input contains a single positive integer from 1 through 1000. It represents the number of data sets to follow. The processing for each data set is identical. The data sets appear on the following lines, one data set per line. <br><br>For each data set, the line of input consists of three strings, separated by a single space. All strings are composed of upper and lower case letters only. The length of the third string is always the sum of the lengths of the first two strings. The first two strings will have lengths between 1 and 200 characters, inclusive. <br></div>
<p class=pst>Output</p>
<div class=ptx lang=en-US>For each data set, print: <br><br>Data set n: yes <br><br>if the third string can be formed from the first two, or <br><br>Data set n: no <br><br>if it cannot. Of course n should be replaced by the data set number. See the sample output below for an example. <br></div>
<p class=pst>Sample Input</p>
<pre class=sio>3
cat tree tcraete
cat tree catrtee
cat tree cttaree
</pre>
<p class=pst>Sample Output</p>
<pre class=sio>Data set 1: yes
Data set 2: yes
Data set 3: no</pre>
<pre class=sio>&nbsp;
<h2><span>解题思路</span></h2>
<p align=left><strong><span>题意：</span></strong><strong></strong></p>
<p><span>看两个字符串能不能组成第三个字符串，而且字符串中的字符顺序保持不变。</span></p>
<p><strong><span>思路：</span></strong></p>
<p><span>本题是几个朋友聊着就随便发现的一道题，开始朋友说是用</span><span>dp</span><span>，想了下没思路，就人肉之。开始写了个</span><span>void</span><span>型的搜索，结果一直</span><span>WA</span><span>，后来把他改为</span><span>bool</span><span>型的搜索，就过了。。。神奇。思路。。。就人肉无所谓思路。。就直接发代码吧。。</span></p>
<p><span>现把两份代码，一份</span><span>WA</span><span>的，一份</span><span>A</span><span>的都发下，希望大牛能指出我</span><span>WA</span><span>代码的错误。源代码如下：</span></p>
<h2><span>源程序</span></h2>
<p><span>AC</span><span>代码：</span><span><br>#include&lt;iostream&gt;<br>using namespace std;<br>char a[300],b[300],c[600];<br>int lena,lenb,lenc;<br>bool search(int pa,int pb,int pc)<br>{<br>&nbsp;if(pa==lena)<br>&nbsp;{<br>&nbsp;&nbsp;for(pb;pb&lt;lenb;pb++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if(b[pb]!=c[pc++])<br>&nbsp;&nbsp;&nbsp;&nbsp;return false;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;return true;<br>&nbsp;}<br>&nbsp;if(pb==lenb)<br>&nbsp;{<br>&nbsp;&nbsp;for(pa;pa&lt;lena;pa++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if(a[pa]!=c[pc++])<br>&nbsp;&nbsp;&nbsp;&nbsp;return false;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;return true;<br>&nbsp;}<br>&nbsp;if(c[pc]!=a[pa]&amp;&amp;c[pc]!=b[pb])<br>&nbsp;&nbsp;return false;<br>&nbsp;if(c[pc]==a[pa])<br>&nbsp;{<br>&nbsp;&nbsp;if(search(pa+1,pb,pc+1))<br>&nbsp;&nbsp;&nbsp;return true;<br>&nbsp;&nbsp;else<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if(c[pc]=b[pb])<br>&nbsp;&nbsp;&nbsp;&nbsp;return search(pa,pb+1,pc+1);<br>&nbsp;&nbsp;&nbsp;return false;<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;if(c[pc]=b[pb])<br>&nbsp;{<br>&nbsp;&nbsp;if(search(pa,pb+1,pc+1))<br>&nbsp;&nbsp;&nbsp;return true;<br>&nbsp;&nbsp;else<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if(c[pc]==a[pa])<br>&nbsp;&nbsp;&nbsp;&nbsp;return search(pa+1,pb,pc+1);<br>&nbsp;&nbsp;&nbsp;return false;<br>&nbsp;&nbsp;}<br>&nbsp;}<br>}<br>int main()<br>{<br>&nbsp;int T,test=0;<br>&nbsp;int pa,pb,pc;<br>&nbsp;scanf("%d",&amp;T);<br>&nbsp;getchar();<br>&nbsp;while(T--)<br>&nbsp;{<br>&nbsp;&nbsp;test++;<br>&nbsp;&nbsp;pa=pb=pc=0;<br>&nbsp;&nbsp;scanf("%s%s%s",a,b,c);<br>&nbsp;&nbsp;lena=strlen(a);<br>&nbsp;&nbsp;lenb=strlen(b);<br>&nbsp;&nbsp;lenc=strlen(c);<br>&nbsp;&nbsp;if((lena+lenb!=lenc)||(c[lenc-1]!=a[lena-1]&amp;&amp;c[lenc-1]!=b[lenb-1]))<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;printf("Data set %d: no\n",test);<br>&nbsp;&nbsp;&nbsp;continue;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;if(!search(pa,pb,pc))<br>&nbsp;&nbsp;&nbsp;printf("Data set %d: no\n",test);<br>&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;printf("Data set %d: yes\n",test);<br>&nbsp;}<br>&nbsp;return 0;<br>}<br></span></p>
&nbsp;
<p><span>WA</span><span>代码：（由于改了多次，写的好乱。。）</span></p>
<pre><span><span>#include</span></span><span><span>&lt;iostream&gt;</span></span></pre>
<pre><span><span>using</span></span><span> <span>namespace</span> std<span>;</span></span></pre>
<pre><span><span>char</span></span><span> a<span>[</span><span>300</span><span>],</span>b<span>[</span><span>300</span><span>],</span>c<span>[</span><span>600</span><span>];</span></span></pre>
<pre><span><span>int</span></span><span> lena<span>,</span>lenb<span>,</span>lenc<span>;</span></span></pre>
<pre><span><span>bool</span></span><span> ok<span>=</span><span>false</span><span>;</span></span></pre>
<pre><span><span>bool</span></span><span> iok<span>=</span><span>false</span><span>;</span></span></pre>
<pre><span><span>void</span></span><span> <span>search</span><span>(</span><span>int</span> pa<span>,</span><span>int</span> pb<span>,</span><span>int</span> pc<span>)</span></span></pre>
<pre><span><span>{</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>if</span><span>(</span>iok<span>)</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>return</span><span>;</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>if</span><span>(</span>ok<span>)</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>return</span><span>;</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>if</span><span>(</span>pa<span>==</span>lena<span>)</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>{</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span><span>(</span>pb<span>;</span>pb<span>&lt;</span>lenb<span>;</span>pb<span>++)</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>{</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>if</span><span>(</span>b<span>[</span>pb<span>]!=</span>c<span>[</span>pc<span>++])</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>break</span><span>;</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>}</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>if</span><span>(</span>pb<span>==</span>lenb<span>)</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ok<span>=</span><span>true</span><span>;</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>return</span><span>;</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>}</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>if</span><span>(</span>pb<span>==</span>lenb<span>)</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>{</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>for</span><span>(</span>pa<span>;</span>pa<span>&lt;</span>lena<span>;</span>pa<span>++)</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>{</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>if</span><span>(</span>a<span>[</span>pa<span>]!=</span>c<span>[</span>pc<span>++])</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>break</span><span>;</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>}</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>if</span><span>(</span>pa<span>==</span>lena<span>)</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ok<span>=</span><span>true</span><span>;</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>return</span><span>;</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>}</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>if</span><span>(</span>c<span>[</span>pc<span>]!=</span>a<span>[</span>pa<span>]&amp;&amp;</span>c<span>[</span>pc<span>]!=</span>b<span>[</span>pb<span>])</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>{</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>iok<span>=</span><span>true</span><span>;</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>return</span><span>;</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>}</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>if</span><span>(</span>iok<span>)</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>return</span><span>;</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>if</span><span>(</span>c<span>[</span>pc<span>]==</span>a<span>[</span>pa<span>])</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>search</span><span>(</span>pa<span>+1</span><span>,</span>pb<span>,</span>pc<span>+1</span><span>);</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>if</span><span>(</span>ok<span>)</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>return</span><span>;</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>if</span><span>(</span>c<span>[</span>pc<span>]=</span>b<span>[</span>pb<span>])</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>search</span><span>(</span>pa<span>,</span>pb<span>+1</span><span>,</span>pc<span>+1</span><span>);</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>if</span><span>(</span>ok<span>)</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>return</span><span>;</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>if</span><span>(</span>iok<span>)</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>return</span><span>;</span></span></pre>
<pre><span><span>}</span></span></pre>
<pre><span><span>int</span></span><span> <span>main</span><span>()</span></span></pre>
<pre><span><span>{</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>int</span> T<span>,</span>test<span>=</span><span>0</span><span>;</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>int</span> pa<span>,</span>pb<span>,</span>pc<span>;</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>scanf</span><span>(</span><span>"%d"</span><span>,&amp;</span>T<span>);</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>getchar</span><span>();</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>while</span><span>(</span>T<span>--)</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>{</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>iok<span>=</span>ok<span>=</span><span>false</span><span>;</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>test<span>++;</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>pa<span>=</span>pb<span>=</span>pc<span>=</span><span>0</span><span>;</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>scanf</span><span>(</span><span>"%s%s%s"</span><span>,</span>a<span>,</span>b<span>,</span>c<span>);</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>lena<span>=</span><span>strlen</span><span>(</span>a<span>);</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>lenb<span>=</span><span>strlen</span><span>(</span>b<span>);</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>lenc<span>=</span><span>strlen</span><span>(</span>c<span>);</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span><span>if</span><span>(</span>lena<span>+</span>lenb<span>!=</span>lenc<span>||(</span>c<span>[</span>lenc<span>-1</span><span>]!=</span>a<span>[</span>lena<span>-1</span><span>]&amp;&amp;</span>c<span>[</span>lenc<span>-1</span><span>]!=</span>b<span>[</span>lenb<span>-1</span><span>]))</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>{</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>printf</span><span>(</span><span>"Data set %d: no</span><span>\n</span><span>"</span><span>,</span>test<span>);</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>continue</span><span>;</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>}</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>search</span><span>(</span>pa<span>,</span>pb<span>,</span>pc<span>);</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>if</span><span>(!</span>ok<span>)</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>printf</span><span>(</span><span>"Data set %d: no</span><span>\n</span><span>"</span><span>,</span>test<span>);</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>else</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>printf</span><span>(</span><span>"Data set %d: yes</span><span>\n</span><span>"</span><span>,</span>test<span>);</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>}</span></span></pre>
<pre><span><span>&nbsp;&nbsp;&nbsp; </span><span>return</span> <span>0</span><span>;</span></span></pre>
<span><span>}</span></span></pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/99183.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2009-10-22 12:35 <a href="http://www.cppblog.com/NARUTOACM/archive/2009/10/22/99183.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ3252解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2009/10/04/97851.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Sun, 04 Oct 2009 09:08:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2009/10/04/97851.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/97851.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2009/10/04/97851.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/97851.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/97851.html</trackback:ping><description><![CDATA[<p class=pst>Problem 3252 Round Numbers<br><br>Description</p>
<div class=ptx lang=zh-CN>
<p>The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, Paper, Stone' (also known as 'Rock, Paper, Scissors', 'Ro, Sham, Bo', and a host of other names) in order to make arbitrary decisions such as who gets to be milked first. They can't even flip a coin because it's so hard to toss using hooves.</p>
<p>They have thus resorted to "round number" matching. The first cow picks an integer less than two billion. The second cow does the same. If the numbers are both "round numbers", the first cow wins,<br>otherwise the second cow wins.</p>
<p>A positive integer <em>N</em> is said to be a "round number" if the binary representation of <em>N</em> has as many or more zeroes than it has ones. For example, the integer 9, when written in binary form, is 1001. 1001 has two zeroes and two ones; thus, 9 is a round number. The integer 26 is 11010 in binary; since it has two zeroes and three ones, it is not a round number.</p>
<p>Obviously, it takes cows a while to convert numbers to binary, so the winner takes a while to determine. Bessie wants to cheat and thinks she can do that if she knows how many "round numbers" are in a given range.</p>
<p>Help her by writing a program that tells how many round numbers appear in the inclusive range given by the input (1 &#8804; <em>Start</em> &lt; <em>Finish</em> &#8804; 2,000,000,000).</p>
</div>
<p class=pst>Input</p>
<div class=ptx lang=zh-CN>Line 1: Two space-separated integers, respectively <em>Start</em> and <em>Finish</em>.</div>
<p class=pst>Output</p>
<div class=ptx lang=zh-CN>Line 1: A single integer that is the count of round numbers in the inclusive range <em>Start</em>..<em>Finish</em></div>
<p class=pst>Sample Input</p>
<pre class=sio>2 12</pre>
<p class=pst>Sample Output</p>
<pre class=sio>6</pre>
<pre class=sio>&nbsp;
<h2><span>解题思路</span></h2>
<p align=left><strong><span>题意：</span></strong><strong></strong></p>
<p><span>让你找两个数之间有多少个</span><span>round number</span><span>。</span><span>round number</span><span>的定义是：把一个数化成</span><span>2</span><span>进制，如果</span><span>0</span><span>的个数</span><span>&gt;=1</span><span>的个数。那么该数为</span><span>round number</span><span>。</span></p>
<p><strong><span>思路：</span></strong></p>
<p><span>计算出从</span><span>1</span><span>到</span><span>finish</span><span>之间有多少个</span><span>round number</span><span>，再算出从</span><span>1</span><span>到</span><span>start-1</span><span>之间有多少个</span><span>round number</span><span>。两者相减即为两者之间的数。之所以时算出从</span><span>1</span><span>到</span><span>start-1</span><span>，时因为如果</span><span>start</span><span>本身时一个</span><span>round number</span><span>，那么最后结果就会少</span><span>1. </span><span>计算的方法时先计算出</span><span>2</span><span>进制中每位都是</span><span>1</span><span>的数，这个很好计算，排列组合问题。麻烦的是计算该数从该数位数中最小的数到该数之间的</span><span>round number</span><span>。设</span><span>howmany(n,k)</span><span>为</span><span>2</span><span>进制为</span><span>n</span><span>位需要有</span><span>k</span><span>个</span><span>0</span><span>时的</span><span>round number</span><span>数。</span><span>B</span><span>数组记录该数的</span><span>2</span><span>进制的每一位。那么有递归公式：</span><span>howmany(n,k)=howmany(n-1,k-1)(if B[n-1]==0).howmany(n,k)=C(n-2,k-1)+howmany(n-1,k).(if B[n-1]==1,C</span><span>函数为组合</span><span>)</span><span>。</span></p>
<h2><span>源程序</span></h2>
<p>#include&lt;iostream&gt;<br>using namespace std;<br>int C[33][33];<br>int MAX[33]; <br>int B[33];<br>int tobinary(int b)<br>{<br>&nbsp;int i=1;<br>&nbsp;while(b)<br>&nbsp;{<br>&nbsp;&nbsp;B[i++]=b%2;<br>&nbsp;&nbsp;b/=2;<br>&nbsp;}<br>&nbsp;return i-1;<br>}<br>void init()<br>{<br>&nbsp;int i,j;<br>&nbsp;C[1][0]=C[1][1]=1;<br>&nbsp;for(i=2;i&lt;=32;i++)<br>&nbsp;{<br>&nbsp;&nbsp;C[i][0]=1;<br>&nbsp;&nbsp;for(j=1;j&lt;=i;j++)<br>&nbsp;&nbsp;&nbsp;C[i][j]=C[i-1][j]+C[i-1][j-1];<br>&nbsp;}<br>&nbsp;MAX[1]=0;<br>&nbsp;for(i=2;i&lt;=32;i++)<br>&nbsp;{<br>&nbsp;&nbsp;for(j=(i+1)/2;j&lt;i;j++)<br>&nbsp;&nbsp;&nbsp;MAX[i]+=C[i-1][j];<br>&nbsp;}<br>}<br>int howmany(int n,int k,int *p) <br>{<br>&nbsp;if(k&gt;=n||k&lt;0)<br>&nbsp;&nbsp;return 0;<br>&nbsp;if((n==1&amp;&amp;k==0)||(n==2&amp;&amp;k==1))<br>&nbsp;&nbsp;return 1;<br>&nbsp;if(p[n-1]==0)<br>&nbsp;&nbsp;return howmany(n-1,k-1,p);<br>&nbsp;else<br>&nbsp;&nbsp;return C[n-2][k-1]+howmany(n-1,k,p);<br>}<br>int compute(int n)<br>{<br>&nbsp;int i,ans=0;<br>&nbsp;int len=tobinary(n);<br>&nbsp;for(i=(len+1)/2;i&lt;len;i++)<br>&nbsp;&nbsp;ans+=howmany(len,i,B);<br>&nbsp;for(i=1;i&lt;len;i++)<br>&nbsp;&nbsp;ans+=MAX[i];<br>&nbsp;return ans;<br>}<br>int main()<br>{<br>&nbsp;init();<br>&nbsp;int start,finish;<br>&nbsp;scanf("%d%d",&amp;start,&amp;finish);<br>&nbsp;printf("%d\n",compute(finish)-compute(start-1));<br>&nbsp;return 0;<br>}</p>
</pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/97851.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2009-10-04 17:08 <a href="http://www.cppblog.com/NARUTOACM/archive/2009/10/04/97851.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ1161解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2009/10/04/97827.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Sun, 04 Oct 2009 03:34:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2009/10/04/97827.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/97827.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2009/10/04/97827.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/97827.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/97827.html</trackback:ping><description><![CDATA[<p class=pst>Problem 1161 Walls<br><br>Description</p>
<div class=ptx lang=zh-CN>In a country, great walls have been built in such a way that every great wall connects exactly two towns. The great walls do not cross each other. Thus, the country is divided into such regions that to move from one region to another, it is necessary to go through a town or cross a great wall. For any two towns A and B, there is at most one great wall with one end in A and the other in B, and further, it is possible to go from A to B by always walking in a town or along a great wall. The input format implies additional restrictions. <br><br>There is a club whose members live in the towns. In each town, there is only one member or there are no members at all. The members want to meet in one of the regions (outside of any town). The members travel riding their bicycles. They do not want to enter any towns, because of the traffic, and they want to cross as few great walls as possible, as it is a lot of trouble. To go to the meeting region, each member needs to cross a number (possibly 0) of great walls. They want to find such an optimal region that the sum of these numbers (crossing-sum, for short) is minimized. <br>
<center><img src="http://162.105.81.212/JudgeOnline/images/1161_1.jpg"></center><br>The towns are labeled with integers from 1 to N, where N is the number of towns. In Figure 1, the labeled nodes represent the towns and the lines connecting the nodes represent the great walls. Suppose that there are three members, who live in towns 3, 6, and 9. Then, an optimal meeting region and respective routes for members are shown in Figure 2. The crossing-sum is 2: the member from town 9 has to cross the great wall between towns 2 and 4, and the member from town 6 has to cross the great wall between towns 4 and 7. <br><br>You are to write a program which, given the towns, the regions, and the club member home towns, computes the optimal region(s) and the minimal crossing-sum. <br></div>
<p class=pst>Input</p>
<div class=ptx lang=zh-CN>Your program is to read from standard input. The first line contains one integer: the number of regions M, 2 &lt;= M &lt;= 200. The second line contains one integer: the number of towns N, 3 &lt;= N &lt;= 250. The third line contains one integer: the number of club members L, 1 &lt;= L &lt;= 30, L &lt;= N. The fourth line contains L distinct integers in increasing order: the labels of the towns where the members live. <br><br>After that the input contains 2M lines so that there is a pair of lines for each region: the first two of the 2M lines describe the first region, the following two the second and so on. Of the pair, the first line shows the number of towns I on the border of that region. The second line of the pair contains I integers: the labels of these I towns in some order in which they can be passed when making a trip clockwise along the border of the region, with the following exception. The last region is the "outside region" surrounding all towns and other regions, and for it the order of the labels corresponds to a trip in counterclockwise direction. The order of the regions gives an integer labeling to the regions: the first region has label 1, the second has label 2, and so on. Note that the input includes all regions formed by the towns and great walls, including the "outside region". <br></div>
<p class=pst>Output</p>
<div class=ptx lang=zh-CN>Your program is to write to standard output. The first line contains one integer: the minimal crossing-sum. </div>
<p class=pst>Sample Input</p>
<pre class=sio>10
10
3
3 6 9
3
1 2 3
3
1 3 7
4
2 4 7 3
3
4 6 7
3
4 8 6
3
6 8 7
3
4 5 8
4
7 8 10 9
3
5 10 8
7
7 9 10 5 4 2 1</pre>
<p class=pst>Sample Output</p>
<pre class=sio>2</pre>
<pre class=sio>&nbsp;
<h2><span>解题思路</span></h2>
<p align=left><strong><span>题意：</span></strong><strong></strong></p>
<p><span>题目意思是说有有几个人想去一个区域聚会，他们都住在某个城镇中，区域有长城围着的部分构成，外面也算一个区域。每<br>个点代表一个城镇，在每个城镇至多有一个人。聚会要求成员们不能进入别的城镇，只能跨过长城。让你选一个区域，使得<br>所有聚会成员所跨过的长城总数最少。</span></p>
<p><strong><span>思路：</span></strong><strong></strong></p>
<p><span>把区域结点化。相邻的区域之间的权值为</span><span>1</span><span>，否则为&#8734;。在用</span><span>floyd</span><span>求出各个区域之间的最短路径。再枚举每个区域，选最少<br>的。其中判断是否相邻我用的是笨办法，看看我的程序就知道了。哪位大牛有更好的方法希望传授下。源代码如下：</span></p>
<h2><span>源程序</span></h2>
<p><span>#include&lt;iostream&gt;<br>using namespace std;<br>const int MAXN=260;<br>const int INF=1000000000;<br>struct region<br>{<br>&nbsp;int v;<br>&nbsp;region *next;<br>}* reg[MAXN];<br>int M,N,L;<br>int club[31];<br>int dist[MAXN][MAXN];<br>void add(int i,int v,region *p[])<br>{<br>&nbsp;region *q=new region[1];<br>&nbsp;q-&gt;v=v;<br>&nbsp;q-&gt;next=p[i];<br>&nbsp;p[i]=q;<br>}<br>bool islink(region *p,region *q)<br>{<br>&nbsp;int a[MAXN],aa=0,i,j,b[MAXN],bb=0;<br>&nbsp;for(p;p;p=p-&gt;next)<br>&nbsp;&nbsp;a[aa++]=p-&gt;v;<br>&nbsp;a[aa]=a[0];<br>&nbsp;for(q;q;q=q-&gt;next)<br>&nbsp;&nbsp;b[bb++]=q-&gt;v;<br>&nbsp;b[bb]=b[0];<br>&nbsp;for(i=0;i&lt;aa;i++)<br>&nbsp;{<br>&nbsp;&nbsp;for(j=0;j&lt;bb;j++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if((a[i]==b[j]&amp;&amp;a[i+1]==b[j+1])||(a[i]==b[j+1]&amp;&amp;a[i+1]==b[j]))<br>&nbsp;&nbsp;&nbsp;&nbsp;return true;<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;return false;<br>}<br>bool iscontain(int v,region *p)<br>{<br>&nbsp;for(p;p;p=p-&gt;next)<br>&nbsp;{<br>&nbsp;&nbsp;if(p-&gt;v==v)<br>&nbsp;&nbsp;&nbsp;return true;<br>&nbsp;}<br>&nbsp;return false;<br>}<br>int main()<br>{<br>&nbsp;int i,j,k,num,town;<br>&nbsp;scanf("%d%d%d",&amp;M,&amp;N,&amp;L);<br>&nbsp;for(i=1;i&lt;=L;i++)<br>&nbsp;&nbsp;scanf("%d",club+i);<br>&nbsp;for(i=1;i&lt;=M;i++)<br>&nbsp;{<br>&nbsp;&nbsp;scanf("%d",&amp;num);<br>&nbsp;&nbsp;for(j=1;j&lt;=num;j++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;scanf("%d",&amp;town);<br>&nbsp;&nbsp;&nbsp;add(i,town,reg);<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;for(i=1;i&lt;=M;i++)<br>&nbsp;{<br>&nbsp;&nbsp;for(j=i;j&lt;=M;j++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if(islink(reg[i],reg[j]))<br>&nbsp;&nbsp;&nbsp;&nbsp;dist[i][j]=dist[j][i]=1;<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;dist[i][j]=dist[j][i]=INF;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;dist[i][i]=0;<br>&nbsp;}<br>&nbsp;for(k=1;k&lt;=M;k++)<br>&nbsp;{<br>&nbsp;&nbsp;for(i=1;i&lt;=M;i++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;for(j=1;j&lt;=M;j++)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;if(dist[i][j]&gt;dist[i][k]+dist[k][j])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[i][j]=dist[i][k]+dist[k][j];<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;int MIN=INF,sum,mmin;<br>&nbsp;for(i=1;i&lt;=M;i++)<br>&nbsp;{<br>&nbsp;&nbsp;sum=0;<br>&nbsp;&nbsp;for(j=1;j&lt;=L;j++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;mmin=INF;<br>&nbsp;&nbsp;&nbsp;for(k=1;k&lt;=M;k++)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;if(iscontain(club[j],reg[k])&amp;&amp;dist[k][i]&lt;mmin)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mmin=dist[k][i];<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;sum+=mmin;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;if(sum&lt;MIN)<br>&nbsp;&nbsp;&nbsp;MIN=sum;<br>&nbsp;}<br>&nbsp;printf("%d\n",MIN);<br>&nbsp;return 0;<br>}</span></p>
</pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/97827.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2009-10-04 11:34 <a href="http://www.cppblog.com/NARUTOACM/archive/2009/10/04/97827.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ1511解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2009/10/01/97700.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Thu, 01 Oct 2009 09:54:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2009/10/01/97700.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/97700.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2009/10/01/97700.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/97700.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/97700.html</trackback:ping><description><![CDATA[<p class=pst>Problem 1511 Invitation Cards<br><br>Description</p>
<div class=ptx lang=en-US>In the age of television, not many people attend theater performances. Antique Comedians of Malidinesia are aware of this fact. They want to propagate theater and, most of all, Antique Comedies. They have printed invitation cards with all the necessary information and with the programme. A lot of students were hired to distribute these invitations among the people. Each student volunteer has assigned exactly one bus stop and he or she stays there the whole day and gives invitation to people travelling by bus. A special course was taken where students learned how to influence people and what is the difference between influencing and robbery. <br><br>The transport system is very special: all lines are unidirectional and connect exactly two stops. Buses leave the originating stop with passangers each half an hour. After reaching the destination stop they return empty to the originating stop, where they wait until the next full half an hour, e.g. X:00 or X:30, where 'X' denotes the hour. The fee for transport between two stops is given by special tables and is payable on the spot. The lines are planned in such a way, that each round trip (i.e. a journey starting and finishing at the same stop) passes through a Central Checkpoint Stop (CCS) where each passenger has to pass a thorough check including body scan. <br><br>All the ACM student members leave the CCS each morning. Each volunteer is to move to one predetermined stop to invite passengers. There are as many volunteers as stops. At the end of the day, all students travel back to CCS. You are to write a computer program that helps ACM to minimize the amount of money to pay every day for the transport of their employees. <br></div>
<p class=pst>Input</p>
<div class=ptx lang=en-US>The input consists of N cases. The first line of the input contains only positive integer N. Then follow the cases. Each case begins with a line containing exactly two integers P and Q, 1 &lt;= P,Q &lt;= 1000000. P is the number of stops including CCS and Q the number of bus lines. Then there are Q lines, each describing one bus line. Each of the lines contains exactly three numbers - the originating stop, the destination stop and the price. The CCS is designated by number 1. Prices are positive integers the sum of which is smaller than 1000000000. You can also assume it is always possible to get from any stop to any other stop. </div>
<p class=pst>Output</p>
<div class=ptx lang=en-US>For each case, print one line containing the minimum amount of money to be paid each day by ACM for the travel costs of its volunteers. </div>
<p class=pst>Sample Input</p>
<pre class=sio>2
2 2
1 2 13
2 1 33
4 6
1 2 10
2 1 60
1 3 20
3 4 10
2 4 5
4 1 50</pre>
<p class=pst>Sample Output</p>
<pre class=sio>46
210</pre>
<pre class=sio>&nbsp;
<h2><span>解题思路</span></h2>
<p align=left><strong><span>题意：</span></strong><strong></strong></p>
<p><span>题目意思是要把学生从</span><span>1</span><span>这个站送到所有的站，并把它们送回到</span><span>1</span><span>所要用的最小费用，是一个求最短路径的题。</span></p>
<p><strong><span>思路：</span></strong></p>
<p><span>由于用普通邻接矩阵来做的话会超内存，因为</span><span>1 &lt;= P,Q &lt;= 1000000.</span><span>故采取邻接表存储方式。这里我分别记录了邻接表<br>和逆邻接表，因为最后要把学生都送回</span><span>1</span><span>站。然后用</span><span>spfa</span><span>算法，求最短路径。由于是第一次学</span><span>spfa</span><span>，居然</span><span>6625MS</span><span>险过，开<br>始还</span><span>TLE</span><span>了几次，但是实在不懂怎么优化，希望有大牛指点下。源代码如下：</span></p>
<h2><span>源程序</span></h2>
<p><span>#include&lt;iostream&gt;<br>#include&lt;queue&gt;<br>using namespace std;<br>const int INF=1100000000;<br>const int MAXN=1000005;<br>struct node<br>{<br>&nbsp;int v;<br>&nbsp;int w;<br>&nbsp;node *next;<br>};<br>node *adj[MAXN];<br>node *inv[MAXN];<br>__int64 dist[MAXN];<br>int visit[MAXN];<br>queue&lt;node&gt;q;<br>void add(int i,int v,int w,node *p[])<br>{<br>&nbsp;node *q=new node[1];<br>&nbsp;q-&gt;v=v;<br>&nbsp;q-&gt;w=w;<br>&nbsp;q-&gt;next=p[i];<br>&nbsp;p[i]=q;<br>}<br>__int64 spfa(int s,int n,node *p[])<br>{<br>&nbsp;int i;<br>&nbsp;for(i=1;i&lt;=n;i++)<br>&nbsp;{<br>&nbsp;&nbsp;dist[i]=INF;<br>&nbsp;&nbsp;visit[i]=0;<br>&nbsp;}<br>&nbsp;node ns;<br>&nbsp;ns.v=s;<br>&nbsp;ns.w=0;<br>&nbsp;visit[s]=1;<br>&nbsp;dist[s]=0;<br>&nbsp;q.push(ns);<br>&nbsp;while(!q.empty())<br>&nbsp;{<br>&nbsp;&nbsp;node now=q.front();<br>&nbsp;&nbsp;q.pop();<br>&nbsp;&nbsp;visit[now.v]=0;<br>&nbsp;&nbsp;for(node *m=p[now.v];m;m=m-&gt;next)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if(dist[m-&gt;v]&gt;dist[now.v]+m-&gt;w)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;dist[m-&gt;v]=dist[now.v]+m-&gt;w;<br>&nbsp;&nbsp;&nbsp;&nbsp;if(!visit[m-&gt;v])<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;visit[m-&gt;v]=1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ns.v=m-&gt;v;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ns.w=m-&gt;w;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q.push(ns);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;__int64 ans=0;<br>&nbsp;for(i=1;i&lt;=n;i++)<br>&nbsp;&nbsp;ans+=dist[i];<br>&nbsp;return ans;<br>}<br>int main()<br>{<br>&nbsp;int t,P,Q,i,a,b,c;<br>&nbsp;scanf("%d",&amp;t);<br>&nbsp;while(t--)<br>&nbsp;{<br>&nbsp;&nbsp;scanf("%d%d",&amp;P,&amp;Q);<br>&nbsp;&nbsp;for(i=1;i&lt;=P;i++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;adj[i]=NULL;<br>&nbsp;&nbsp;&nbsp;inv[i]=NULL;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;for(i=1;i&lt;=Q;i++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;scanf("%d%d%d",&amp;a,&amp;b,&amp;c);<br>&nbsp;&nbsp;&nbsp;add(a,b,c,adj);<br>&nbsp;&nbsp;&nbsp;add(b,a,c,inv);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;printf("%I64d\n",spfa(1,P,adj)+spfa(1,P,inv));<br>&nbsp;}<br>&nbsp;return 0;<br>}</span></p>
</pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/97700.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2009-10-01 17:54 <a href="http://www.cppblog.com/NARUTOACM/archive/2009/10/01/97700.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ1679解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2009/09/29/97563.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Tue, 29 Sep 2009 09:14:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2009/09/29/97563.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/97563.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2009/09/29/97563.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/97563.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/97563.html</trackback:ping><description><![CDATA[<p class=pst>Problem 1679 The Unique MST<br><br>Description</p>
<div class=ptx lang=zh-CN>Given a connected undirected graph, tell if its minimum spanning tree is unique. <br><br>Definition 1 (Spanning Tree): Consider a connected, undirected graph G = (V, E). A spanning tree of G is a subgraph of G, say T = (V', E'), with the following properties: <br>1. V' = V. <br>2. T is connected and acyclic. <br><br>Definition 2 (Minimum Spanning Tree): Consider an edge-weighted, connected, undirected graph G = (V, E). The minimum spanning tree T = (V, E') of G is the spanning tree that has the smallest total cost. The total cost of T means the sum of the weights on all the edges in E'. <br></div>
<p class=pst>Input</p>
<div class=ptx lang=zh-CN>The first line contains a single integer t (1 &lt;= t &lt;= 20), the number of test cases. Each case represents a graph. It begins with a line containing two integers n and m (1 &lt;= n &lt;= 100), the number of nodes and edges. Each of the following m lines contains a triple (xi, yi, wi), indicating that xi and yi are connected by an edge with weight = wi. For any two nodes, there is at most one edge connecting them.</div>
<p class=pst>Output</p>
<div class=ptx lang=zh-CN>For each input, if the MST is unique, print the total cost of it, or otherwise print the string 'Not Unique!'.</div>
<p class=pst>Sample Input</p>
<pre class=sio>2
3 3
1 2 1
2 3 2
3 1 3
4 4
1 2 2
2 3 2
3 4 2
4 1 2
</pre>
<p class=pst>Sample Output</p>
<pre class=sio>3
Not Unique!</pre>
<pre class=sio>&nbsp;
<h2><span>解题思路</span></h2>
<p align=left><strong><span>题意：</span></strong><strong></strong></p>
<p><span>题目意思很明显，求最小生成数。不同的是他要让你判断最小生成树是否唯一，如果不唯一的话输出</span><span>Not Unique!</span><span>否则输出最小生成树的总</span><span>cost</span><span>。</span></p>
<p><strong><span>思路：</span></strong></p>
<p><span>最小生成树没什么说的，关键是如何判断唯一性，我采用的方法是先找出一颗最小生成数，并记录他的边，然后依次把记录的边去掉再求他最小生成树，如果这时求到的结果还是等于第一颗的<br>结果，说明最小生成树不唯一。一种笨方法，希望大牛能提供更好的算法。源代码如下：</span></p>
<h2><span>源程序</span></h2>
<p><span>#include&lt;iostream&gt;<br>using namespace std;<br>const int INF=1000000000;<br>int N,M;<br>int edge[101][101];<br>int Min[101];<br>int m[101][2];<br>int close[101];<br>bool unique;<br>bool primnum(int x,int y,int n,int sum);<br>int prim(int n,int mat[][101],int Min[]);<br>int main()<br>{<br>&nbsp;int t,i,j,x,y,w;<br>&nbsp;cin&gt;&gt;t;<br>&nbsp;while(t--)<br>&nbsp;{<br>&nbsp;&nbsp;cin&gt;&gt;N&gt;&gt;M;<br>&nbsp;&nbsp;for(i=1;i&lt;=N;i++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;for(j=1;j&lt;=N;j++)<br>&nbsp;&nbsp;&nbsp;&nbsp;edge[i][j]=INF;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;for(i=1;i&lt;=M;i++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;cin&gt;&gt;x&gt;&gt;y&gt;&gt;w;<br>&nbsp;&nbsp;&nbsp;edge[x][y]=edge[y][x]=w;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;int ans=prim(N,edge,Min);<br>&nbsp;&nbsp;if(unique==true)<br>&nbsp;&nbsp;&nbsp;cout&lt;&lt;ans&lt;&lt;endl;<br>&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;cout&lt;&lt;"Not Unique!"&lt;&lt;endl;<br>&nbsp;&nbsp;unique=false;<br>&nbsp;}<br>&nbsp;return 0;<br>}<br>bool primnum(int x,int y,int n,int sum)<br>{<br>&nbsp;int mmat[101][101];<br>&nbsp;int v[101];<br>&nbsp;int i,j,k,ret=0;<br>&nbsp;for(i=1;i&lt;=n;i++)<br>&nbsp;{<br>&nbsp;&nbsp;v[i]=0;<br>&nbsp;&nbsp;Min[i]=INF;<br>&nbsp;}<br>&nbsp;for(i=1;i&lt;=n;i++)<br>&nbsp;{<br>&nbsp;&nbsp;for(j=1;j&lt;=n;j++)<br>&nbsp;&nbsp;&nbsp;mmat[i][j]=edge[i][j];<br>&nbsp;}<br>&nbsp;mmat[x][y]=mmat[y][x]=INF;<br>&nbsp;for(Min[1]=0,i=1;i&lt;=n;i++)<br>&nbsp;{<br>&nbsp;&nbsp;for(k=-1,j=1;j&lt;=n;j++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if(!v[j]&amp;&amp;(k==-1||Min[j]&lt;Min[k]))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k=j;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;if(Min[k]==INF)<br>&nbsp;&nbsp;&nbsp;return false;<br>&nbsp;&nbsp;for(v[k]=1,ret+=Min[k],j=1;j&lt;=n;j++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if(!v[j]&amp;&amp;(mmat[k][j]&lt;Min[j]))<br>&nbsp;&nbsp;&nbsp;&nbsp;Min[j]=mmat[k][j];<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;if(ret==sum)<br>&nbsp;&nbsp;return true;<br>&nbsp;return false;<br>}<br>int prim(int n,int mat[][101],int Min[])<br>{<br>&nbsp;int i,j,k,ret=0,mm=0;<br>&nbsp;int v[101];<br>&nbsp;for(i=1;i&lt;=n;i++)<br>&nbsp;{<br>&nbsp;&nbsp;v[i]=0;<br>&nbsp;&nbsp;Min[i]=INF;<br>&nbsp;&nbsp;close[i]=1;<br>&nbsp;}<br>&nbsp;for(Min[1]=0,i=1;i&lt;=n;i++)<br>&nbsp;{<br>&nbsp;&nbsp;for(k=-1,j=1;j&lt;=n;j++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if(!v[j]&amp;&amp;(k==-1||Min[j]&lt;Min[k]))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k=j;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;m[mm][0]=close[k],m[mm++][1]=k;<br>&nbsp;&nbsp;for(v[k]=1,ret+=Min[k],j=1;j&lt;=n;j++)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;if(!v[j]&amp;&amp;(mat[k][j]&lt;Min[j]))<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;Min[j]=mat[k][j];<br>&nbsp;&nbsp;&nbsp;&nbsp;close[j]=k;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;for(i=1;i&lt;mm;i++)<br>&nbsp;{<br>&nbsp;&nbsp;if(primnum(m[i][0],m[i][1],n,ret))<br>&nbsp;&nbsp;&nbsp;break;<br>&nbsp;}<br>&nbsp;if(i==mm)<br>&nbsp;&nbsp;unique=true;<br>&nbsp;else<br>&nbsp;&nbsp;unique=false;<br>&nbsp;return ret;<br>}</span></p>
</pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/97563.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2009-09-29 17:14 <a href="http://www.cppblog.com/NARUTOACM/archive/2009/09/29/97563.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ1061解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2009/09/24/97166.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Thu, 24 Sep 2009 13:48:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2009/09/24/97166.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/97166.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2009/09/24/97166.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/97166.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/97166.html</trackback:ping><description><![CDATA[<p class=pst>Problem 1061 青蛙的约会<br><br>Description</p>
<div class=ptx lang=zh-CN>两只青蛙在网上相识了，它们聊得很开心，于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上，于是它们约定各自朝西跳，直到碰面为止。可是它们出发之前忘记了一件很重要的事情，既没有问清楚对方的特征，也没有约定见面的具体位置。不过青蛙们都是很乐观的，它们觉得只要一直朝着某个方向跳下去，总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上，不然是永远都不可能碰面的。为了帮助这两只乐观的青蛙，你被要求写一个程序来判断这两只青蛙是否能够碰面，会在什么时候碰面。 <br>我们把这两只青蛙分别叫做青蛙A和青蛙B，并且规定纬度线上东经0度处为原点，由东往西为正方向，单位长度1米，这样我们就得到了一条首尾相接的数轴。设青蛙A的出发点坐标是x，青蛙B的出发点坐标是y。青蛙A一次能跳m米，青蛙B一次能跳n米，两只青蛙跳一次所花费的时间相同。纬度线总长L米。现在要你求出它们跳了几次以后才会碰面。 <br></div>
<p class=pst>Input</p>
<div class=ptx lang=zh-CN>输入只包括一行5个整数x，y，m，n，L，其中x&#8800;y &lt; 2000000000，0 &lt; m、n &lt; 2000000000，0 &lt; L &lt; 2100000000。</div>
<p class=pst>Output</p>
<div class=ptx lang=zh-CN>输出碰面所需要的跳跃次数，如果永远不可能碰面则输出一行"Impossible"</div>
<p class=pst>Sample Input</p>
<pre class=sio>1 2 3 4 5</pre>
<p class=pst>Sample Output</p>
<pre class=sio>4</pre>
<pre class=sio>&nbsp;
<h2><span>解题思路</span></h2>
<p align=left><strong><span>题意：</span></strong><span>中文。。。</span></p>
<p align=left><strong>&nbsp;</strong></p>
<p><strong><span>思路：</span></strong></p>
<p><span>首先先诉下苦。。此题我整整研究了一下午，因为好多东西都不了解，所以花了非常多的时间，但总算是把好多东西都理清<br>了，好多东西都把它关联了起来，对于像我一样的新手来说，这篇报告估计比较好用，对牛牛来说。。当然就会嫌我太罗嗦<br>哈。。。下面正文（推理全都是自己研究成果，如有错误，忘大牛提示。。</span><span>ps</span><span>：希望没错。。哈）：</span></p>
<p><span>根据题意，青蛙若想碰面的话，则必有</span><span>(x+mt)-(y+nt)=p*L;(p</span><span>为任意整数</span><span>)</span><span>。方程化为：</span><span>(m-n)t-(y-x)=pL;</span><span>则有<br></span><span>((m-n)t-(y-x))mod(L)=0(mod</span><span>为取模运算</span><span>)</span><span>。即为：</span><span>(m-n)t mod L=y-x;</span><span>为线性同余方程。此方程有解当且仅当</span><span>y-x</span><span>能<br>被</span><span>m-n</span><span>和</span><span>L</span><span>的最大公约数</span><span>(</span><span>记为</span><span>gcd(m-n,L)),</span><span>即</span><span>gcd(m-n,L)|y-x</span><span>。这时，如果</span><span>x0</span><span>是方程的一个解，即当</span><span>t=x0</span><span>时，<br></span><span>(m-n)t mod L=y-x</span><span>成立，那么所有的解可以表示为：</span></p>
<p><span>{x0+k(L/gcd(m-n,L))|(k</span><span>&#8712;整数</span><span>)}</span><span>。</span></p>
<p><span>设</span><span>d=gcd(m-n,L)</span><span>，根据裴蜀定理，则必存在整数对</span><span>(r,s)</span><span>使得</span><span>(m-n)*r+L*s=d;</span><span>则可得</span><span>t=r*(y-x)/d</span><span>。证明：把</span><span>t</span><span>代入<br>得：</span><span>(m-n)t-(y-x)=((m-n)r(y-x)-d(y-x))/d=</span></p>
<p><span>((y-x)((m-n)r-d))/d=(y-x)*(-L*s)/d.</span><span>因为</span><span>d|y-x,</span><span>所以</span><span>L|(y-x)*(-L*s)/d</span><span>。即</span></p>
<p><span>((m-n)t-(y-x))mod(L)=0</span><span>成立。所以问题转换为求</span><span>r</span><span>，也就是解一个含</span><span>2</span><span>个数的不定方程</span><span>(m-n)*r+L*s=d</span><span>。</span></p>
<p><span>下面在讨论求解不定方程的解法：</span></p>
<p><span>求解</span><span>ax+by=gcd(a,b).</span></p>
<p><span>ax+by=gcd(a,b)=gcd(b,a%b)(</span><span>欧几里德求最大公约数算法</span><span>)</span><span>。</span></p>
<p><span>gcd(b,a%b)=b*x'+(a%b)*y'.</span></p>
<p><span>所以有</span><span>ax+by=b*x'+(a%b)*y'=b*x'+(a-a/b*b)*y'=ay'+b(x'-a/b*y').</span></p>
<p><span>因此由对比系数法得：</span><span>x=y';y=x'-a/b*y'</span><span>。</span></p>
<p><span>由这个得出扩展的欧几里德算法：</span></p>
<p><span>int exGcd(int a, int b, int &amp;x, int &amp;y)</span></p>
<p><span>{</span></p>
<p><span>if(b == 0)</span></p>
<p><span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>x = 1;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>y = 0;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return a;</span></p>
<p><span>}</span></p>
<p><span>int r = exGcd(b, a % b, x, y);</span></p>
<p><span>int t = x;</span></p>
<p><span>x = y;</span></p>
<p><span>y = t - a / b * y;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>return r;</span></p>
<p><span>}//</span><span>返回</span><span>a</span><span>和</span><span>b</span><span>的最大公约数。</span></p>
<p><span>原代码如下：</span></p>
<h2><span>源程序</span></h2>
<p><span>#include&lt;iostream&gt;</span></p>
<p><span>using namespace std;</span></p>
<p><span>__int64 exGcd(__int<st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="True" SourceValue="64" UnitName="a">64 a</st1:chmetcnv>,__int64 b, __int64 &amp;xx, __int64 &amp;yy);</span></p>
<p><span>int main()</span></p>
<p><span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>__int64 x,y,m,n,L,xx,yy;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>scanf("%I64d%I64d%I64d%I64d%I64d",&amp;x,&amp;y,&amp;m,&amp;n,&amp;L);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>__int64 d=exGcd(n-m,L,xx,yy);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if((x-y)%d!=0)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>cout&lt;&lt;"Impossible"&lt;&lt;endl;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>else</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>xx=xx*((x-y)/d);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int s=L/d;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>xx=(xx%s+s)%s;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>printf("%I64d\n",xx);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return 0;</span></p>
<p><span>}</span></p>
<p><span>__int64 exGcd(__int<st1:chmetcnv w:st="on" TCSC="0" NumberType="1" Negative="False" HasSpace="True" SourceValue="64" UnitName="a">64 a</st1:chmetcnv>,__int64 b, __int64 &amp;xx, __int64 &amp;yy)</span></p>
<p><span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(b == 0)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>xx = 1;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>yy = 0;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return a;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>__int64 r = exGcd(b, a % b, xx, yy);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>__int64 t = xx;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>xx = yy;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>yy = t - a / b * yy;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>return r;</span></p>
<span>}</span></pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/97166.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2009-09-24 21:48 <a href="http://www.cppblog.com/NARUTOACM/archive/2009/09/24/97166.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ1023解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2009/09/12/96026.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Sat, 12 Sep 2009 15:20:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2009/09/12/96026.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/96026.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2009/09/12/96026.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/96026.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/96026.html</trackback:ping><description><![CDATA[<p class=pst>Problem 1023 The Fun Number System<br><br>Description</p>
<div class=ptx lang=zh-CN>In a k bit 2's complement number, where the bits are indexed from 0 to k-1, the weight of the most significant bit (i.e., in position k-1), is -2^(k-1), and the weight of a bit in any position i (0 &#8804; i &lt; k-1) is 2^i. For example, a 3 bit number 101 is -2^2 + 0 + 2^0 = -3. A negatively weighted bit is called a negabit (such as the most significant bit in a 2's complement number), and a positively weighted bit is called a posibit. <br>A Fun number system is a positional binary number system, where each bit can be either a negabit, or a posibit. For example consider a 3-bit fun number system Fun3, where bits in positions 0, and 2 are posibits, and the bit in position 1 is a negabit. (110)Fun3 is evaluated as 2^2-2^1 + 0 = 3. Now you are going to have fun with the Fun number systems! You are given the description of a k-bit Fun number system Funk, and an integer N (possibly negative. You should determine the k bits of a representation of N in Funk, or report that it is not possible to represent the given N in the given Funk. For example, a representation of -1 in the Fun3 number system (defined above), is 011 (evaluated as 0 - 2^1 + 2^0), and <br>representing 6 in Fun3 is impossible.</div>
<p class=pst>Input</p>
<div class=ptx lang=zh-CN>The first line of the input file contains a single integer t (1 &#8804; t &#8804; 10), the number of test cases, followed by the input data for each test case. Each test case is given in three consecutive lines. In the first line there is a positive integer k (1 &#8804; k &#8804; 64). In the second line of a test data there is a string of length k, composed only of letters n, and p, describing the Fun number system for that test data, where each n (p) indicates that the bit in that position is a negabit (posibit). <br>The third line of each test data contains an integer N (-2^63 &#8804; N &lt; 2^63), the number to be represented in the Funk number <br>system by your program.</div>
<p class=pst>Output</p>
<div class=ptx lang=zh-CN>For each test data, you should print one line containing either a k-bit string representing the given number N in the Funk number system, or the word Impossible, when it is impossible to represent the given number.</div>
<p class=pst>Sample Input</p>
<pre class=sio>2
3
pnp
6
4
ppnn
10</pre>
<p class=pst>Sample Output</p>
<pre class=sio>Impossible
1110</pre>
<pre class=sio>&nbsp;
<h2><span>解题思路</span></h2>
<p align=left><strong><span>题意：</span></strong><strong></strong></p>
<p><span>题目意思是有一个</span><span>k</span><span>位的</span><span>2</span><span>进制的数，把他转化成</span><span>10</span><span>进制，如果可以转换得到题目要求的数，则输出那个</span><span>2</span><span>进制数。但是转换成</span><span>10</span><span>进制数固定的加，它还可以减。题目会给出哪一位是</span><span>+</span><span>，哪一位<br>是</span><span>-</span><span>，分别由</span><span>p</span><span>和</span><span>n</span><span>代表。比如：</span></p>
<p align=left><span>4</span></p>
<p align=left><span>ppnn</span></p>
<p><span>10</span></p>
<p><span>意思是有一个</span><span>4</span><span>位的</span><span>2</span><span>进制数</span><span>ppnn</span><span>代表</span><span>++--</span><span>。这里可以这样组合：</span><span>1110.</span><span>因为</span><span>2^3+2^2-2^1-0=10.</span><span>所以输出</span><span>1110.</span></p>
<p><strong><span>思路：</span></strong></p>
<span>这道题我的思路是从最后一位开始判断，如果</span><span>N</span><span>是奇数，那么说明最后一位肯定是</span><span>1</span><span>。因为只有最后一位才是</span><span>0</span><span>次方，才有可能得到唯一的奇数</span><span>1.</span><span>这时如果最后那位是</span><span>p</span><span>也就是</span><span>+</span><span>时就把</span><span>N-1</span><span>。再提<br>出一个</span><span>2</span><span>，也就是除以</span><span>2</span><span>，得到前面的</span><span>k-1</span><span>位所得到的数。如果</span><span>N</span><span>是偶数，可以断定最后一位是</span><span>0</span><span>，那么直接除以</span><span>2</span><span>得到前面</span><span>k-1</span><span>位得到的数。依次循环至剩下</span><span>0</span><span>位即可。如果循环完毕</span><span>N</span><span>没有等于</span><span>0</span><span>，<br>可以判断为</span><span>impossible</span><span>。注：因为可以存在负数，上述考虑都是排除负数的情况，有负数也没关系，判断</span><span>N%2==-1</span><span>就行了。源代码如下：<br>
<h2 style="MARGIN: 13pt 0cm"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial"><font color=#0000ff size=5></font></span></span></h2>
&nbsp;
<h2><span>源程序</span></h2>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman">#include&lt;iostream&gt;</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman">using namespace std;</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman">char s[68];</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman">__int64 N;</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman">int k;</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman">int ans[68];</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman">int an;</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman">int main()</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman">{</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int t,i;</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>cin&gt;&gt;t;</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>while(t--)</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>cin&gt;&gt;k;</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>cin&gt;&gt;s;</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>scanf("%I64d",&amp;N);</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=k-1;i&gt;=0;i--)</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(N%2==1||N%2==-1)</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 4">&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>if(s[i]=='p')</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 4">&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>{</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 5">&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>N-=1;</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 5">&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>N/=2;</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 4">&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>}</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 4">&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>else</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 4">&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>{</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 5">&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>N+=1;</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 5">&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>N/=2;</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 4">&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>}</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 4">&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>ans[an++]=1;</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>else</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 4">&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>N/=2;</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 4">&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>ans[an++]=0;</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(N!=0)</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>cout&lt;&lt;"Impossible";</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>else</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=k-1;i&gt;=0;i--)</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 4">&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>cout&lt;&lt;ans[i];</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>cout&lt;&lt;endl;</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>an=0;</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return 0;</font></span></p>
<span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">}</span></pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/96026.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2009-09-12 23:20 <a href="http://www.cppblog.com/NARUTOACM/archive/2009/09/12/96026.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ1287解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2009/09/07/95494.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Mon, 07 Sep 2009 13:51:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2009/09/07/95494.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/95494.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2009/09/07/95494.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/95494.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/95494.html</trackback:ping><description><![CDATA[<p class=pst>Problem 1287 Networking<br><br>Description</p>
<div class=ptx lang=en-US>You are assigned to design network connections between certain points in a wide area. You are given a set of points in the area, and a set of possible routes for the cables that may connect pairs of points. For each possible route between two points, you are given the length of the cable that is needed to connect the points over that route. Note that there may exist many possible routes between two given points. It is assumed that the given possible routes connect (directly or indirectly) each two points in the area. <br>Your task is to design the network for the area, so that there is a connection (direct or indirect) between every two points (i.e., all the points are interconnected, but not necessarily by a direct cable), and that the total length of the used cable is minimal.</div>
<p class=pst>Input</p>
<div class=ptx lang=en-US>The input file consists of a number of data sets. Each data set defines one required network. The first line of the set contains two integers: the first defines the number P of the given points, and the second the number R of given routes between the points. The following R lines define the given routes between the points, each giving three integer numbers: the first two numbers identify the points, and the third gives the length of the route. The numbers are separated with white spaces. A data set giving only one number P=0 denotes the end of the input. The data sets are separated with an empty line. <br>The maximal number of points is 50. The maximal length of a given route is 100. The number of possible routes is unlimited. The nodes are identified with integers between 1 and P (inclusive). The routes between two points i and j may be given as i j or as j i. <br></div>
<p class=pst>Output</p>
<div class=ptx lang=en-US>For each data set, print one number on a separate line that gives the total length of the cable used for the entire designed network.</div>
<p class=pst>Sample Input</p>
<pre class=sio>1 0
2 3
1 2 37
2 1 17
1 2 68
3 7
1 2 19
2 3 11
3 1 7
1 3 5
2 3 89
3 1 91
1 2 32
5 7
1 2 5
2 3 7
2 4 8
4 5 11
3 5 10
1 5 6
4 2 12
0</pre>
<p class=pst>Sample Output</p>
<pre class=sio>0
17
16
26</pre>
<pre class=sio>&nbsp;
<h2><span>解题思路</span></h2>
<p align=left><strong><span>题意：</span></strong><strong></strong></p>
<p><span>题目意思就是给你点，代表两个位置。边代表点之间连通可能需要得电缆长度，</span></p>
<p><span>注意这里是说可能需要得，所以会出现相同得点与点之间需要得电缆长度不同。最后让你求要把所有点连通需要得最少得电<br>缆长度。</span></p>
<p><strong><span>思路：</span></strong></p>
<span>这题完完全全是一个最小生成树。用</span><span>prim</span><span>就可以解决，输入得时候要注意判断是否重复，若重复则取两者之间最小值，再调<br>用</span><span>prim</span><span>求出</span><span>ans</span><span>。源代码如下：<br>&nbsp;
<h2><span>源程序</span></h2>
<p><span>#include&lt;iostream&gt;</span></p>
<p><span>using namespace std;</span></p>
<p><span>#define MAX 100000</span></p>
<p><span>int P,R;</span></p>
<p><span>int route[105][105];</span></p>
<p><span>int close[105];</span></p>
<p><span>int prim();</span></p>
<p><span>int main()</span></p>
<p><span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int i,a,b,c;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>while(cin&gt;&gt;P&amp;&amp;P)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>cin&gt;&gt;R;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(R==0)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>cout&lt;&lt;0&lt;&lt;endl;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>continue;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=1;i&lt;=R;i++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>cin&gt;&gt;a&gt;&gt;b&gt;&gt;c;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(route[a][b]!=0)</span></p>
<p><span><span>&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>route[b][a]=route[a][b]=route[a][b]&lt;c?route[a][b]:c;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>else</span></p>
<p><span><span>&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>route[b][a]=route[a][b]=c;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>cout&lt;&lt;prim()&lt;&lt;endl;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>memset(route,0,sizeof(route));</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return 0;</span></p>
<p><span>}</span></p>
<p><span>int prim()</span></p>
<p><span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int i,j,sum(0);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int v[MAX];</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=1;i&lt;=P;i++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>close[i]=route[1][i];</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>v[i]=0;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>v[1]=1;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int vv;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=1;i&lt;=P;i++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int min=INT_MAX;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(j=1;j&lt;=P;j++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(!v[j]&amp;&amp;close[j]&amp;&amp;close[j]&lt;min)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&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>min=close[j];</span></p>
<p><span><span>&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>vv=j;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(min!=INT_MAX)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>sum+=min;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(v[vv]=1,j=1;j&lt;=P;j++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(!v[j]&amp;&amp;route[vv][j]&amp;&amp;(close[j]&gt;route[vv][j]||close[j]==0))</span></p>
<p><span><span>&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>close[j]=route[vv][j];</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return sum;</span></p>
<span>}</span></span></pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/95494.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2009-09-07 21:51 <a href="http://www.cppblog.com/NARUTOACM/archive/2009/09/07/95494.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ1979解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2009/09/04/95324.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Fri, 04 Sep 2009 10:14:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2009/09/04/95324.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/95324.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2009/09/04/95324.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/95324.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/95324.html</trackback:ping><description><![CDATA[<p class=pst>Problem 1979 Red and Black<br><br>Description</p>
<div class=ptx lang=zh-CN>There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of four adjacent tiles. But he can't move on red tiles, he can move only on black tiles. <br><br>Write a program to count the number of black tiles which he can reach by repeating the moves described above. <br></div>
<p class=pst>Input</p>
<div class=ptx lang=zh-CN>The input consists of multiple data sets. A data set starts with a line containing two positive integers W and H; W and H are the numbers of tiles in the x- and y- directions, respectively. W and H are not more than 20. <br><br>There are H more lines in the data set, each of which includes W characters. Each character represents the color of a tile as follows. <br><br>'.' - a black tile <br>'#' - a red tile <br>'@' - a man on a black tile(appears exactly once in a data set) <br>The end of the input is indicated by a line consisting of two zeros. <br></div>
<p class=pst>Output</p>
<div class=ptx lang=zh-CN>For each data set, your program should output a line which contains the number of tiles he can reach from the initial tile (including itself). </div>
<p class=pst>Sample Input</p>
<pre class=sio>6 9
....#.
.....#
......
......
......
......
......
#@...#
.#..#.
11 9
.#.........
.#.#######.
.#.#.....#.
.#.#.###.#.
.#.#..@#.#.
.#.#####.#.
.#.......#.
.#########.
...........
11 6
..#..#..#..
..#..#..#..
..#..#..###
..#..#..#@.
..#..#..#..
..#..#..#..
7 7
..#.#..
..#.#..
###.###
...@...
###.###
..#.#..
..#.#..
0 0</pre>
<p class=pst>Sample Output</p>
<pre class=sio>45
59
6
13</pre>
<pre class=sio>&nbsp;
<h2><span>解题思路</span></h2>
<p align=left><strong><span>题意：</span></strong><strong></strong></p>
<p><span>#</span><span>代表红，</span><span>.</span><span>代表黑，</span><span>@</span><span>代表当前位置，让你从当前位置出发，只能踩旁边的点而且该点为黑，问最多能踩几个。</span></p>
<p><strong><span>思路：</span></strong></p>
<p><span>本题我采取递归的方法。设</span><span>go(x,y)</span><span>为从点</span><span>(x,y)</span><span>出发能踩的最多的数，则有公式：<br></span><span>go(x,y)=1+go(x-1,y)+go(x+1,y)+go(x,y-1)+go(x,y+1)</span><span>。要注意踩了的点应标记成红</span><span>#</span><span>。源代码如下：</span></p>
<h2><span>源程序</span></h2>
<p><span>#include&lt;iostream&gt;</span></p>
<p><span>using namespace std;</span></p>
<p><span>char a[30][30];</span></p>
<p><span>int W,H;</span></p>
<p><span>int go(int x,int y);</span></p>
<p><span>int main()</span></p>
<p><span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int i,j;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>while(cin&gt;&gt;W&gt;&gt;H&amp;&amp;(W+H))</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=0;i&lt;H;i++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>cin&gt;&gt;a[i];</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(i=0;i&lt;H;i++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(j=0;j&lt;W;j++)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&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>if(a[i][j]=='@')</span></p>
<p><span><span>&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></p>
<p><span><span>&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>cout&lt;&lt;go(i,j)&lt;&lt;endl;</span></p>
<p><span><span>&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>break;</span></p>
<p><span><span>&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></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return 0;</span></p>
<p><span>}</span></p>
<p><span>int go(int x,int y)</span></p>
<p><span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(x&lt;0||y&lt;0||x&gt;=H||y&gt;=W)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return 0;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(a[x][y]=='#')</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return 0;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>else</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>a[x][y]='#';</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return 1+go(x-1,y)+go(x+1,y)+go(x,y-1)+go(x,y+1);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<span>}</span></pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/95324.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2009-09-04 18:14 <a href="http://www.cppblog.com/NARUTOACM/archive/2009/09/04/95324.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ2249解题报告</title><link>http://www.cppblog.com/NARUTOACM/archive/2009/09/04/95311.html</link><dc:creator>NARUTOACM</dc:creator><author>NARUTOACM</author><pubDate>Fri, 04 Sep 2009 08:04:00 GMT</pubDate><guid>http://www.cppblog.com/NARUTOACM/archive/2009/09/04/95311.html</guid><wfw:comment>http://www.cppblog.com/NARUTOACM/comments/95311.html</wfw:comment><comments>http://www.cppblog.com/NARUTOACM/archive/2009/09/04/95311.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/NARUTOACM/comments/commentRss/95311.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/NARUTOACM/services/trackbacks/95311.html</trackback:ping><description><![CDATA[<p class=pst>Problem2249 Binomial Showdown<br><br>Description</p>
<div class=ptx lang=zh-CN>In how many ways can you choose k elements out of n elements, not taking order into account? <br>Write a program to compute this number. </div>
<p class=pst>Input</p>
<div class=ptx lang=zh-CN>The input will contain one or more test cases. <br>Each test case consists of one line containing two integers n (n&gt;=1) and k (0&lt;=k&lt;=n). <br>Input is terminated by two zeroes for n and k. </div>
<p class=pst>Output</p>
<div class=ptx lang=zh-CN>For each test case, print one line containing the required number. This number will always fit into an integer, i.e. it will be less than 2<sup>31</sup>. <br>Warning: Don't underestimate the problem. The result will fit into an integer - but if all intermediate results arising during the computation will also fit into an integer depends on your algorithm. The test cases will go to the limit. <br></div>
<p class=pst>Sample Input</p>
<pre class=sio>4 2
10 5
49 6
0 0
</pre>
<p class=pst>Sample Output</p>
<pre class=sio>6
252
13983816
&nbsp;
<h2><span>解题思路</span></h2>
<p align=left><strong><span>题意：</span></strong><strong></strong></p>
<p><span>求组合。</span></p>
<p><strong><span>思路：</span></strong></p>
<p><span>此题就是一道数学题，求组合</span><span>C</span><span>。思路没什么讲的，关键要注意</span><span>TLE</span><span>的问题和</span><span>WA</span><span>的问题，因为连乘可能超过</span><span>__int64</span><span>的范围，<br></span><span>TLE</span><span>的话就要把</span><span>k</span><span>转换成</span><span>n-k</span><span>就行了。源代码如下：<br></span></p>
&nbsp;
<h2><span>源程序</span></h2>
<p><span>#include&lt;iostream&gt;</span></p>
<p><span>using namespace std;</span></p>
<p><span>int main()</span></p>
<p><span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>__int64 n,k;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>__int64 ans(1);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int i,j;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>while(scanf("%I64d%I64d",&amp;n,&amp;k)&amp;&amp;(n+k))</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(k==0||k==n)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>cout&lt;&lt;1&lt;&lt;endl;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>continue;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(k&gt;n/2)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>k=n-k;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>j=i=k;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>while(i)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ans*=n;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>if(ans%j==0)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p><span><span>&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>ans/=j;</span></p>
<p><span><span>&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>j--;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>n--;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>i--;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>for(j;j&gt;1;j--)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ans/=j;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>printf("%I64d\n",ans);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ans=1;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return 0;</span></p>
<span>}</span></pre>
<img src ="http://www.cppblog.com/NARUTOACM/aggbug/95311.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/NARUTOACM/" target="_blank">NARUTOACM</a> 2009-09-04 16:04 <a href="http://www.cppblog.com/NARUTOACM/archive/2009/09/04/95311.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>