﻿<?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++博客-生无所息-随笔分类-TJU_OI</title><link>http://www.cppblog.com/3144046cjc/category/11272.html</link><description>像蜗牛啦漫步</description><language>zh-cn</language><lastBuildDate>Sun, 26 Jul 2009 13:22:43 GMT</lastBuildDate><pubDate>Sun, 26 Jul 2009 13:22:43 GMT</pubDate><ttl>60</ttl><item><title>TJU_OI 1101  01字符串问题</title><link>http://www.cppblog.com/3144046cjc/archive/2009/07/26/91271.html</link><dc:creator>Chen Jiecao</dc:creator><author>Chen Jiecao</author><pubDate>Sun, 26 Jul 2009 12:47:00 GMT</pubDate><guid>http://www.cppblog.com/3144046cjc/archive/2009/07/26/91271.html</guid><wfw:comment>http://www.cppblog.com/3144046cjc/comments/91271.html</wfw:comment><comments>http://www.cppblog.com/3144046cjc/archive/2009/07/26/91271.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/3144046cjc/comments/commentRss/91271.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/3144046cjc/services/trackbacks/91271.html</trackback:ping><description><![CDATA[<h1>1110. &nbsp;01字符串问题</h1>
<div id="pmisc">
<table>
    <tbody>
        <tr>
            <td width="40%">
            输入文件名：str.in &nbsp; &nbsp;
            输出文件名：str.out
            </td>
            <td style="text-align: right;">
            <a rel="nofollow" href="http://oi.tju.edu.cn/problem/submit/1110/">提交</a>&nbsp;
            <a rel="nofollow" href="http://oi.tju.edu.cn/community/board/3/">讨论</a>&nbsp;
            <a rel="nofollow" href="http://oi.tju.edu.cn/status?pid=1110">运行状况</a>&nbsp;
            </td>
        </tr>
    </tbody>
</table>
</div>
<hr>
<p>
大家都知道，计算机内存中的信息是由若干个二进制位组成的，这些二进制位可以是1，也可以是0。现在，有一个由n个二进制位组成的内存，二进制位的编号从1至n (注意从1开始)，并给出m条关于内存中位的描述，求出这些描述中有多少条是错误的。
</p>
<p>
描述如下：每个描述是一行，由x, y, z三个
</p>
<p>如果z = 0，表示 [x, y] 中有偶数个1 （包括x, y）</p>
<p>如果z = 1,  表示 [x, y] 中有奇数个1 （同样包括x, y）</p>
<p>如果一条描述与前边某些正确的描述矛盾，则该描述是错误的，否则该描述是正确的。</p>
<p>
例如：<br>
第一条1，1，1  <br>
第二条 1，1，0  <br>
显然第二条是错误的。</p>
<p>例如：<br>
第一条1，8，0  <br>
第二条 1，4，1  <br>
第三条 5，8，0</p>
<p>也可以推出第三条是错误的，因为1到8之间偶数个1，1到4之间奇数个1，5到8之间也应是奇数个1，与第三条矛盾。</p>
<p><strong> 输入格式</strong> </p>
<p>
第一行 n  m  。n &#8804; 50 000， m &#8804; 200 000。<br>
以下m行，每行x, y, z 三个数 。  1 &#8804; x &#8804; y &#8804; n ,  z = 1或0。
</p>
<p><strong> 输出格式</strong> </p>
<p>
一个数，描述错误的总条数。
</p>
<p><strong> 输入样例</strong> </p>
<pre>5 10<br>1 4 1<br>1 5 1<br>3 5 1<br>4 4 1<br>1 3 0<br>1 5 0<br>3 5 1<br>2 3 1<br>4 4 0<br>2 4 1<br><br></pre>
<p><strong> 输出样例</strong> </p>
<pre>3<br></pre>
<p><strong> 题目来源</strong> ：<a href="http://oi.tju.edu.cn/problem/source/34/">2007年山东省信息学奥赛省队选拔赛第二试</a></p>
<p><strong> 题目标签</strong> ：
</p>
<p><font color="green">并查集</font>(1) &nbsp;
</p>
<span style="color: red;">简析</span><br>这是一个比较典型的并查集问题,但是典型并不意味着它简单.这个题目基本上就是URAL_1003的一个简化版本,那个题目好像还要用Hash表处理.<br>最初朴素的想法是将同奇偶的归到一个集合中,不同奇偶的放到不同集合中.为了方便处理,我把不同的集合也放在了同一个数组中.<br>(x+MAXN)所代表的恰恰是 x 的敌人集合,如果&nbsp;<span style="color: red;"> x&nbsp; y&nbsp; 0</span>&nbsp;&nbsp;&nbsp; 这个输入合法,那么意味着可以将(x-1)所指向的集合和y所指向的集合合并(因为他们同奇偶),同时也把他们对应的敌人集合合并:<br>&nbsp;&nbsp;&nbsp; Union(x-1,y);<br>&nbsp;&nbsp;&nbsp; Union(x-1+MAXN,y+MAXN);<br>反之,如果&nbsp;<span style="color: red;">&nbsp; x&nbsp; y&nbsp; 1&nbsp;</span> 输入合法,就意味着(x-1)与 y 所对应的集合的"奇偶性"不同,所以把(x-1)与y的敌人集合(即 (y+MAXN)所对应的集合)合并,把(x-1)的敌人集合与y合并:<br>&nbsp;&nbsp;&nbsp; Union(x-1,y+MAXN);<br>&nbsp;&nbsp;&nbsp; Union(x-1+MAXN,y);<br><br>判断合法一个输入合法与否的实现看代码....<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<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></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;std;<br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;MAXN</span><span style="color: #000000;">=</span><span style="color: #000000;">50000</span><span style="color: #000000;">+</span><span style="color: #000000;">5</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n,m,root[MAXN&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">],ans</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">,rank[MAXN&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">];<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">inline&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;find(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;x)<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">{&nbsp;<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(x</span><span style="color: #000000;">!=</span><span style="color: #000000;">root[x])&nbsp;root[x]</span><span style="color: #000000;">=</span><span style="color: #000000;">find(root[x]);<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;root[x];<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">}&nbsp;<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">inline&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;Link(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;x,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;y)<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(rank[x]</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">rank[y])&nbsp;root[y]</span><span style="color: #000000;">=</span><span style="color: #000000;">x;<br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;root[x]</span><span style="color: #000000;">=</span><span style="color: #000000;">y;<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(root[x]</span><span style="color: #000000;">==</span><span style="color: #000000;">root[y])&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">rank[y];<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;}<br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">inline&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;Union(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;a,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;b)<br></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;Link(find(a),find(b));<br></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main(){<br></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;freopen(</span><span style="color: #000000;">"</span><span style="color: #000000;">str.in</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">r</span><span style="color: #000000;">"</span><span style="color: #000000;">,stdin);<br></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;freopen(</span><span style="color: #000000;">"</span><span style="color: #000000;">str.out</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">w</span><span style="color: #000000;">"</span><span style="color: #000000;">,stdout);<br></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;memset(rank,</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(rank));<br></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">MAXN</span><span style="color: #000000;">*</span><span style="color: #000000;">2</span><span style="color: #000000;">;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)&nbsp;root[i]</span><span style="color: #000000;">=</span><span style="color: #000000;">i;<br></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;cin&nbsp;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;n&nbsp;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;m;<br></span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">m;</span><span style="color: #000000;">++</span><span style="color: #000000;">i){<br></span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;x,y,z;<br></span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;x&nbsp;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;y&nbsp;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;z;<br></span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(z</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">){<br></span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(find(x</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;">find(y</span><span style="color: #000000;">+</span><span style="color: #000000;">MAXN))&nbsp;{</span><span style="color: #000000;">++</span><span style="color: #000000;">ans;</span><span style="color: #0000ff;">continue</span><span style="color: #000000;">;}<br></span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Union(x</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">,y);<br></span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Union(x</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">+</span><span style="color: #000000;">MAXN,y</span><span style="color: #000000;">+</span><span style="color: #000000;">MAXN);<br></span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(find(x</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;">find(y))&nbsp;{</span><span style="color: #000000;">++</span><span style="color: #000000;">ans;</span><span style="color: #0000ff;">continue</span><span style="color: #000000;">;}<br></span><span style="color: #008080;">42</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Union(x</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">,y</span><span style="color: #000000;">+</span><span style="color: #000000;">MAXN);<br></span><span style="color: #008080;">43</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Union(x</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">+</span><span style="color: #000000;">MAXN,y);<br></span><span style="color: #008080;">44</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">45</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;}<br></span><span style="color: #008080;">46</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;ans&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;endl;<br></span><span style="color: #008080;">47</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">48</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">49</span>&nbsp;<span style="color: #000000;"></span></div>
在并查集的实现上,我用了带路径压缩的启发式并查集,根据《算法导论》上的伪代码写的.<br>但是实践证明,在这个题目中,启发式并没有多少优越性.<br><br> <img src ="http://www.cppblog.com/3144046cjc/aggbug/91271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/3144046cjc/" target="_blank">Chen Jiecao</a> 2009-07-26 20:47 <a href="http://www.cppblog.com/3144046cjc/archive/2009/07/26/91271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TJU_OI 1090 战地统计系统(War Field Statistical System)</title><link>http://www.cppblog.com/3144046cjc/archive/2009/07/26/91264.html</link><dc:creator>Chen Jiecao</dc:creator><author>Chen Jiecao</author><pubDate>Sun, 26 Jul 2009 12:19:00 GMT</pubDate><guid>http://www.cppblog.com/3144046cjc/archive/2009/07/26/91264.html</guid><wfw:comment>http://www.cppblog.com/3144046cjc/comments/91264.html</wfw:comment><comments>http://www.cppblog.com/3144046cjc/archive/2009/07/26/91264.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/3144046cjc/comments/commentRss/91264.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/3144046cjc/services/trackbacks/91264.html</trackback:ping><description><![CDATA[<h1>1090. &nbsp;战地统计系统(War Field Statistical System)</h1>
<div id="pmisc">
<table>
    <tbody>
        <tr>
            <td width="40%">
            输入文件名：c.in &nbsp; &nbsp;
            输出文件名：c.out
            </td>
            <td style="text-align: right;">
            <a rel="nofollow" href="http://oi.tju.edu.cn/problem/submit/1090/">提交</a>&nbsp;
            <a rel="nofollow" href="http://oi.tju.edu.cn/community/board/3/">讨论</a>&nbsp;
            <a rel="nofollow" href="http://oi.tju.edu.cn/status?pid=1090">运行状况</a>&nbsp;
            </td>
        </tr>
    </tbody>
</table>
</div>
<hr>
<p>
2050年，人类与外星人之间的战争已趋于白热化。就在这时，人类发明出一种超级武器，这种武器能够同时对相邻的多个目标进行攻击。凡是防御力小于或等于
这种武器攻击力的外星人遭到它的攻击，就会被消灭。然而，拥有超级武器是远远不够的，人们还需要一个战地统计系统时刻反馈外星人部队的信息。这个艰巨的任
务落在你的身上。请你尽快设计出这样一套系统。
</p>
<p>
这套系统需要具备能够处理如下2类信息的能力：
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;1.外星人向[x1，x2]内的每个位置增援一支防御力为v的部队。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;2.人类使用超级武器对[x1，x2]内的所有位置进行一次攻击力为v的打击。系统需要返回在这次攻击中被消灭的外星人个数。
</p>
<p>注：防御力为i的外星人部队由i个外星人组成，其中第j个外星人的防御力为j。</p>
<p><strong> 输入格式</strong> </p>
<p>
从文件c.in第一行读入n，m。其中n表示有n个位置，m表示有m条信息。
</p>
<p>
以下有m行，每行有4个整数k，x1，x2，v用来描述一条信息 。k表示这条信息属于第k类。x1，x2，v为相应信息的参数。k=1 or 2。</p>
<p>注：你可以认为最初的所有位置都没有外星人存在。</p>
<p>规模：0&lt;n&#8804;1000；0&lt;x1&#8804;x2&#8804;n；0&lt;v&#8804;1000；0&lt;m&#8804;2000
</p>
<p><strong> 输出格式</strong> </p>
<p>
结果输出到文件c.out。按顺序输出需要返回的信息。
</p>
<p><strong> 输入样例</strong> </p>
<pre>3 5<br>1 1 3 4<br>2 1 2 3<br>1 1 2 2<br>1 2 3 1<br>2 2 3 5<br><br></pre>
<p><strong> 输出样例</strong> </p>
<pre>6<br>9<br><br></pre>
<p><strong> 样例说明</strong> </p>
<pre>输入样例   对应输出     输出样例<br>3 5             无              6<br>1 1 3 4         无              9<br>2 1 2 3         6<br>1 1 2 2         无<br>1 2 3 1         无<br>2 2 3 5         9<br><br></pre>
<p><strong> 题目来源</strong> ：<a href="http://oi.tju.edu.cn/problem/source/26/">OIBH 信息学练习赛 #6</a></p>
<p><strong> 题目标签</strong> ：
</p>
<p><font color="green">二维</font>(1) &nbsp;
<font color="green">线段树</font>(1) &nbsp;
</p>
这个题目的标签是二维+线段树,我估计有些哥们真的用二维线段树来做了,查看了一下后面的代码,发现大多数的人的代码都超过2k,有的还达到s四五k之多.<br>我的思路是把这个题目转化成矩形切割来做,x,y,v三个参数以及默认的一个初始值代表了一个矩形区域,左下角(x1,y1)=(x,1),右上角(x2,y2)=(y,v);<br>切割的大体方法是从USACO上的一个题目学来的,类似木块上浮,从第一个矩形一直浮到最上面的矩形,每碰到一个遮盖的矩形就分裂当前矩形,在上浮的过程中计算出每次询问的答案.<br>如果你对矩形切割很了解,相信我的代码还是比较容易理解的.<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<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></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;std;<br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;MAXM</span><span style="color: #000000;">=</span><span style="color: #000000;">3000</span><span style="color: #000000;">+</span><span style="color: #000000;">100</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;rect<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;x1,y1,x2,y2;<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;rect(){};<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;rect(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;x1,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;y1,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;x2,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;y2)&nbsp;:&nbsp;x1(x1),y1(y1),x2(x2),y2(y2)&nbsp;{}<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">}temp,q[MAXM];<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;pos[MAXM],cp</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">,ans[MAXM],n,m;<br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;mark[MAXM];<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">inline&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;is_parted(rect</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;a,rect</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;b)<br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;(a.x2</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">b.x1&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;a.x1</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">b.x2&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;a.y2</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">b.y1&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;a.y1</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">b.y2);<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">}&nbsp;<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;Cut(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;p,rect&nbsp;cur)<br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(p</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">cp)&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(&nbsp;p</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">cp&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;is_parted(cur,q[pos[p]])&nbsp;)&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">p;<br></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(p</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">cp)&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;rect&nbsp;ques</span><span style="color: #000000;">=</span><span style="color: #000000;">q[pos[p]];<br></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;area</span><span style="color: #000000;">=</span><span style="color: #000000;">(cur.y2</span><span style="color: #000000;">-</span><span style="color: #000000;">cur.y1</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;">(cur.x2</span><span style="color: #000000;">-</span><span style="color: #000000;">cur.x1</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(cur.x1</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">ques.x1){&nbsp;<br></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;area</span><span style="color: #000000;">-=</span><span style="color: #000000;">(ques.x1</span><span style="color: #000000;">-</span><span style="color: #000000;">cur.x1)</span><span style="color: #000000;">*</span><span style="color: #000000;">(cur.y2</span><span style="color: #000000;">-</span><span style="color: #000000;">cur.y1</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;rect&nbsp;temp</span><span style="color: #000000;">=</span><span style="color: #000000;">cur;<br></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;cur.x1</span><span style="color: #000000;">=</span><span style="color: #000000;">ques.x1;<br></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;temp.x2</span><span style="color: #000000;">=</span><span style="color: #000000;">ques.x1</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;Cut(p</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">,temp);<br></span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;}<br></span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(cur.x2</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">ques.x2){<br></span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;area</span><span style="color: #000000;">-=</span><span style="color: #000000;">(cur.x2</span><span style="color: #000000;">-</span><span style="color: #000000;">ques.x2)</span><span style="color: #000000;">*</span><span style="color: #000000;">(cur.y2</span><span style="color: #000000;">-</span><span style="color: #000000;">cur.y1</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br></span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;rect&nbsp;temp</span><span style="color: #000000;">=</span><span style="color: #000000;">cur;<br></span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;cur.x2</span><span style="color: #000000;">=</span><span style="color: #000000;">ques.x2;<br></span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;temp.x1</span><span style="color: #000000;">=</span><span style="color: #000000;">ques.x2</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;Cut(p</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">,temp);<br></span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;}<br></span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(cur.y2</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">ques.y2){<br></span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;area</span><span style="color: #000000;">-=</span><span style="color: #000000;">(cur.y2</span><span style="color: #000000;">-</span><span style="color: #000000;">ques.y2)</span><span style="color: #000000;">*</span><span style="color: #000000;">(cur.x2</span><span style="color: #000000;">-</span><span style="color: #000000;">cur.x1</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br></span><span style="color: #008080;">42</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;rect&nbsp;temp</span><span style="color: #000000;">=</span><span style="color: #000000;">cur;<br></span><span style="color: #008080;">43</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;cur.y2</span><span style="color: #000000;">=</span><span style="color: #000000;">ques.y2;<br></span><span style="color: #008080;">44</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;temp.y1</span><span style="color: #000000;">=</span><span style="color: #000000;">ques.y2</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">45</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;Cut(p</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">,temp);<br></span><span style="color: #008080;">46</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;}<br></span><span style="color: #008080;">47</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(cur.y1</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">ques.y1){<br></span><span style="color: #008080;">48</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;area</span><span style="color: #000000;">-=</span><span style="color: #000000;">(ques.y1</span><span style="color: #000000;">-</span><span style="color: #000000;">cur.y1)</span><span style="color: #000000;">*</span><span style="color: #000000;">(cur.x2</span><span style="color: #000000;">-</span><span style="color: #000000;">cur.x1</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br></span><span style="color: #008080;">49</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;rect&nbsp;temp</span><span style="color: #000000;">=</span><span style="color: #000000;">cur;<br></span><span style="color: #008080;">50</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;cur.y1</span><span style="color: #000000;">=</span><span style="color: #000000;">ques.y1;<br></span><span style="color: #008080;">51</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;temp.y2</span><span style="color: #000000;">=</span><span style="color: #000000;">ques.y1</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">52</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;Cut(p</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">,temp);<br></span><span style="color: #008080;">53</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;}<br></span><span style="color: #008080;">54</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;ans[p]</span><span style="color: #000000;">+=</span><span style="color: #000000;">area;<br></span><span style="color: #008080;">55</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">56</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">57</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br></span><span style="color: #008080;">58</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">59</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;freopen(</span><span style="color: #000000;">"</span><span style="color: #000000;">c.in</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">r</span><span style="color: #000000;">"</span><span style="color: #000000;">,stdin);<br></span><span style="color: #008080;">60</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;freopen(</span><span style="color: #000000;">"</span><span style="color: #000000;">c.out</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">w</span><span style="color: #000000;">"</span><span style="color: #000000;">,stdout);<br></span><span style="color: #008080;">61</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;memset(mark,</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(mark));<br></span><span style="color: #008080;">62</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;cin&nbsp;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;n&nbsp;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;m;<br></span><span style="color: #008080;">63</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">m;</span><span style="color: #000000;">++</span><span style="color: #000000;">i){<br></span><span style="color: #008080;">64</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;k,x,y,v;<br></span><span style="color: #008080;">65</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;k&nbsp;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;x&nbsp;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;y&nbsp;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;v;<br></span><span style="color: #008080;">66</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;q[i]</span><span style="color: #000000;">=</span><span style="color: #000000;">rect(x,</span><span style="color: #000000;">1</span><span style="color: #000000;">,y,v);<br></span><span style="color: #008080;">67</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(k</span><span style="color: #000000;">==</span><span style="color: #000000;">2</span><span style="color: #000000;">){<br></span><span style="color: #008080;">68</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mark[i]</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">69</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos[</span><span style="color: #000000;">++</span><span style="color: #000000;">cp]</span><span style="color: #000000;">=</span><span style="color: #000000;">i;<br></span><span style="color: #008080;">70</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">71</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;}<br></span><span style="color: #008080;">72</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">73</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;memset(ans,</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(ans));<br></span><span style="color: #008080;">74</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;p</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">75</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">m;</span><span style="color: #000000;">++</span><span style="color: #000000;">i){<br></span><span style="color: #008080;">76</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(mark[i])&nbsp;{&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">p;&nbsp;</span><span style="color: #0000ff;">continue</span><span style="color: #000000;">;&nbsp;}<br></span><span style="color: #008080;">77</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;Cut(p,q[i]);<br></span><span style="color: #008080;">78</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;}<br></span><span style="color: #008080;">79</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">cp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)&nbsp;cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;ans[i]&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;endl;<br></span><span style="color: #008080;">80</span>&nbsp;<span style="color: #000000;">&nbsp;<br></span><span style="color: #008080;">81</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">82</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">83</span>&nbsp;<span style="color: #000000;"></span></div>
<br><img src ="http://www.cppblog.com/3144046cjc/aggbug/91264.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/3144046cjc/" target="_blank">Chen Jiecao</a> 2009-07-26 20:19 <a href="http://www.cppblog.com/3144046cjc/archive/2009/07/26/91264.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TJU_OI 1140 箱里的钥匙</title><link>http://www.cppblog.com/3144046cjc/archive/2009/07/26/91237.html</link><dc:creator>Chen Jiecao</dc:creator><author>Chen Jiecao</author><pubDate>Sun, 26 Jul 2009 04:43:00 GMT</pubDate><guid>http://www.cppblog.com/3144046cjc/archive/2009/07/26/91237.html</guid><wfw:comment>http://www.cppblog.com/3144046cjc/comments/91237.html</wfw:comment><comments>http://www.cppblog.com/3144046cjc/archive/2009/07/26/91237.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/3144046cjc/comments/commentRss/91237.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/3144046cjc/services/trackbacks/91237.html</trackback:ping><description><![CDATA[<h1>1140. &nbsp;箱里的钥匙</h1>
<div id="pmisc">
<table style="width: 371px; height: 74px;">
    <tbody>
        <tr>
            <td width="40%">
            输入文名：box.in&nbsp; <br>
            输出文名：box.out
            </td>
            <td style="text-align: right;">
            <a rel="nofollow" href="http://oi.tju.edu.cn/problem/submit/1140/">提交</a>&nbsp;
            <a rel="nofollow" href="http://oi.tju.edu.cn/community/board/3/">讨论</a>&nbsp;
            <a rel="nofollow" href="http://oi.tju.edu.cn/status?pid=1140">运行状况</a>&nbsp;
            </td>
        </tr>
    </tbody>
</table>
</div>
<hr>
<p>
有N个编号为1到N的箱子和N个编号为1到N的钥匙，第i号钥匙只能用来打开第i号箱子。现在我们随机地将一把钥匙锁进一个箱子里，即每个箱子里都恰好有
一把钥匙，保证所有的情况都等可能性地出现。现在你有M个炸弹，每个炸弹可以用来炸开一个箱子，一旦你把某个箱子打开，你就可以取出其中的钥匙，从而有可
能用这钥匙打开更多的箱子。你的策略很简单，当没有箱子可以打开时，随便选一个箱子，用炸弹炸开它，取出钥匙并继续打开尽可能多的箱子，直至没有箱子可以
打开，然后继续使用下一颗炸弹。
</p>
<p>
现给定N，你的任务是求出你可以取得所有钥匙的概率。这个概率必须输出成分数&#8220;A/B&#8221;的形式，A和B都是正整数且公约数必须为1。
</p>
<p><strong> 输入格式</strong> </p>
<p>
输入一行，包含空格隔开的两个数N和M
</p>
<p><strong> 输出格式</strong> </p>
<p>
输出为A/B的形式。
</p>
<p><strong> 输入样例</strong> </p>
<pre>3 1<br></pre>
<p><strong> 输出样例</strong> </p>
<pre>1/3<br></pre>
<p><strong> 数据规模与约定</strong> </p>
<p>
1 &#8804; N &#8804; 20, 1 &#8804; M &#8804; N
</p>
<span style="color: red;">解析</span>:<br>这个题目基本上就是一个数学题,涉及到第一类stirling数的求解.<br>所谓<span style="color: red;">第一类stirling数</span>,例如S[n,k]表示<span style="color: red;">将一个大小为n的集合分成k个部分,每个部分的元素个数不小于1,且形成环</span>的<span style="color: red;">总方法数</span>.<br>一个元素也算作单独的环.<br>容易的到<br>&nbsp;&nbsp;&nbsp; S[1,1]=1;<br>&nbsp;&nbsp;&nbsp; S[n,0]=0;<br>当n&lt;k时,S[n,k]=0;<br>对合法的n,k,满足: S[n,k]=S[n-1,k-1]+(n-1)*S[n-1,k];<br>把n当作钥匙(也即箱子)的个数,k为钥匙所放位置形成的"环",每破坏一个箱子,都可以得到该箱子所属环的所有钥匙,k表示实际的环的个数<br>当k&gt;m时便不可能取得到所有的钥匙.<br>这样下面的代码就很好理解了.<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<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></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;std;<br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;MAXN</span><span style="color: #000000;">=</span><span style="color: #000000;">30</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">template&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;T</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">T&nbsp;Gcd(T&nbsp;a,T&nbsp;b)<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">a)</span><span style="color: #000000;">?</span><span style="color: #000000;">&nbsp;b&nbsp;:&nbsp;Gcd(b</span><span style="color: #000000;">%</span><span style="color: #000000;">a,a);<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;freopen(</span><span style="color: #000000;">"</span><span style="color: #000000;">box.in</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">r</span><span style="color: #000000;">"</span><span style="color: #000000;">,stdin);<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;freopen(</span><span style="color: #000000;">"</span><span style="color: #000000;">box.out</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">w</span><span style="color: #000000;">"</span><span style="color: #000000;">,stdout);<br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;n,m,S[MAXN][MAXN];<br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;cin&nbsp;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;n&nbsp;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;m;<br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;memset(S,</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(S));<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;S[</span><span style="color: #000000;">1</span><span style="color: #000000;">][</span><span style="color: #000000;">1</span><span style="color: #000000;">]</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">2</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">n;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)<br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;j</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;j</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">i;</span><span style="color: #000000;">++</span><span style="color: #000000;">j)<br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S[i][j]</span><span style="color: #000000;">=</span><span style="color: #000000;">S[i</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">][j</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">]</span><span style="color: #000000;">+</span><span style="color: #000000;">(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;">S[i</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">][j];<br></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;B</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">2</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">n;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)&nbsp;B</span><span style="color: #000000;">*=</span><span style="color: #000000;">i;<br></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;A</span><span style="color: #000000;">=</span><span style="color: #000000;">B;<br></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">m</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">n;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)&nbsp;A</span><span style="color: #000000;">-=</span><span style="color: #000000;">S[n][i];<br></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;G</span><span style="color: #000000;">=</span><span style="color: #000000;">Gcd(A,B);<br></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;A</span><span style="color: #000000;">/</span><span style="color: #000000;">G&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">/</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;B</span><span style="color: #000000;">/</span><span style="color: #000000;">G&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;endl;<br></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;"></span></div>
<br>   <img src ="http://www.cppblog.com/3144046cjc/aggbug/91237.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/3144046cjc/" target="_blank">Chen Jiecao</a> 2009-07-26 12:43 <a href="http://www.cppblog.com/3144046cjc/archive/2009/07/26/91237.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TJU_OI 1094 珍珠项链</title><link>http://www.cppblog.com/3144046cjc/archive/2009/07/22/90832.html</link><dc:creator>Chen Jiecao</dc:creator><author>Chen Jiecao</author><pubDate>Wed, 22 Jul 2009 07:15:00 GMT</pubDate><guid>http://www.cppblog.com/3144046cjc/archive/2009/07/22/90832.html</guid><wfw:comment>http://www.cppblog.com/3144046cjc/comments/90832.html</wfw:comment><comments>http://www.cppblog.com/3144046cjc/archive/2009/07/22/90832.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/3144046cjc/comments/commentRss/90832.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/3144046cjc/services/trackbacks/90832.html</trackback:ping><description><![CDATA[<br clear="all">
<h1>1094. &nbsp;珍珠项链</h1>
<div id="pmisc">
<table>
    <tbody>
        <tr>
            <td width="40%">
            输入文件名：necklace.in &nbsp; &nbsp; <br>
            输出文件名：necklace.out
            </td>
            <td style="text-align: right;">
            <a rel="nofollow" href="http://oi.tju.edu.cn/problem/submit/1094/">提交</a>&nbsp;
            <a rel="nofollow" href="http://oi.tju.edu.cn/community/board/3/">讨论</a>&nbsp;
            <a rel="nofollow" href="http://oi.tju.edu.cn/status?pid=1094">运行状况</a>&nbsp;
            </td>
        </tr>
    </tbody>
</table>
</div>
<hr>
<p>
有一串由n个珍珠组成的珍珠项链，珍珠的编号为1..n，每个珍珠都有各自的价值，我们用w[i]表示编号为i的珍珠的价值（注意：w[i]可以小于
零），已知这n个珍珠的价值量总和是n-1,现要求你在项链的某个位置断开，使得断开后的珍珠链满足对于任意k,前k个珍珠的价值量总和不超过k-1.
(对断开的一点说明, 如果在位置p断开, 那么得到的珍珠链将一定是p,p+1,...,n,1,2,...,p-1)
</p>
<p><strong> 输入格式</strong> </p>
<p>
输入文件的第一行有一个唯一的整数n,
</p>
<p>
接下来n个用空格和换行符隔开的整数分别表示w[1],w[2],...,w[n]
</p>
<p><strong> 输出格式</strong> </p>
<p>
如果无解请输出一行"Impossible"（不含引号）否则输出一个整数表示断开后的珍珠链第一个珍珠的编号
</p>
<p><strong> 输入样例</strong> </p>
<pre>5<br>1 1 1 1 0<br><br></pre>
<p><strong> 输出样例</strong> </p>
<pre>5<br><br></pre>
<p><strong> 数据规模与约定</strong> </p>
<p>
3&#8804;n&#8804;200,000 -1,000,000,000&#8804;w[i]&#8804;1,000,000,000
</p>
<p>
40%的测试数据满足n&#8804;1,000
</p>
<p><strong> 题目来源</strong> ：<a href="http://oi.tju.edu.cn/problem/source/28/">OIBH 信息学练习赛 #8</a></p>
<br>代码:<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<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></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;std;<br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;MAXN</span><span style="color: #000000;">=</span><span style="color: #000000;">200000</span><span style="color: #000000;">+</span><span style="color: #000000;">100</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;n,w[MAXN</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">1</span><span style="color: #000000;">];<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;freopen(</span><span style="color: #000000;">"</span><span style="color: #000000;">necklace.in</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">r</span><span style="color: #000000;">"</span><span style="color: #000000;">,stdin);<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;freopen(</span><span style="color: #000000;">"</span><span style="color: #000000;">necklace.out</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">w</span><span style="color: #000000;">"</span><span style="color: #000000;">,stdout);<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;cin&nbsp;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;n;<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">n;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)&nbsp;cin&nbsp;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;w[i],w[i</span><span style="color: #000000;">+</span><span style="color: #000000;">n]</span><span style="color: #000000;">=</span><span style="color: #000000;">w[i];<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;len</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">,tot</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;;<br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">n</span><span style="color: #000000;">*</span><span style="color: #000000;">2</span><span style="color: #000000;">;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(tot</span><span style="color: #000000;">+</span><span style="color: #000000;">w[i]</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">len)&nbsp;tot</span><span style="color: #000000;">+=</span><span style="color: #000000;">w[i],</span><span style="color: #000000;">++</span><span style="color: #000000;">len;<br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;tot</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;len</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;}<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(len</span><span style="color: #000000;">==</span><span style="color: #000000;">n)&nbsp;{&nbsp;cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">-</span><span style="color: #000000;">len</span><span style="color: #000000;">+</span><span style="color: #000000;">2</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;endl;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;}<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">Impossible\n</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;<br></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;"></span></div>
基本上,就是枚举珍珠,如果某个珍珠可以作为第一颗珍珠,那么接着把它的下一颗当作第二颗,如果合法,继续下一颗,如果不合法,直接把当前不合法的这一颗的下一颗当作第一颗继续枚举.<br>为什么挡当前的这颗珍珠在这个位置不行,就不用在别的位置尝试呢?这是因为<span style="color: red;">一旦某颗珍珠作为断掉之后的链第k颗不合法的话,它也一定不可能在当作第1、第2........或第k-1颗时合法</span>,略证如下:<br>若A[1],A[2],A[3]......A[k-1] 作为前(k-1)颗珍珠合法................................................................................(1)<br>而A[1]+A[2]+A[3]+......+A[k]&gt;k-1&nbsp;&nbsp; 不合法...........................................................................................(2)<br>那么我们有<br>A[t+1]+A[t+1]+......+A[k]&gt;k-1-(A[1]+A[2]+......+A[t])&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (1&lt;=t&lt;k).............................................(3)<br>(1)==&gt; A[1]+A[2]+.......A[t]&lt;=t-1<br>所以由(3)知 A[t+1]+A[t+2]+......A[k]&gt;k-1-(t-1)=k-t...........................................................................(4)<br>而要想把A[t+1],A[t+2],.......A[k]当作第1,2,.........(k-t)颗珍珠且合法,必须有<br>A[t+1]+A[t+2]+.......A[k]&lt;=k-t-1&nbsp; (有k-t颗珠子)..................................................................................(5)<br>(4),(5)矛盾,所以红色部分得证.<br><br><img src ="http://www.cppblog.com/3144046cjc/aggbug/90832.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/3144046cjc/" target="_blank">Chen Jiecao</a> 2009-07-22 15:15 <a href="http://www.cppblog.com/3144046cjc/archive/2009/07/22/90832.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>