<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Beyond the Void &#187; 哈希</title>
	<atom:link href="http://www.byvoid.com/blog/tag/%e5%93%88%e5%b8%8c/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.byvoid.com/blog</link>
	<description></description>
	<lastBuildDate>Tue, 29 Jun 2010 08:44:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>NOI 2001 解题报告</title>
		<link>http://www.byvoid.com/blog/noi-2001-solution/</link>
		<comments>http://www.byvoid.com/blog/noi-2001-solution/#comments</comments>
		<pubDate>Sat, 21 Mar 2009 09:31:06 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[NOI]]></category>
		<category><![CDATA[2000]]></category>
		<category><![CDATA[BFS]]></category>
		<category><![CDATA[NOI2001]]></category>
		<category><![CDATA[Treap]]></category>
		<category><![CDATA[动态规划]]></category>
		<category><![CDATA[反正切]]></category>
		<category><![CDATA[哈希]]></category>
		<category><![CDATA[导数]]></category>
		<category><![CDATA[并差集]]></category>
		<category><![CDATA[树形动态规划]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=982</guid>
		<description><![CDATA[NOI2001的题目是[反正切函数的应用][聪明的打字员][陨石的秘密][食物链][炮兵阵地][方程的解数]。 其中[反正切函数的应用][聪明的打字员]较为简单，[陨石的秘密][食物链][炮兵阵地][方程的解数]... ]]></description>
			<content:encoded><![CDATA[<p>NOI2001的题目是[反正切函数的应用][聪明的打字员][陨石的秘密][食物链][炮兵阵地][方程的解数]。</p>
<p>其中[反正切函数的应用][聪明的打字员]较为简单，[陨石的秘密][食物链][炮兵阵地][方程的解数]稍有难度。</p>
<p>[反正切函数的应用]是一个求函数最值的问题，要配合数学知识解决。[聪明的打字员]是广度优先搜索问题。[陨石的秘密]是一个树形动态规划的问题，需要仔细思考。[食物链]用到了并差集。[  炮兵阵地]是个不易看出的动态规划问题。[方程的解数]是搜索问题，需要用哈希表来优化。</p>
<p><span id="more-982"></span></p>
<p><strong>[反正切函数的应用]</strong></p>
<p>根据题中公式，可以推出 a=(b*c-1)/(b+c)。由此得出c=(a*b+1)/(b-a)。因为b,c均为正整数，所以b&gt;a。</p>
<p>我们要求b+c最小，设函数y=f(x)，自变量x为b的取值，但不限于正整数。则有</p>
<ul>
<li>f(x) = (a*x+1)/(x-a) + x = a + ((1+a^2)/(x-a)) + x</li>
</ul>
<p>对f(x)求导，得导数</p>
<ul>
<li>f&#8217;(x)=1-(1+a^2)/(x-a)^2</li>
</ul>
<p>f&#8217;(x)=0 得出 x = a+(a^2+1)^0.5 或 x = a-(a^2+1)^0.5，由于x&gt;0，取 <strong>x = a+(a^2+1)^0.5</strong>。</p>
<p>且x &gt; a+(a^2+1)^0.5时，f&#8217;(x)&gt;0，x &lt; a+(a^2+1)^0.5时，f&#8217;(x)&lt;0，所以当x = a+(a^2+1)^0.5时，f(x)取得最小值。</p>
<p>由于b和c都是正整数，只需在x一边寻找距离x最近的整数b,c，b+c即要求的最小值。</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p982code7'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p9827"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
</pre></td><td class="code" id="p982code7"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/*
 * Problem: NOI2001 arctan
 * Author: Guo Jiabao
 * Time: 2009.3.21 14:18
 * State: Solved
 * Memo: 函数最值问题
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> a,b,c,Ans<span style="color: #000080;">=</span><span style="color: #208080;">0x7FFFFFFF</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;arctan.in&quot;</span>,<span style="color: #FF0000;">&quot;r&quot;</span>,<span style="color: #0000ff;">stdin</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;arctan.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,<span style="color: #000040;">&amp;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">double</span> t<span style="color: #000080;">=</span><span style="color: #0000dd;">ceil</span><span style="color: #008000;">&#40;</span>a<span style="color: #000040;">+</span><span style="color: #0000dd;">sqrt</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span><span style="color: #008000;">&#41;</span>a<span style="color: #000040;">*</span>a<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #008080;">;;</span>t<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		b<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#40;</span>t<span style="color: #000040;">+</span><span style="color:#800080;">0.1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> q<span style="color: #000080;">=</span>a<span style="color: #008080;">;</span>
		q<span style="color: #000080;">=</span>q<span style="color: #000040;">*</span>b<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>q<span style="color: #000040;">%</span><span style="color: #008000;">&#40;</span>b<span style="color: #000040;">-</span>a<span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			c<span style="color: #000080;">=</span>q<span style="color: #000040;">/</span><span style="color: #008000;">&#40;</span>b<span style="color: #000040;">-</span>a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			Ans<span style="color: #000080;">=</span>b<span style="color: #000040;">+</span>c<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,Ans<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p><strong>[聪明的打字员]</strong></p>
<p>简单的广搜题，对于每个状态，直接按照规则扩展6状态，开一个哈希表判重，直到搜索到结果为止。</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p982code8'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p9828"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
</pre></td><td class="code" id="p982code8"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/*
 * Problem: NOI2001 clever
 * Author: Guo Jiabao
 * Time: 2009.3.17 13:37
 * State: Solved
 * Memo: BFS
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> LIM<span style="color: #000080;">=</span><span style="color: #0000dd;">1000000</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> state
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> s,step,pos<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> used<span style="color: #008000;">&#91;</span>LIM<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">7</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> S,T<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> Q_size,Q_head,Q_tail<span style="color: #008080;">;</span>
state Q<span style="color: #008000;">&#91;</span>LIM<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
state start<span style="color: #008080;">;</span>
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;clever.in&quot;</span>,<span style="color: #FF0000;">&quot;r&quot;</span>,<span style="color: #0000ff;">stdin</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;clever.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>S,<span style="color: #000040;">&amp;</span>T<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	start.<span style="color: #007788;">s</span><span style="color: #000080;">=</span>S<span style="color: #008080;">;</span>
	start.<span style="color: #007788;">pos</span><span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	start.<span style="color: #007788;">step</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	Q_head<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>Q_tail<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>Q_size<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> Answer<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> ans<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,ans<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">exit</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> Q_ins<span style="color: #008000;">&#40;</span>state p<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>used<span style="color: #008000;">&#91;</span>p.<span style="color: #007788;">s</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p.<span style="color: #007788;">pos</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
	used<span style="color: #008000;">&#91;</span>p.<span style="color: #007788;">s</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p.<span style="color: #007788;">pos</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p.<span style="color: #007788;">s</span><span style="color: #000080;">==</span>T<span style="color: #008000;">&#41;</span> Answer<span style="color: #008000;">&#40;</span>p.<span style="color: #007788;">step</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Q_size<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">++</span>Q_head<span style="color: #000080;">==</span>LIM<span style="color: #008000;">&#41;</span> Q_head<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	Q<span style="color: #008000;">&#91;</span>Q_head<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
state Q_pop<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	state r<span style="color: #000080;">=</span>Q<span style="color: #008000;">&#91;</span>Q_tail<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	Q_size<span style="color: #000040;">--</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">++</span>Q_tail<span style="color: #000080;">==</span>LIM<span style="color: #008000;">&#41;</span> Q_tail<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> r<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> BFS<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	state u,v<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> pos<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">7</span><span style="color: #008000;">&#93;</span>,su,sv,tim,p,i<span style="color: #008080;">;</span>
	Q_ins<span style="color: #008000;">&#40;</span>start<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>Q_size<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		u<span style="color: #000080;">=</span>Q_pop<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		su<span style="color: #000080;">=</span>sv<span style="color: #000080;">=</span>u.<span style="color: #007788;">s</span><span style="color: #008080;">;</span>
		p<span style="color: #000080;">=</span>u.<span style="color: #007788;">pos</span><span style="color: #008080;">;</span>
		tim<span style="color: #000080;">=</span>LIM<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>p<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			tim<span style="color: #000040;">/</span><span style="color: #000080;">=</span><span style="color: #0000dd;">10</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">6</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			pos<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>sv<span style="color: #000040;">%</span><span style="color:#800080;">10</span><span style="color: #008080;">;</span>
			sv<span style="color: #000040;">/</span><span style="color: #000080;">=</span><span style="color: #0000dd;">10</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">&gt;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #666666;">//swap0</span>
		<span style="color: #008000;">&#123;</span>
			sv<span style="color: #000080;">=</span>su<span style="color: #008080;">;</span>
			sv<span style="color: #000040;">-</span><span style="color: #000080;">=</span><span style="color: #0000dd;">100000</span><span style="color: #000040;">*</span>pos<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> tim<span style="color: #000040;">*</span>pos<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			sv<span style="color: #000040;">+</span><span style="color: #000080;">=</span>tim<span style="color: #000040;">*</span>pos<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> <span style="color: #0000dd;">100000</span><span style="color: #000040;">*</span>pos<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">pos</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">pos</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">step</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">step</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">s</span><span style="color: #000080;">=</span>sv<span style="color: #008080;">;</span>
			Q_ins<span style="color: #008000;">&#40;</span>v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">6</span><span style="color: #008000;">&#41;</span> <span style="color: #666666;">//swap1</span>
		<span style="color: #008000;">&#123;</span>
			sv<span style="color: #000080;">=</span>su<span style="color: #008080;">;</span>
			sv<span style="color: #000040;">-</span><span style="color: #000080;">=</span>pos<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">6</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> tim<span style="color: #000040;">*</span>pos<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			sv<span style="color: #000040;">+</span><span style="color: #000080;">=</span>tim<span style="color: #000040;">*</span>pos<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">6</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> pos<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">pos</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">pos</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">step</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">step</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">s</span><span style="color: #000080;">=</span>sv<span style="color: #008080;">;</span>
			Q_ins<span style="color: #008000;">&#40;</span>v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>pos<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #0000dd;">9</span><span style="color: #008000;">&#41;</span> <span style="color: #666666;">//up</span>
		<span style="color: #008000;">&#123;</span>
			sv<span style="color: #000080;">=</span>su<span style="color: #008080;">;</span>
			sv<span style="color: #000040;">+</span><span style="color: #000080;">=</span>tim<span style="color: #008080;">;</span>
			v.<span style="color: #007788;">pos</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">pos</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">step</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">step</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">s</span><span style="color: #000080;">=</span>sv<span style="color: #008080;">;</span>
			Q_ins<span style="color: #008000;">&#40;</span>v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>pos<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> <span style="color: #666666;">//down</span>
		<span style="color: #008000;">&#123;</span>
			sv<span style="color: #000080;">=</span>su<span style="color: #008080;">;</span>
			sv<span style="color: #000040;">-</span><span style="color: #000080;">=</span>tim<span style="color: #008080;">;</span>
			v.<span style="color: #007788;">pos</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">pos</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">step</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">step</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">s</span><span style="color: #000080;">=</span>sv<span style="color: #008080;">;</span>
			Q_ins<span style="color: #008000;">&#40;</span>v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">&gt;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #666666;">//left</span>
		<span style="color: #008000;">&#123;</span>
			v.<span style="color: #007788;">s</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">s</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">pos</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">pos</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">step</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">step</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			Q_ins<span style="color: #008000;">&#40;</span>v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">6</span><span style="color: #008000;">&#41;</span> <span style="color: #666666;">//right</span>
		<span style="color: #008000;">&#123;</span>
			v.<span style="color: #007788;">s</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">s</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">pos</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">pos</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			v.<span style="color: #007788;">step</span><span style="color: #000080;">=</span>u.<span style="color: #007788;">step</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
			Q_ins<span style="color: #008000;">&#40;</span>v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	BFS<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p><strong>[陨石的秘密]</strong></p>
<p>容易看出是动态规划，但是状态转移方程容易考虑不周全。</p>
<p>题目中样例的8种方案为</p>
<pre>{[]()} {()[]} {}[()] [()]{} []{()} {()}[] (){[]} {[]}()</pre>
<p>可以看出每个SS表达式都可以看成由几个小的SS组成，组成方式可能是嵌套或者连接。如果是嵌套（包括仅1层），我们把这个嵌套体看作一个整体部分，称为一个组。则每个SS表达式都是由几个组连接而成了。</p>
<p>设定 F[p1,p2,p3,d]为深度<strong>不超过</strong>d，包含p1个{}，p2个[],p3个()的SS表达式的可能组成的方案数。S[p1,p2,p3,d]为深度不超过d，包含p1个{}，p2个[],p3个()的<strong>一个组</strong>的可能组成的方案数。</p>
<p>则状态转移方程为</p>
<pre>S[p1,p2,p3,d]=
{
	0 (p1==p2==p3==0)
	F[p1-1,p2,p3,d-1] (p1&gt;=1)
	F[p1,p2-1,p3,d-1] (p1==0 &amp;&amp; p2&gt;=1)
	F[p1,p2,p3-1,d-1] (p1==0 &amp;&amp; p2==0 &amp;&amp; p3&gt;=1)
}</pre>
<p>F[p1,p2,p3,d]=Σ(S[x1,x2,x3,d]*F[p1-x1,p2-x2,p3-x3,d]) (0&lt;=x1&lt;=p1,0&lt;=x2&lt;=p2,0&lt;=x3&lt;=p3且x1,x2,x3不同时为0)</p>
<p>初始条件</p>
<ul>
<li>F[0,0,0,i]=1 (0&lt;=i&lt;=D)</li>
</ul>
<p>最终的结果就是</p>
<ul>
<li>F[L1,L2,L3,D]-F[L1,L2,L3,D-1]</li>
</ul>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p982code9'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p9829"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
</pre></td><td class="code" id="p982code9"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI2001 secret
 * Author: Guo Jiabao
 * Time: 2009.3.18 13:54
 * State: Solved
 * Memo: 动态规划
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXL<span style="color: #000080;">=</span><span style="color: #0000dd;">11</span>,MAXD<span style="color: #000080;">=</span><span style="color: #0000dd;">31</span>,MOD<span style="color: #000080;">=</span><span style="color: #0000dd;">11380</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> L1,L2,L3,D,Ans<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> F<span style="color: #008000;">&#91;</span>MAXL<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXL<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXL<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXD<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> single<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> p1,<span style="color: #0000ff;">int</span> p2,<span style="color: #0000ff;">int</span> p3,<span style="color: #0000ff;">int</span> d<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> dp<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> p1,<span style="color: #0000ff;">int</span> p2,<span style="color: #0000ff;">int</span> p3,<span style="color: #0000ff;">int</span> d<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;secret.in&quot;</span>,<span style="color: #FF0000;">&quot;r&quot;</span>,<span style="color: #0000ff;">stdin</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;secret.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>L1,<span style="color: #000040;">&amp;</span>L2,<span style="color: #000040;">&amp;</span>L3,<span style="color: #000040;">&amp;</span>D<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> p1,p2,p3,d<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>d<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>d<span style="color: #000080;">&lt;=</span>D<span style="color: #008080;">;</span>d<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>p1<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>p1<span style="color: #000080;">&lt;=</span>L1<span style="color: #008080;">;</span>p1<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>p2<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>p2<span style="color: #000080;">&lt;=</span>L2<span style="color: #008080;">;</span>p2<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
				<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>p3<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>p3<span style="color: #000080;">&lt;=</span>L3<span style="color: #008080;">;</span>p3<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
					F<span style="color: #008000;">&#91;</span>p1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p3<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>d<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		F<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>d<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> single<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> p1,<span style="color: #0000ff;">int</span> p2,<span style="color: #0000ff;">int</span> p3,<span style="color: #0000ff;">int</span> d<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p1<span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span> dp<span style="color: #008000;">&#40;</span>p1<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,p2,p3,d<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p1<span style="color: #000080;">==</span><span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> p2<span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span> dp<span style="color: #008000;">&#40;</span>p1,p2<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,p3,d<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span>
		<span style="color: #0000ff;">return</span> dp<span style="color: #008000;">&#40;</span>p1,p2,p3<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,d<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> dp<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> p1,<span style="color: #0000ff;">int</span> p2,<span style="color: #0000ff;">int</span> p3,<span style="color: #0000ff;">int</span> d<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>d<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>F<span style="color: #008000;">&#91;</span>p1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p3<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>d<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> x1,x2,x3,y1,y2,y3<span style="color: #008080;">;</span>
		F<span style="color: #008000;">&#91;</span>p1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p3<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>d<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>x1<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>x1<span style="color: #000080;">&lt;=</span>p1<span style="color: #008080;">;</span>x1<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>x2<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>x2<span style="color: #000080;">&lt;=</span>p2<span style="color: #008080;">;</span>x2<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
				<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>x3<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>x3<span style="color: #000080;">&lt;=</span>p3<span style="color: #008080;">;</span>x3<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
				<span style="color: #008000;">&#123;</span>
					y1<span style="color: #000080;">=</span>p1<span style="color: #000040;">-</span>x1<span style="color: #008080;">;</span>y2<span style="color: #000080;">=</span>p2<span style="color: #000040;">-</span>x2<span style="color: #008080;">;</span>y3<span style="color: #000080;">=</span>p3<span style="color: #000040;">-</span>x3<span style="color: #008080;">;</span>
					<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>x1<span style="color: #000040;">+</span>x2<span style="color: #000040;">+</span>x3<span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">continue</span><span style="color: #008080;">;</span>
					F<span style="color: #008000;">&#91;</span>p1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p3<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>d<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span><span style="color: #000080;">=</span>single<span style="color: #008000;">&#40;</span>x1,x2,x3,d<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>dp<span style="color: #008000;">&#40;</span>y1,y2,y3,d<span style="color: #008000;">&#41;</span><span style="color: #000040;">%</span>MOD<span style="color: #008080;">;</span>
					F<span style="color: #008000;">&#91;</span>p1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p3<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>d<span style="color: #008000;">&#93;</span><span style="color: #000040;">%</span><span style="color: #000080;">=</span>MOD<span style="color: #008080;">;</span>
				<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> F<span style="color: #008000;">&#91;</span>p1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p2<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p3<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>d<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Ans<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>dp<span style="color: #008000;">&#40;</span>L1,L2,L3,D<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span>dp<span style="color: #008000;">&#40;</span>L1,L2,L3,D<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">+</span>MOD<span style="color: #008000;">&#41;</span><span style="color: #000040;">%</span>MOD<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,Ans<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p><strong>[食物链]</strong></p>
<p>这道题真是个并差集的典型应用问题。由于判断真假总是根据前面得到的关系，在某时关系不是完全的，所以不能直接判断a,b究竟是哪个物种，但是可以知道部分的关系。</p>
<p>很显然，合法的关系都是三角形环，如果a,b同属于一个环内，那么它们的关系是可以直接判断的。如果不属于同一环，因为不与前面矛盾，就认 为是正确的，然后把a,b所在的两个环合并。建立一个并差集，表示每个生物所属的物种类型。对于物种i，定义prev[i]为可以吃掉i的物种类 型，next[i]为i可以吃掉的物种类型。初始时，每个物种i对应一个单独的类型，并且引入两个虚节点prev[i]和next[i]，可分别为一个单 独的类型。</p>
<p>合并两个环时，对于D=1，a与b为同一物种，分别把(a,b),(prev[a],prev[b]),(next[a],next[b])依次合并。</p>
<p>对于D=2，a可以吃掉b，则分别把(next[a],b),(a,prev[b]),(prev[a],next[b])依次合并。</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p982code10'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p98210"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
</pre></td><td class="code" id="p982code10"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI2001
 * Author: Guo Jiabao
 * Time: 2009.3.13 13:28
 * State: Solved
 * Memo: 并差集 等价类判断
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">50001</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> UFS
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> f<span style="color: #008000;">&#91;</span>MAXN<span style="color: #000040;">*</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> getroot<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> t,r<span style="color: #000080;">=</span>a<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>f<span style="color: #008000;">&#91;</span>r<span style="color: #008000;">&#93;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>r<span style="color: #008000;">&#41;</span> r<span style="color: #000080;">=</span>f<span style="color: #008000;">&#91;</span>r<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>f<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>a<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>t<span style="color: #000080;">=</span>f<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>f<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>r<span style="color: #008080;">;</span>a<span style="color: #000080;">=</span>t<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">return</span> r<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">bool</span> judge<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> getroot<span style="color: #008000;">&#40;</span>a<span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span>getroot<span style="color: #008000;">&#40;</span>b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">void</span> merge<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>f<span style="color: #008000;">&#91;</span>getroot<span style="color: #008000;">&#40;</span>b<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>getroot<span style="color: #008000;">&#40;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>U<span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> N,M,Fake<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> prev<span style="color: #008000;">&#91;</span>MAXN<span style="color: #000040;">*</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span>,next<span style="color: #008000;">&#91;</span>MAXN<span style="color: #000040;">*</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,p,n<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;eat.in&quot;</span>,<span style="color: #FF0000;">&quot;r&quot;</span>,<span style="color: #0000ff;">stdin</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;eat.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>N,<span style="color: #000040;">&amp;</span>M<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		p<span style="color: #000080;">=</span>N<span style="color: #000040;">+</span>i<span style="color: #008080;">;</span>n<span style="color: #000080;">=</span>p<span style="color: #000040;">+</span>N<span style="color: #008080;">;</span>
		U.<span style="color: #007788;">f</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>U.<span style="color: #007788;">f</span><span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>U.<span style="color: #007788;">f</span><span style="color: #008000;">&#91;</span>n<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>n<span style="color: #008080;">;</span>
		prev<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>next<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>n<span style="color: #008080;">;</span>prev<span style="color: #008000;">&#91;</span>n<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>
		next<span style="color: #008000;">&#91;</span>n<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>prev<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>n<span style="color: #008080;">;</span>next<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">bool</span> relation<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> d,<span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>d<span style="color: #000080;">==</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>U.<span style="color: #007788;">judge</span><span style="color: #008000;">&#40;</span>a,b<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>U.<span style="color: #007788;">judge</span><span style="color: #008000;">&#40;</span>prev<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>,b<span style="color: #008000;">&#41;</span> <span style="color: #000040;">||</span> U.<span style="color: #007788;">judge</span><span style="color: #008000;">&#40;</span>next<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>,b<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
		U.<span style="color: #007788;">merge</span><span style="color: #008000;">&#40;</span>a,b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		U.<span style="color: #007788;">merge</span><span style="color: #008000;">&#40;</span>prev<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>,prev<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		U.<span style="color: #007788;">merge</span><span style="color: #008000;">&#40;</span>next<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>,next<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">else</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>U.<span style="color: #007788;">judge</span><span style="color: #008000;">&#40;</span>next<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>,b<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>U.<span style="color: #007788;">judge</span><span style="color: #008000;">&#40;</span>a,b<span style="color: #008000;">&#41;</span> <span style="color: #000040;">||</span> U.<span style="color: #007788;">judge</span><span style="color: #008000;">&#40;</span>prev<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>,b<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
		U.<span style="color: #007788;">merge</span><span style="color: #008000;">&#40;</span>next<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>,b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		U.<span style="color: #007788;">merge</span><span style="color: #008000;">&#40;</span>a,prev<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		U.<span style="color: #007788;">merge</span><span style="color: #008000;">&#40;</span>prev<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>,next<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,d,a,b<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>M<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>d,<span style="color: #000040;">&amp;</span>a,<span style="color: #000040;">&amp;</span>b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>a<span style="color: #000080;">&gt;</span>N <span style="color: #000040;">||</span> b<span style="color: #000080;">&gt;</span>N <span style="color: #000040;">||</span> <span style="color: #008000;">&#40;</span>d<span style="color: #000080;">==</span><span style="color: #0000dd;">2</span> <span style="color: #000040;">&amp;&amp;</span> a<span style="color: #000080;">==</span>b<span style="color: #008000;">&#41;</span> <span style="color: #000040;">||!</span>relation<span style="color: #008000;">&#40;</span>d,a,b<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			Fake<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,Fake<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p><strong>[炮兵阵地]</strong></p>
<p>较难看出的动态规划问题。注意到数据范围N≤100；M≤10，发现每行的宽度都不大，所以可以考虑把一行看成一个状态，表示该行的布置方案。每行的布置方案可以预先处理出，由数学知识可以算出，每行最多的布置方案数也不过60个而已。</p>
<p>状态设定</p>
<p>F[i,a,b]为前i行，第i行的方案为A[a]，第i-1行的方案为A[b]的最大炮兵数。</p>
<p>状态转移方程</p>
<ul>
<li>F[i,a,b]=Max{ F[i-1,b,c] + P[a] }</li>
</ul>
<p>其中c为i-2行的布置方案，a,b,c应保证互不冲突，即放置方案中炮兵都在平地上，且不会互相攻击到。</p>
<p>目标结果</p>
<ul>
<li>Ans=Max{F[N,a,b]}</li>
</ul>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p982code11'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p98211"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
</pre></td><td class="code" id="p982code11"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI2001 cannon
 * Author: Guo Jiabao
 * Time: 2009.3.20 17:54
 * State: Solved
 * Memo: 动态规划 位表示状态
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">101</span>,MAXM<span style="color: #000080;">=</span><span style="color: #0000dd;">11</span>,MAXA<span style="color: #000080;">=</span><span style="color: #0000dd;">61</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> N,M,Ans,AC<span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> used<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> F<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXA<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXA<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> A<span style="color: #008000;">&#91;</span>MAXA<span style="color: #008000;">&#93;</span>,C<span style="color: #008000;">&#91;</span>MAXA<span style="color: #008000;">&#93;</span>,Pla<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">char</span> c<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;cannon.in&quot;</span>,<span style="color: #FF0000;">&quot;r&quot;</span>,<span style="color: #0000ff;">stdin</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;cannon.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>N,<span style="color: #000040;">&amp;</span>M<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">do</span> c<span style="color: #000080;">=</span><span style="color: #0000dd;">getchar</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span>c<span style="color: #000080;">==</span><span style="color: #0000dd;">10</span> <span style="color: #000040;">||</span> c<span style="color: #000080;">==</span><span style="color: #0000dd;">13</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000dd;">ungetc</span><span style="color: #008000;">&#40;</span>c,<span style="color: #0000ff;">stdin</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		Pla<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>M<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>c<span style="color: #000080;">=</span><span style="color: #0000dd;">getchar</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #FF0000;">'H'</span><span style="color: #008000;">&#41;</span>
				Pla<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&lt;&lt;</span><span style="color: #008000;">&#40;</span>j<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> Max<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> a<span style="color: #000080;">&gt;</span>b<span style="color: #008080;">?</span>a<span style="color: #008080;">:</span>b<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> dynamic<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j,k,l,x,y,z,p,q<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">2</span>,j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>AC<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		x<span style="color: #000080;">=</span>A<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		p<span style="color: #000080;">=</span>C<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>x<span style="color: #000040;">&amp;</span>Pla<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>k<span style="color: #000080;">&lt;=</span>AC<span style="color: #008080;">;</span>k<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			y<span style="color: #000080;">=</span>A<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			q<span style="color: #000080;">=</span>C<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>y<span style="color: #000040;">&amp;</span>Pla<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #008000;">&#40;</span>x<span style="color: #000040;">&amp;</span>y<span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
				F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>p<span style="color: #000040;">+</span>q<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> Ans<span style="color: #008000;">&#41;</span>
				Ans <span style="color: #000080;">=</span> F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">3</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>AC<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			x<span style="color: #000080;">=</span>A<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>	p<span style="color: #000080;">=</span>C<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>x<span style="color: #000040;">&amp;</span>Pla<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
				<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>k<span style="color: #000080;">&lt;=</span>AC<span style="color: #008080;">;</span>k<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
				<span style="color: #008000;">&#123;</span>
					y<span style="color: #000080;">=</span>A<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
					<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>y<span style="color: #000040;">&amp;</span>Pla<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #008000;">&#40;</span>x<span style="color: #000040;">&amp;</span>y<span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
						<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>l<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>l<span style="color: #000080;">&lt;=</span>AC<span style="color: #008080;">;</span>l<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
						<span style="color: #008000;">&#123;</span>
							z<span style="color: #000080;">=</span>A<span style="color: #008000;">&#91;</span>l<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
							<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>z<span style="color: #000040;">&amp;</span>Pla<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>y<span style="color: #000040;">|</span>z<span style="color: #008000;">&#41;</span><span style="color: #000040;">&amp;</span>x<span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
								F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>Max<span style="color: #008000;">&#40;</span>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>,F<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>l<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> p<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
						<span style="color: #008000;">&#125;</span>
					<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> Ans<span style="color: #008000;">&#41;</span>
						Ans <span style="color: #000080;">=</span> F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
				<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> arrange<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> p<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">&gt;</span>M<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">int</span> r<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span>,c<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>M<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>used<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				c<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
				r<span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&lt;&lt;</span><span style="color: #008000;">&#40;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		AC<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
		A<span style="color: #008000;">&#91;</span>AC<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>r<span style="color: #008080;">;</span>
		C<span style="color: #008000;">&#91;</span>AC<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>c<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	used<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
	arrange<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">+</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	used<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	arrange<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	arrange<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	dynamic<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,Ans<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p><strong>[方程的解数]</strong></p>
<p>经典的搜索问题，方法是搜索每个x的所有可能值[1,M]，判断符合条件的解的个数。但是对于N=6，搜索量高达11390625000000，显然会超时。</p>
<p>我们不妨把等式变形，对于N项，把后N/2项移到等式右边，则移过去的项的k值全部取相反数。对于左边剩下的N/2项，搜索x的所有可能 值，计算左边式子的值，并插入到哈希表中。然后再对于右边的N-2项，搜索x的所有可能值，计算左边式子的值，然后再哈希表中查找与之相等的值的个数，加 到结果上。</p>
<p>插入到哈希表时先把绝对值Mod一个大质数，我选的是4000037，然后挂链解决冲突。为了提高效率，在哈希表的每个位置上我都建立了一个Treap，这样解决冲突时就能更快得找到了。</p>
<p>做这道题起初我试图直接用一个Treap存储所有的算式可能值，但是这样做会超时。通过使用哈希表，使数据平均分布了许多。哈希表和平衡树，或者Trie树混合使用不失为一种解决冲突优秀的方法。</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p982code12'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p98212"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
</pre></td><td class="code" id="p982code12"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI2001 equation1
 * Author: Guo Jiabao
 * Time: 2009.3.21 16:15
 * State: Solved
 * Memo: 搜索 + Hash +Treap判重
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">7</span>,MAXM<span style="color: #000080;">=</span><span style="color: #0000dd;">151</span>,MAXP<span style="color: #000080;">=</span><span style="color: #0000dd;">7</span>,MOD<span style="color: #000080;">=</span><span style="color: #0000dd;">4000037</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">bool</span> LEFT<span style="color: #000080;">=</span><span style="color: #0000ff;">true</span>,RIGHT<span style="color: #000080;">=</span><span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> TTreap
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">struct</span> Treap_node
	<span style="color: #008000;">&#123;</span>
		Treap_node <span style="color: #000040;">*</span>left,<span style="color: #000040;">*</span>right<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">int</span> value,weight,fix<span style="color: #008080;">;</span>
		Treap_node<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> v<span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span>value<span style="color: #008000;">&#40;</span>v<span style="color: #008000;">&#41;</span>,weight<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			left<span style="color: #000080;">=</span>right<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
			fix<span style="color: #000080;">=</span><span style="color: #0000dd;">rand</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
	Treap_node <span style="color: #000040;">*</span>root<span style="color: #008080;">;</span>
	TTreap<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span>root<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> rotate_left<span style="color: #008000;">&#40;</span>Treap_node <span style="color: #000040;">*</span><span style="color: #000040;">&amp;</span>p<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		Treap_node <span style="color: #000040;">*</span>q<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #008080;">;</span>
		p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #000080;">=</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #008080;">;</span>
		q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>
		p<span style="color: #000080;">=</span>q<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">void</span> rotate_right<span style="color: #008000;">&#40;</span>Treap_node <span style="color: #000040;">*</span><span style="color: #000040;">&amp;</span>p<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		Treap_node <span style="color: #000040;">*</span>q<span style="color: #000080;">=</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #008080;">;</span>
		p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #000080;">=</span>q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #008080;">;</span>
		q<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>
		p<span style="color: #000080;">=</span>q<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">void</span> insert<span style="color: #008000;">&#40;</span>Treap_node <span style="color: #000040;">*</span><span style="color: #000040;">&amp;</span>p,<span style="color: #0000ff;">int</span> value<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>p<span style="color: #008000;">&#41;</span>
			p<span style="color: #000080;">=</span><span style="color: #0000dd;">new</span> Treap_node<span style="color: #008000;">&#40;</span>value<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>value <span style="color: #000080;">==</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>value<span style="color: #008000;">&#41;</span>
			p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>weight<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>value <span style="color: #000080;">&lt;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>value<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			insert<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left,value<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>fix <span style="color: #000080;">&lt;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>fix<span style="color: #008000;">&#41;</span>
				rotate_right<span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">else</span>
		<span style="color: #008000;">&#123;</span>
			insert<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right,value<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>fix <span style="color: #000080;">&lt;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>fix<span style="color: #008000;">&#41;</span>
				rotate_left<span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">int</span> find<span style="color: #008000;">&#40;</span>Treap_node <span style="color: #000040;">*</span>p,<span style="color: #0000ff;">int</span> value<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>p<span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>value <span style="color: #000080;">==</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>value<span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">return</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>weight<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>value <span style="color: #000080;">&lt;</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>value<span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">return</span> find<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>left,value<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span>
			<span style="color: #0000ff;">return</span> find<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right,value<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> item
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> k,p,x<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>I<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> N,LIM,Mid,Ans<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> POW<span style="color: #008000;">&#91;</span>MAXM<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXP<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
TTreap Hash<span style="color: #008000;">&#91;</span>MOD<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> L<span style="color: #008080;">;</span>
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;equation1.in&quot;</span>,<span style="color: #FF0000;">&quot;r&quot;</span>,<span style="color: #0000ff;">stdin</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;equation1.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>N,<span style="color: #000040;">&amp;</span>LIM<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Mid<span style="color: #000080;">=</span>N<span style="color: #000040;">/</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>I<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">k</span>,<span style="color: #000040;">&amp;</span>I<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">p</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">&gt;</span>Mid<span style="color: #008000;">&#41;</span>
			I<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">k</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span>I<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">k</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000dd;">srand</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">9112</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> power<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> x,<span style="color: #0000ff;">int</span> p<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>POW<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		POW<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>p<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			POW<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span><span style="color: #000080;">=</span>x<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> POW<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> compute<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> rs<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span>,i<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>a<span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>b<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		rs<span style="color: #000040;">+</span><span style="color: #000080;">=</span>power<span style="color: #008000;">&#40;</span>I<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span>,I<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">p</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>I<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">k</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> rs<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> Abs<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> a<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">0</span><span style="color: #008080;">?</span><span style="color: #000040;">-</span>a<span style="color: #008080;">:</span>a<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> search<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> e<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,H<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>L <span style="color: #000040;">&amp;&amp;</span> e<span style="color: #000080;">&gt;</span>Mid <span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		i<span style="color: #000080;">=</span>compute<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span>,Mid<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		H<span style="color: #000080;">=</span>Abs<span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #000040;">%</span>MOD<span style="color: #008080;">;</span>
		Hash<span style="color: #008000;">&#91;</span>H<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span>Hash<span style="color: #008000;">&#91;</span>H<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">root</span>,i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>L <span style="color: #000040;">&amp;&amp;</span> e<span style="color: #000080;">&gt;</span>N<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		i<span style="color: #000080;">=</span>compute<span style="color: #008000;">&#40;</span>Mid<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,N<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		H<span style="color: #000080;">=</span>Abs<span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #000040;">%</span>MOD<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">int</span> a<span style="color: #000080;">=</span>Hash<span style="color: #008000;">&#91;</span>H<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">find</span><span style="color: #008000;">&#40;</span>Hash<span style="color: #008000;">&#91;</span>H<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">root</span>,i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		Ans<span style="color: #000040;">+</span><span style="color: #000080;">=</span>a<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">else</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>LIM<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			I<span style="color: #008000;">&#91;</span>e<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>
			search<span style="color: #008000;">&#40;</span>e<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	L<span style="color: #000080;">=</span>LEFT<span style="color: #008080;">;</span>
	search<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	L<span style="color: #000080;">=</span>RIGHT<span style="color: #008080;">;</span>
	search<span style="color: #008000;">&#40;</span>Mid<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,Ans<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<blockquote>
<h2><span class="mw-headline">反正切函数的应用 </span></h2>
<p><a class="image" title="Image:Arctan.gif" href="http://192.168.1.253/wiki/Image:Arctan.gif"><img longdesc="/wiki/Image:Arctan.gif" src="http://192.168.1.253/mw/images/8/85/Arctan.gif" alt="Image:Arctan.gif" width="568" height="670" /></a></p>
<p>输入文件</p>
<p>输入文件中只有一个正整数a ，其中1&lt;=a&lt;=60000 。</p>
<p>输出文件</p>
<p>输出文件中只有一个整数，为b + c的值。<br />
输入样例</p>
<pre>1</pre>
<p>输出样例</p>
<pre>5</pre>
</blockquote>
<blockquote>
<h2><span class="mw-headline">聪明的打字员 </span></h2>
<p>阿兰是某机密部门的打字员，她现在接到一个任务：需要在一天之内输入几百个长度固定为6的密码。当然，她希望输入的过程中敲击键盘的总次数越少越好。</p>
<p>不幸的是，出于保密的需要，该部门用于输入密码的键盘是特殊设计的，键盘上没有数字键，而只有以下六个键：Swap0, Swap1, Up, Down, Left, Right，为了说明这6个键的作用，我们先定义录入区的6个位置的编号，从左至右依次为1，2，3，4，5，6。下面列出每个键的作用：</p>
<ul>
<li>Swap0：按Swap0，光标位置不变，将光标所在位置的数字与录入区的1号位置的数字（左起第一个数字）交换。如果光标已经处在录入区的1号位置，则按Swap0键之后，录入区的数字不变；</li>
<li>Swap1：按Swap1，光标位置不变，将光标所在位置的数字与录入区的6号位置的数字（左起第六个数字）交换。如果光标已经处在录入区的6号位置，则按Swap1键之后，录入区的数字不变；</li>
<li>Up：按Up，光标位置不变，将光标所在位置的数字加1（除非该数字是9）。例如，如果光标所在位置的数字为2，按Up之后，该处的数字变为3；如果该处数字为9，则按Up之后，数字不变，光标位置也不变；</li>
<li>Down：按Down，光标位置不变，将光标所在位置的数字减1（除非该数字是0），如果该处数字为0，则按Down之后，数字不变，光标位置也不变；</li>
<li>Left：按Left，光标左移一个位置，如果光标已经在录入区的1号位置（左起第一个位置）上，则光标不动；</li>
<li>Right：按Right，光标右移一个位置，如果光标已经在录入区的6号位置（左起第六个位置）上，则光标不动。</li>
</ul>
<p>当然，为了使这样的键盘发挥作用，每次录入密码之前，录入区总会随机出现一个长度为6的初始密码，而且光标固定出现在1号位置上。当巧妙地使用上述六个特殊键之后，可以得到目标密码，这时光标允许停在任何一个位置。 现在，阿兰需要你的帮助，编写一个程序，求出录入一个密码需要的最少的击键次数。</p>
<p>输入文件</p>
<p>文件仅一行，含有两个长度为6的数，前者为初始密码，后者为目标密码，两个密码之间用一个空格隔开。</p>
<p>输出文件</p>
<p>文件仅一行，含有一个正整数，为最少需要的击键次数。</p>
<p>输入样例</p>
<pre>123456 654321</pre>
<p>输出样例</p>
<pre>11</pre>
<p>样例说明：</p>
<p>初始密码是123456，光标停在数字1上。对应上述最少击键次数的击键序列为：</p>
<p><a class="image" title="Image:Clever.gif" href="http://192.168.1.253/wiki/Image:Clever.gif"><img longdesc="/wiki/Image:Clever.gif" src="http://192.168.1.253/mw/images/f/fc/Clever.gif" alt="Image:Clever.gif" width="308" height="501" /></a></p>
<p>最少的击键次数为11。</p></blockquote>
<blockquote>
<h2><span class="mw-headline">陨石的秘密</span></h2>
<p>公元11380年，一颗巨大的陨石坠落在南极。于是，灾难降临了，地球上出现了一系列反常的现象。当人们焦急万分的时候，一支中国科学家组成的南极考察队赶到了出事地点。经过一番侦察，科学家们发现陨石上刻有若干行密文，每一行都包含5个整数：</p>
<pre>1 1 1 1 6
0 0 6 3 57
8 0 11 3 2845</pre>
<p>著名的科学家SS发现，这些密文实际上是一种复杂运算的结果。为了便于大家理解这种运算，他定义了一种SS表达式：</p>
<ol>
<li>SS表达式是仅由‘{’，‘}’，‘[’，‘]’，‘（’，‘）’组成的字符串。</li>
<li>一个空串是SS表达式。</li>
<li>如果A是SS表达式，且A中不含字符‘{’，‘}’，‘[’，‘]’，则(A)是SS表达式。</li>
<li>如果A是SS表达式，且A中不含字符‘{’，‘}’，则[A]是SS表达式。</li>
<li>如果A是SS表达式，则{A}是SS表达式。</li>
<li>如果A和B都是SS表达式，则AB也是SS表达式。</li>
</ol>
<p>例如</p>
<ul>
<li>()(())[]</li>
<li>{()[()]}</li>
<li>{{[[(())]]}}</li>
</ul>
<p>都是SS表达式。</p>
<p>而</p>
<ul>
<li>()([])()</li>
<li>[()</li>
</ul>
<p>不是SS表达式。</p>
<p>一个SS表达式E的深度D(E)定义如下：</p>
<p>例如(){()}[]的深度为2。</p>
<p>密文中的复杂运算是这样进行的：</p>
<p>设密文中每行前4个数依次为L1，L2，L3，D，求出所有深度为D，含有L1对{}，L2对[]，L3对()的SS串的个数，并用这个数对当前的年份11380求余数，这个余数就是密文中每行的第5个数，我们称之为“神秘数”。</p>
<p>密文中某些行的第五个数已经模糊不清，而这些数字正是揭开陨石秘密的钥匙。现在科学家们聘请你来计算这个神秘数。</p>
<p>输入文件</p>
<p>共一行，4个整数L1，L2，L3，D。相邻两个数之间用一个空格分隔。（0≤L1≤10，0≤L2≤10，0≤L3≤10，0≤D≤30）</p>
<p>输出文件</p>
<p>共一行，包含一个整数，即神秘数。</p>
<p>输入样例</p>
<pre>1 1 1 2</pre>
<p>输出样例</p>
<pre>8</pre>
</blockquote>
<blockquote>
<h2><span class="mw-headline">食物链 </span></h2>
<p>动物王国中有三类动物A,B,C，这三类动物的食物链构成了有趣的环形。A吃B， B吃C，C吃A。</p>
<p>现有N个动物，以1－N编号。每个动物都是A,B,C中的一种，但是我们并不知道它到底是哪一种。</p>
<p>有人用两种说法对这N个动物所构成的食物链关系进行描述：</p>
<ul>
<li>第一种说法是“1 X Y”，表示X和Y是同类。</li>
<li>第二种说法是“2 X Y”，表示X吃Y。</li>
</ul>
<p>此人对N个动物，用上述两种说法，一句接一句地说出K句话，这K句话有的是真的，有的是假的。当一句话满足下列三条之一时，这句话就是假话，否则就是真话。</p>
<ol>
<li>当前的话与前面的某些真的话冲突，就是假话；</li>
<li>当前的话中X或Y比N大，就是假话；</li>
<li>当前的话表示X吃X，就是假话。</li>
</ol>
<p>你的任务是根据给定的N（1&lt;=N&lt;=50,000）和K句话（0&lt;=K&lt;=100,000），输出假话的总数。</p>
<p>输入文件</p>
<p>第一行是两个整数N和K，以一个空格分隔。</p>
<p>以下K行每行是三个正整数 D，X，Y，两数之间用一个空格隔开，其中D表示说法的种类。</p>
<ul>
<li>若D=1，则表示X和Y是同类。</li>
<li>若D=2，则表示X吃Y。</li>
</ul>
<p>输出文件</p>
<p>只有一个整数，表示假话的数目。</p>
<p>输入样例</p>
<p>输入文件</p>
<pre>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>输出样例</p>
<pre>3</pre>
<p>样例说明</p>
<p>对7句话的分析</p>
<ul>
<li>1 101 1   	假话</li>
<li>2 1 2     	真话</li>
<li>2 2 3     	真话</li>
<li>2 3 3     	假话</li>
<li>1 1 3     	假话</li>
<li>2 3 1     	真话</li>
<li>1 5 5     	真话</li>
</ul>
</blockquote>
<blockquote>
<h2><span class="mw-headline">炮兵阵地 </span></h2>
<p>司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成，地图的每一格可能是山地（用“H” 表示），也可能是平原（用“P”表示），如下图。在每一格平原地形上最多可以布置一支炮兵部队（山地上不能够部署炮兵部队）；一支炮兵部队在地图上的攻击 范围如图中黑色区域所示：</p>
<p>如果在地图中的灰色所标识的平原上部署一支炮兵部队，则图中的黑色的网格表示它能够攻击到的区域：沿横向左右各两格，沿纵向上下各两格。图上其它白色网格均攻击不到。从图上可见炮兵的攻击范围不受地形的影响。</p>
<p>现在，将军们规划如何部署炮兵部队，在防止误伤的前提下（保证任何两支炮兵部队之间不能互相攻击，即任何一支炮兵部队都不在其他支炮兵部队的攻击范围内），在整个地图区域内最多能够摆放多少我军的炮兵部队。</p>
<p><a class="image" title="Image:Cannon.gif" href="http://192.168.1.253/wiki/Image:Cannon.gif"><img longdesc="/wiki/Image:Cannon.gif" src="http://192.168.1.253/mw/images/0/08/Cannon.gif" alt="Image:Cannon.gif" width="257" height="184" /></a></p>
<p>输入文件</p>
<p>文件的第一行包含两个由空格分割开的正整数，分别表示N和M；</p>
<p>接下来的N行，每一行含有连续的M个字符（‘P’或者‘H’），中间没有空格。按顺序表示地图中每一行的数据。N≤100；M≤10。</p>
<p>输出文件</p>
<p>文件仅在第一行包含一个整数K，表示最多能摆放的炮兵部队的数量。</p>
<p>输入样例</p>
<pre>5 4
PHPP
PPHH
PPPP
PHPP
PHHP</pre>
<p>输出样例</p>
<pre>6</pre>
</blockquote>
<blockquote>
<h2><span class="mw-headline">方程的解数 </span></h2>
<p>问题描述</p>
<p>已知一个n元高次方程：</p>
<p><a class="image" title="Image:Equation1.gif" href="http://192.168.1.253/wiki/Image:Equation1.gif"><img longdesc="/wiki/Image:Equation1.gif" src="http://192.168.1.253/mw/images/f/fb/Equation1.gif" alt="Image:Equation1.gif" width="308" height="41" /></a></p>
<p>其中：x1, x2, …,xn是未知数，k1,k2,…,kn是系数，p1,p2,…pn是指数。且方程中的所有数均为整数。</p>
<p>假设未知数1≤ xi ≤M, i=1,,,n，求这个方程的整数解的个数。</p>
<p>输入文件</p>
<p>文件的第1行包含一个整数n。第2行包含一个整数M。第3行到第n+2行，每行包含两个整数，分别表示ki和pi。两个整数之间用一个空格隔开。第3行的数据对应i=1，第n+2行的数据对应i=n。<br />
输出文件</p>
<p>文件仅一行，包含一个整数，表示方程的整数解的个数。</p>
<p>输入样例</p>
<pre>3
150
1 2
-1 2
1 2</pre>
<p>输出样例</p>
<pre>178</pre>
<p>约束条件</p>
<p>1&lt;=n&lt;=6；1&lt;=M&lt;=150；</p>
<p><a class="image" title="Image:Equation2.gif" href="http://192.168.1.253/wiki/Image:Equation2.gif"><img longdesc="/wiki/Image:Equation2.gif" src="http://192.168.1.253/mw/images/4/4a/Equation2.gif" alt="Image:Equation2.gif" width="300" height="36" /></a></p>
<p>方程的整数解的个数小于2^31。</p>
<p>★本题中，指数Pi(i=1,2,……,n)均为正整数。</p></blockquote>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/noi-2000-solution/" title="NOI 2000 解题报告">NOI 2000 解题报告</a></li><li><a href="http://www.byvoid.com/blog/noi-2009-treapmod/" title="NOI 2009 二叉查找树">NOI 2009 二叉查找树</a></li><li><a href="http://www.byvoid.com/blog/noi-1999-solution/" title="NOI 1999 解题报告">NOI 1999 解题报告</a></li><li><a href="http://www.byvoid.com/blog/noi-1998-solution/" title="NOI 1998 解题报告">NOI 1998 解题报告</a></li><li><a href="http://www.byvoid.com/blog/noi-1997-solution/" title="NOI 1997 解题报告">NOI 1997 解题报告</a></li><li><a href="http://www.byvoid.com/blog/poi-2000-pro/" title="POI 2000 Promotion 促销活动">POI 2000 Promotion 促销活动</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/noi-2001-solution/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>POI 1997 阿里巴巴 Ali Baba</title>
		<link>http://www.byvoid.com/blog/poi-1997-ali/</link>
		<comments>http://www.byvoid.com/blog/poi-1997-ali/#comments</comments>
		<pubDate>Fri, 28 Nov 2008 14:17:12 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[POI]]></category>
		<category><![CDATA[1997]]></category>
		<category><![CDATA[哈希]]></category>
		<category><![CDATA[广搜]]></category>
		<category><![CDATA[队列]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=595</guid>
		<description><![CDATA[标准的广度优先搜索，哈希判重。由于无法估计状态数，需要用链队列存储搜索状态。把初始状态加入队列，然后取出队列中的首元素，对其状态进行扩展。判断不能有重复，否则是多余的。... ]]></description>
			<content:encoded><![CDATA[<p>标准的广度优先搜索，哈希判重。由于无法估计状态数，需要用链队列存储搜索状态。把初始状态加入队列，然后取出队列中的首元素，对其状态进行扩展。判断不能有重复，否则是多余的。如果当前扩展到的状态三种钱币的数目都大于等于目标状态，则找到了解，输出交易的次数。另外，为防止重复按照某些规则交易使钱币数目无意义地增长，人为规定每种钱币的数目不能超过目标状态的若干倍（比如10倍即可）。<br />
<span id="more-595"></span></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p595code14'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p59514"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
</pre></td><td class="code" id="p595code14"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: POI1997 ali
 * Author: Guo Jiabao
 * Time: 2008.11.28 20:42:00
 * State: Solved
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;cstdio&gt;</span>
<span style="color: #339900;">#include &lt;cstdlib&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> coins
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> a,b,c,step<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">class</span> tQueue
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
		<span style="color: #0000ff;">class</span> tList
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
				tList <span style="color: #000040;">*</span>next<span style="color: #008080;">;</span>
				coins v<span style="color: #008080;">;</span>
				tList<span style="color: #008000;">&#40;</span>coins tv<span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span> v<span style="color: #008000;">&#40;</span>tv<span style="color: #008000;">&#41;</span>
				<span style="color: #008000;">&#123;</span>
					next<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
				<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
		tList <span style="color: #000040;">*</span>first,<span style="color: #000040;">*</span>last<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">int</span> Size<span style="color: #008080;">;</span>
		tQueue<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			Size<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
			first<span style="color: #000080;">=</span>last<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">void</span> ins<span style="color: #008000;">&#40;</span>coins v<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>first<span style="color: #008000;">&#41;</span>
				last<span style="color: #000080;">=</span>last<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000080;">=</span><span style="color: #0000dd;">new</span> tList<span style="color: #008000;">&#40;</span>v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">else</span>
				first<span style="color: #000080;">=</span>last<span style="color: #000080;">=</span><span style="color: #0000dd;">new</span> tList<span style="color: #008000;">&#40;</span>v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			Size<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		coins pop<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			Size<span style="color: #000040;">--</span><span style="color: #008080;">;</span>
			tList <span style="color: #000040;">*</span>t<span style="color: #000080;">=</span>first<span style="color: #008080;">;</span>
			coins r<span style="color: #000080;">=</span>t<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008080;">;</span>
			first<span style="color: #000080;">=</span>first<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008080;">;</span>
			<span style="color: #0000dd;">delete</span> t<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">return</span> r<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">void</span> reset<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			tList <span style="color: #000040;">*</span>t<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>first<span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				t<span style="color: #000080;">=</span>first<span style="color: #008080;">;</span>
				first<span style="color: #000080;">=</span>first<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008080;">;</span>
				<span style="color: #0000dd;">delete</span> t<span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			first<span style="color: #000080;">=</span>last<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> pri
<span style="color: #008000;">&#123;</span>
	coins A,B<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> LIM<span style="color: #000080;">=</span><span style="color: #0000dd;">100</span><span style="color: #008080;">;</span>
&nbsp;
tQueue Q<span style="color: #008080;">;</span>
coins S,T<span style="color: #008080;">;</span>
pri P<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">11</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> N,M<span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> Hash<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">100</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">100</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">100</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">void</span> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;ali.in&quot;</span>,<span style="color: #FF0000;">&quot;r&quot;</span>,<span style="color: #0000ff;">stdin</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;ali.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,<span style="color: #000040;">&amp;</span>M<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> readfile<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d%d%d%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>S.<span style="color: #007788;">a</span>,<span style="color: #000040;">&amp;</span>S.<span style="color: #007788;">b</span>,<span style="color: #000040;">&amp;</span>S.<span style="color: #007788;">c</span>,<span style="color: #000040;">&amp;</span>T.<span style="color: #007788;">a</span>,<span style="color: #000040;">&amp;</span>T.<span style="color: #007788;">b</span>,<span style="color: #000040;">&amp;</span>T.<span style="color: #007788;">c</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	S.<span style="color: #007788;">step</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,<span style="color: #000040;">&amp;</span>N<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d%d%d%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">A</span>.<span style="color: #007788;">a</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">A</span>.<span style="color: #007788;">b</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">A</span>.<span style="color: #007788;">c</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">B</span>.<span style="color: #007788;">a</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">B</span>.<span style="color: #007788;">b</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">B</span>.<span style="color: #007788;">c</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> k<span style="color: #008080;">;</span>
	coins i,j<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>S.<span style="color: #007788;">a</span><span style="color: #000080;">==</span>T.<span style="color: #007788;">a</span> <span style="color: #000040;">&amp;&amp;</span> S.<span style="color: #007788;">b</span><span style="color: #000080;">==</span>T.<span style="color: #007788;">b</span> <span style="color: #000040;">&amp;&amp;</span> S.<span style="color: #007788;">c</span><span style="color: #000080;">==</span>T.<span style="color: #007788;">c</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	Q.<span style="color: #007788;">reset</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">memset</span><span style="color: #008000;">&#40;</span>Hash,<span style="color: #0000dd;">0</span>,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>Hash<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Q.<span style="color: #007788;">ins</span><span style="color: #008000;">&#40;</span>S<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Hash<span style="color: #008000;">&#91;</span>S.<span style="color: #007788;">a</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>S.<span style="color: #007788;">b</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>S.<span style="color: #007788;">c</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>Q.<span style="color: #007788;">Size</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		i<span style="color: #000080;">=</span>Q.<span style="color: #007788;">pop</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		j.<span style="color: #007788;">step</span><span style="color: #000080;">=</span>i.<span style="color: #007788;">step</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>k<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>k<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i.<span style="color: #007788;">a</span> <span style="color: #000080;">&gt;=</span> P<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">A</span>.<span style="color: #007788;">a</span> <span style="color: #000040;">&amp;&amp;</span> i.<span style="color: #007788;">b</span> <span style="color: #000080;">&gt;=</span> P<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">A</span>.<span style="color: #007788;">b</span> <span style="color: #000040;">&amp;&amp;</span> i.<span style="color: #007788;">c</span> <span style="color: #000080;">&gt;=</span> P<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">A</span>.<span style="color: #007788;">c</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				j.<span style="color: #007788;">a</span><span style="color: #000080;">=</span>i.<span style="color: #007788;">a</span><span style="color: #000040;">-</span>P<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">A</span>.<span style="color: #007788;">a</span><span style="color: #000040;">+</span>P<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">B</span>.<span style="color: #007788;">a</span><span style="color: #008080;">;</span>
				j.<span style="color: #007788;">b</span><span style="color: #000080;">=</span>i.<span style="color: #007788;">b</span><span style="color: #000040;">-</span>P<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">A</span>.<span style="color: #007788;">b</span><span style="color: #000040;">+</span>P<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">B</span>.<span style="color: #007788;">b</span><span style="color: #008080;">;</span>
				j.<span style="color: #007788;">c</span><span style="color: #000080;">=</span>i.<span style="color: #007788;">c</span><span style="color: #000040;">-</span>P<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">A</span>.<span style="color: #007788;">c</span><span style="color: #000040;">+</span>P<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">B</span>.<span style="color: #007788;">c</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>j.<span style="color: #007788;">a</span><span style="color: #000080;">&gt;=</span>T.<span style="color: #007788;">a</span> <span style="color: #000040;">&amp;&amp;</span> j.<span style="color: #007788;">b</span><span style="color: #000080;">&gt;=</span>T.<span style="color: #007788;">b</span> <span style="color: #000040;">&amp;&amp;</span> j.<span style="color: #007788;">c</span><span style="color: #000080;">&gt;=</span>T.<span style="color: #007788;">c</span><span style="color: #008000;">&#41;</span>
					<span style="color: #0000ff;">return</span> j.<span style="color: #007788;">step</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>j.<span style="color: #007788;">a</span><span style="color: #000080;">&gt;=</span>LIM <span style="color: #000040;">||</span> j.<span style="color: #007788;">b</span><span style="color: #000080;">&gt;=</span>LIM <span style="color: #000040;">||</span> j.<span style="color: #007788;">c</span><span style="color: #000080;">&gt;=</span>LIM<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">continue</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>Hash<span style="color: #008000;">&#91;</span>j.<span style="color: #007788;">a</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j.<span style="color: #007788;">b</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j.<span style="color: #007788;">c</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
				<span style="color: #008000;">&#123;</span>
					<span style="color: #666666;">//printf(&quot;[%d,%d,%d] =&gt; [%d,%d,%d]n&quot;,i.a,i.b,i.c,j.a,j.b,j.c);</span>
					Hash<span style="color: #008000;">&#91;</span>j.<span style="color: #007788;">a</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j.<span style="color: #007788;">b</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j.<span style="color: #007788;">c</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
					Q.<span style="color: #007788;">ins</span><span style="color: #008000;">&#40;</span>j<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				<span style="color: #008000;">&#125;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,Ans<span style="color: #008080;">;</span>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>M<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		readfile<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		Ans<span style="color: #000080;">=</span>solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Ans<span style="color: #000080;">==</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;NIEn&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span>
			<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%dn&quot;</span>,Ans<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<blockquote><p>
 阿里巴巴</p>
<p>想要“芝麻开门”，必须拥有一定数量的钱币，其中包括至少z枚金币，s枚银币和m枚铜币。 最初，阿里巴巴拥有三种钱币若干枚。他可以按照一定规则和芝麻之门的守护者进行交易。 每一种规则用以下形式表示：</p>
<p>z1, s1, m1 -> z2, s2, m2 (zi, si, mis属于集合{0,1,2,3,4})。</p>
<p>这样一种规则表示阿里巴巴可以将z1枚金币, s1枚银币, m1枚铜币换成z2枚金币, s2枚银币, m2枚铜币。一次交易而得的钱币可以继续参加下一次的交易。</p>
<p>任务</p>
<p>从文件中读入几组数据；对于每一组数据：</p>
<p>    * 阿里巴巴最初拥有的金银铜三种钱币数目<br />
    * “芝麻开门”所需的金银铜三种钱币数目<br />
    * 所有交易规则 </p>
<p>对每一组数据，判断是否存在有限次的交易，使阿里巴巴能开启芝麻之门。如果是，则将最少交易次数输出，否则在输出NIE(波兰文NO)</p>
<p>把结果写进文件中</p>
<p>输入格式文件的第一行有一个整数d<=10,表示数据的组数。</p>
<p>接下来是d组数据，每组占若干行。</p>
<p>第一行是三个数zp, sp, mp ，属于集合{0,1,2,3,4}。表示阿里巴巴最初拥有的金银铜数目。</p>
<p>第二行是三个数z, s, m ， 属于集合{0,1,2,3,4}。表示芝麻开门所需的金银铜数目。</p>
<p>第三行是规则总数r，1<=r<=10。</p>
<p>以下r行每行有六个数z1, s1, m1, z2, s2, m2 ，属于集合{0,1,2,3,4}。表示一种简单的交易z1, s1, m1 -> z2, s2, m2。</p>
<p>数字之间由若干个空格隔开。</p>
<p>输出格式</p>
<p>文件的第i行为第i组数据的答案：</p>
<p>一个非负整数——阿里巴巴要开启芝麻之门所需的最少交易次数，或者</p>
<p>单词NIE(波兰文NO)</p>
<p>样例输入</p>
<p>2<br />
2 2 2<br />
3 3 3<br />
3<br />
0 1 1 2 0 0<br />
1 0 1 0 2 0<br />
1 1 0 0 0 2<br />
1 1 1<br />
2 2 2<br />
4<br />
1 0 0 0 1 0<br />
0 1 0 0 0 1<br />
0 0 1 1 0 0<br />
2 0 0 0 2 2</p>
<p>样例输出</p>
<p>NIE<br />
9
</p></blockquote>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/poi-1999-bit/" title="POI 1999 位图 Bitmap">POI 1999 位图 Bitmap</a></li><li><a href="http://www.byvoid.com/blog/poi-1997-lic/" title="POI 1997 n-k集合数">POI 1997 n-k集合数</a></li><li><a href="http://www.byvoid.com/blog/poi-1997-tro/" title="POI 1997 单色三角形 Monochromatic triangles">POI 1997 单色三角形 Monochromatic triangles</a></li><li><a href="http://www.byvoid.com/blog/poi-1997-rez/" title="POI 1997 阶梯教室设备利用 Lecture halls reservation">POI 1997 阶梯教室设备利用 Lecture halls reservation</a></li><li><a href="http://www.byvoid.com/blog/poi-1997-kaj/" title="POI 1997 独木舟 Canoes">POI 1997 独木舟 Canoes</a></li><li><a href="http://www.byvoid.com/blog/poi-1997-gen/" title="POI 1997 基因串 Genotypes">POI 1997 基因串 Genotypes</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/poi-1997-ali/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ural 1002 1005 1018 1021 1023 1029</title>
		<link>http://www.byvoid.com/blog/ural-1002-1029/</link>
		<comments>http://www.byvoid.com/blog/ural-1002-1029/#comments</comments>
		<pubDate>Sun, 26 Oct 2008 10:13:16 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[Ural]]></category>
		<category><![CDATA[1002]]></category>
		<category><![CDATA[1005]]></category>
		<category><![CDATA[1018]]></category>
		<category><![CDATA[1021]]></category>
		<category><![CDATA[1023]]></category>
		<category><![CDATA[1029]]></category>
		<category><![CDATA[二分查找]]></category>
		<category><![CDATA[动态规划]]></category>
		<category><![CDATA[博弈论]]></category>
		<category><![CDATA[哈希]]></category>
		<category><![CDATA[最短路径]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=417</guid>
		<description><![CDATA[==1002== 首先把单词按照规则替换为数字序列，构图，把电话号码的每一位作为一个顶点。增加一个0号顶点。 如果一个单词的数字序列能够匹配电话号码的A到B位，那么我们就在第A-1个顶点和第B... ]]></description>
			<content:encoded><![CDATA[<p>==1002==<br />
首先把单词按照规则替换为数字序列，构图，把电话号码的每一位作为一个顶点。增加一个0号顶点。</p>
<p>如果一个单词的数字序列能够匹配电话号码的A到B位，那么我们就在第A-1个顶点和第B+1个顶点上连接一条边，记录形成该边的单词。</p>
<p>求从0号顶点到N号顶点的最短路径，由于是无权图，直接宽搜即可。找到一条从0到N的最短路径，按照最短路径上的边对应的单词输出。</p>
<p>==1005==<br />
动态规划，<br />
F[i,j]为前i个石头分为两堆，重量差值为j的状态是否存在</p>
<p>F[i,j]= or<br />
*{<br />
**F[i-1,j-W[i]] (j-W[i]>=0) 两堆差值扩大<br />
**F[i-1,W[i]+j] (W[i]+j<=MAX) 两堆差值减少但不超越<br />
**F[i-1,W[i]-j] (W[i]-j>=0) 较少一堆超越较多一堆<br />
*}</p>
<p>目标结果就是<br />
Ans=i (F[N,i]=true 且 i最小)</p>
<p>==1018==<br />
明显的树形动态规划。首先是建立二叉树，由于上下不确定，我是先以邻接矩阵的方式读取了二叉树，然后以O(N^2)从1号节点开始遍历建立了二叉树。</p>
<p>状态设定<br />
F[i,j]为 在以节点i为根的子树中，保留数量为j的树枝时，留下的最大的苹果数量。<br />
i.left表示i的左子树，i.right表示i的右子树，<br />
i.lv表示i连接左子树的边的权值，i.rv表示i连接右子树的边的权值</p>
<p>状态转移方程<br />
F[i,j]=Max<br />
{<br />
	F[i.left,j-1] + i.lv<br />
	F[i.right,j-1] + i.rv<br />
	F[i.left,k] + F[i.right.j-k-2] + i.lv + i.rv (k=0..j-2)<br />
}</p>
<p>边界条件<br />
F[i,0]=0;</p>
<p>目标解<br />
Ans=F[N,Q]</p>
<p>==1021==</p>
<p>哈希或二分查找。由于数据范围不大，仅仅在2字节整型范围内，我用的是哈希。</p>
<p>由于C++开下标为负的数组还要指针运算，不太方便，我把读入的每一个数都加上了40000。</p>
<p>读入第一组数的时候，每个数a增加40000，设定Hash[a]=true。<br />
读入第二组数，对于每个数a增加40000，如果Hash[90000-a]，则有可以配对的，输出YES。<br />
如果找不到配对的，输出NO。</p>
<p>==1023==<br />
博弈论，数学问题。</p>
<p>首先，假如我们一共有L+1个Button，那么先取者无论怎么取都会输。相似的，假如我们有q*(L+1)个扣子(q是正整数)，则先取者是必败的，也就是后取着是必胜的。</p>
<p>所以对这道题给定的K个Button，我们只需枚举最小的L(2<=L<=K)，使得K能整除(L+1)，后取着一定是必胜的。不存在没有必胜策略！</p>
<p>==1029==<br />
动态规划或者最短路径。</p>
<p>看到这道题我马上就想到了最短路径，但是为了练习动态规划，我还是写了动态规划。</p>
<p>最短路径的方法：</p>
<p>首先把每个房间看成一个顶点，另外建立两个顶点，分表表示起始点和目标点。按照题中所给的三个规则，在顶点之间建立有向边，有向边(a,b)边权为b房间的费用。连接起始点和第一层楼所有顶点，以及顶层楼所有顶点和目标点。求从起始点到目标点的一条最短路径，最后输出路径上的每个点的位置。可能超时，注意优化。推荐使用SPFA算法。</p>
<p>动态规划的方法：</p>
<p>状态设定<br />
F[i,j]表示到达第i层第j个官员的最小费用。</p>
<p>状态转移方程<br />
F[i,j]=Min<br />
{<br />
	F[i-1,j]<br />
	F[i,j-1]<br />
	F[i,j+1]<br />
} + Cost[i,j]</p>
<p>边界条件<br />
F[1,i]=Cost[1,i]</p>
<p>目标结果<br />
Min{F[N,i]} 从第一层到(N,i)点的路径就是结果。</p>
<p>在状态转移的过程中，对于每层要正向和逆向各扫描一边，分别处理F[i,j-1]和F[i,j+1]，避免后效性。</p>
<p>注意，题上给的数据范围是不对的，我按M最大为100提交时，一直在第6组数据出错，改成和N一样最大为500就过了。</p>
<p>以下是程序<br />
<span id="more-417"></span><br />
1002<br />
<code lang="cpp" linenum="on" download="1002.cpp"><br />
#include <iostream><br />
#define MAXW 50002<br />
#define MAX 201<br />
#define MAXL MAX</p>
<p>using namespace std;</p>
<p>class tQueue<br />
{<br />
public:<br />
	class linklist<br />
	{<br />
	public:<br />
		linklist* next;<br />
		int value;<br />
		linklist()<br />
		{<br />
			next=0;<br />
			value=0;<br />
		}<br />
	};<br />
	linklist *first,*last;<br />
	int size;<br />
	void ins(int p)<br />
	{<br />
		if (size==0)<br />
			first=last=new linklist;<br />
		else<br />
			last=last->next=new linklist;<br />
		last->value=p;<br />
		size++;<br />
	}<br />
	int pop()<br />
	{<br />
		int rtn=first->value;<br />
		linklist *tfirst=first;<br />
		first=first->next;<br />
		delete tfirst;<br />
		size--;<br />
		return rtn;<br />
	}<br />
	void reset()<br />
	{<br />
		size=0;<br />
		first=last=0;<br />
	}<br />
	tQueue()<br />
	{<br />
		reset();<br />
	}<br />
};</p>
<p>int N,M;<br />
int P[MAX];<br />
int Word[MAX][MAX];<br />
int adjl[MAX][MAX];<br />
int sp[MAX],F[MAX];<br />
char S[MAXL],T[MAXL];<br />
char W[MAXW][MAXL];<br />
tQueue Q;</p>
<p>inline char conv(char a)<br />
{<br />
	switch(a)<br />
	{<br />
		case 'i':case 'j':return '1';<br />
		case 'a':case 'b':case 'c':return '2';<br />
		case 'd':case 'e':case 'f':return '3';<br />
		case 'g':case 'h':return '4';<br />
		case 'k':case 'l':return '5';<br />
		case 'm':case 'n':return '6';<br />
		case 'p':case 'r':case 's':return '7';<br />
		case 't':case 'u':case 'v':return '8';<br />
		case 'w':case 'x':case 'y':return '9';<br />
	}<br />
	return '0';<br />
}</p>
<p>void BFS()<br />
{<br />
	int i,j,k;<br />
	Q.reset();<br />
	Q.ins(0);<br />
	while (Q.size)<br />
	{<br />
		i=Q.pop();<br />
		for (k=1;k<=adjl[i][0];k++)<br />
		{<br />
			j=adjl[i][k];<br />
			if (!sp[j])<br />
			{<br />
				sp[j]=sp[i]+1;<br />
				F[j]=i;<br />
				if (j==N)<br />
				{<br />
					int L=sp[N];<br />
					k=0;<br />
					while (F[j])<br />
					{<br />
						i=F[j];<br />
						sp[++k]=Word[i][j];<br />
						j=i;<br />
					}<br />
					i=0;<br />
					sp[++k]=Word[i][j];<br />
					for (;k>1;k--)<br />
						printf("%s ",W[sp[k]]);<br />
					printf("%sn",W[sp[k]]);<br />
					return;<br />
				}<br />
				Q.ins(j);<br />
			}<br />
		}<br />
	}<br />
	printf("No solution.n");<br />
}</p>
<p>void init()<br />
{<br />
	int i,a,b,L;<br />
	char *c;<br />
	freopen("1002.in","r",stdin);<br />
	freopen("1002.out","w",stdout);<br />
	while (1)<br />
	{<br />
		cin >> S;<br />
		if (S[0]=='-')<br />
			return;<br />
		N=strlen(S);<br />
		for (i=0;i<=N;i++)<br />
			adjl[i][0]=sp[i]=0;<br />
		cin >> M;<br />
		for (i=1;i<=M;i++)<br />
		{<br />
			scanf("%s",W[i]);<br />
			for (L=0;W[i][L];L++)<br />
				T[L]=conv(W[i][L]);<br />
			T[L]=0;<br />
			c=S-1;<br />
			do<br />
			{<br />
				c=strstr(c+1,T);<br />
				if (c)<br />
				{<br />
					a=c-S;<br />
					b=a+L;<br />
					adjl[a][ ++adjl[a][0] ]=b;<br />
					Word[a][b]=i;<br />
				}<br />
			}<br />
			while (c);<br />
		}<br />
		BFS();<br />
	}<br />
}</p>
<p>int main()<br />
{<br />
	init();<br />
	return 0;<br />
}<br />
</code></p>
<p>1005<br />
<code lang="cpp" linenum="on" download="1005.cpp"><br />
#include <iostream><br />
#define MAX 21<br />
#define ML 200000<br />
using namespace std;</p>
<p>bool F[MAX][ML];<br />
int N,Max=0,Ans;<br />
int W[MAX];</p>
<p>void init()<br />
{<br />
	int i;<br />
	freopen("1005.in","r",stdin);<br />
	freopen("1005.out","w",stdout);<br />
	cin >> N;<br />
	for (i=1;i<=N;i++)<br />
	{<br />
		cin >> W[i];<br />
		Max+=W[i];<br />
	}<br />
	Max=ML-1;<br />
}</p>
<p>void dynamic()<br />
{<br />
	int i,j;<br />
	F[0][0]=true;<br />
	for (i=1;i<=N;i++)<br />
	{<br />
		for (j=0;j<=Max;j++)<br />
		{<br />
			F[i][j]=false;<br />
			if (j-W[i]>=0)<br />
				F[i][j] |= F[i-1][j-W[i]];<br />
			if (W[i]+j<=Max)<br />
				F[i][j] |= F[i-1][W[i]+j];<br />
			if (W[i]-j>=0)<br />
				F[i][j] |= F[i-1][W[i]-j];<br />
		}<br />
	}<br />
	for (i=0;i<=Max;i++)<br />
		if (F[N][i])<br />
		{<br />
			Ans=i;<br />
			break;<br />
		}<br />
}</p>
<p>int main()<br />
{<br />
	init();<br />
	dynamic();<br />
	cout << Ans << endl;<br />
	return 0;<br />
}<br />
</code></p>
<p>1018<br />
<code lang="cpp" linenum="on" download="1018.cpp"><br />
#include <iostream><br />
#define MAX 101</p>
<p>using namespace std;</p>
<p>class node<br />
{<br />
public:<br />
	node *left,*right;<br />
	int lv,rv,id;<br />
	node(int t)<br />
	{<br />
		left=right=0;<br />
		id=t;<br />
		lv=rv=0;<br />
	}<br />
};</p>
<p>node *P[MAX];<br />
int N,M,Ans;<br />
int F[MAX][MAX];<br />
int dis[MAX][MAX];</p>
<p>void Make(int a)<br />
{<br />
	int i;<br />
	for (i=1;i<=N;i++)<br />
	{<br />
		if (dis[a][i]!=-1 &#038;&#038; !P[i])<br />
		{<br />
			P[i]=new node(i);<br />
			if (!P[a]->left)<br />
			{<br />
				P[a]->left=P[i];<br />
				P[a]->lv=dis[a][i];<br />
			}<br />
			else<br />
			{<br />
				P[a]->right=P[i];<br />
				P[a]->rv=dis[a][i];<br />
			}<br />
			Make(i);<br />
		}<br />
	}<br />
}</p>
<p>void init()<br />
{<br />
	int i,j,a,b,v;<br />
	freopen("1018.in","r",stdin);<br />
	freopen("1018.out","w",stdout);<br />
	cin >> N >> M;<br />
	for (i=1;i<=N;i++)<br />
	{<br />
		for (j=1;j<=N;j++)<br />
		{<br />
			dis[i][j]=-1;<br />
			F[i][j]=-1;<br />
		}<br />
		P[i]=0;<br />
	}<br />
	for (i=1;i<=N;i++)<br />
	{<br />
		cin >> a >> b >> v;<br />
		dis[a][b]=dis[b][a]=v;<br />
	}<br />
	P[1]=new node(1);<br />
	Make(1);<br />
}</p>
<p>int dp(int i,int j)<br />
{<br />
	if (j==0)<br />
		return 0;</p>
<p>	int t,max=0,k,l,a;</p>
<p>	if (P[i]->right)<br />
	{<br />
		a=P[i]->right->id;<br />
		if (F[a][j-1]==-1)<br />
			F[a][j-1]=dp(a,j-1);<br />
		t=F[a][j-1]+P[i]->rv;<br />
		if (t>max)<br />
			max=t;<br />
	}</p>
<p>	if (P[i]->left)<br />
	{<br />
		a=P[i]->left->id;<br />
		if (F[a][j-1]==-1)<br />
			F[a][j-1]=dp(a,j-1);<br />
		t=F[a][j-1]+P[i]->lv;<br />
		if (t>max)<br />
			max=t;<br />
	}</p>
<p>	for (k=0;k<=j-2;k++)<br />
	{<br />
		t=0;<br />
		l=j-k-2;<br />
		if (P[i]->left)<br />
		{<br />
			a=P[i]->left->id;<br />
			if (F[a][k]==-1)<br />
				F[a][k]=dp(a,k);<br />
			t+=F[a][k];<br />
		}<br />
		if (P[i]->right)<br />
		{<br />
			a=P[i]->right->id;<br />
			if (F[a][l]==-1)<br />
				F[a][l]=dp(a,l);<br />
			t+=F[a][l];<br />
		}<br />
		t+=P[i]->lv + P[i]->rv;<br />
		if (t>max) max=t;<br />
	}<br />
	return max;<br />
}</p>
<p>int main()<br />
{<br />
	init();<br />
	Ans=dp(1,M);<br />
	cout << Ans << endl;<br />
	return 0;<br />
}<br />
</code></p>
<p>1021<br />
<code lang="cpp" linenum="on" download="1021.cpp"><br />
#include <iostream><br />
#define MAX 90000</p>
<p>using namespace std;</p>
<p>bool Hash[MAX],Ans;<br />
int N;</p>
<p>void init()<br />
{<br />
	int i,a;<br />
	freopen("1021.in","r",stdin);<br />
	freopen("1021.out","w",stdout);<br />
	cin >> N;<br />
	for (i=1;i<=N;i++)<br />
	{<br />
		scanf("%d",&#038;a);<br />
		a+=40000;<br />
		Hash[a]=true;<br />
	}<br />
	cin >> N;<br />
	for (i=1;i<=N;i++)<br />
	{<br />
		scanf("%d",&#038;a);<br />
		a+=40000;<br />
		if (Hash[90000-a])<br />
		{<br />
			Ans=true;<br />
			return;<br />
		}<br />
	}<br />
}</p>
<p>int main()<br />
{<br />
	init();<br />
	if (Ans)<br />
		printf("YESn");<br />
	else<br />
		printf("NOn");<br />
	return 0;<br />
}<br />
</code></p>
<p>1023<br />
<code lang="cpp" linenum="on" download="1023.cpp"><br />
#include <iostream><br />
using namespace std;</p>
<p>int K,L;</p>
<p>int main()<br />
{<br />
	freopen("1023.in","r",stdin);<br />
	freopen("1023.out","w",stdout);<br />
	cin >> K;<br />
	for (L=2;L<=K;L++)<br />
	{<br />
		if (K%(L+1)==0)<br />
		{<br />
			cout << L << endl;<br />
			return 0;<br />
		}<br />
	}<br />
	return 0;<br />
}<br />
</code></p>
<p>1029<br />
<code lang="cpp" linenum="on" download="1029.cpp"><br />
#include <iostream><br />
#define MAXN 501<br />
#define MAXM 501<br />
#define INF 10000000000<br />
using namespace std;</p>
<p>typedef struct<br />
{<br />
	int x,y;<br />
}point;</p>
<p>typedef long long Number;</p>
<p>Number F[MAXN][MAXM];<br />
int C[MAXN][MAXM];<br />
Number Ans[MAXM*MAXN],Ac;<br />
point From[MAXN][MAXM];<br />
int M,N;</p>
<p>void init()<br />
{<br />
	int i,j;<br />
	freopen("1029.in","r",stdin);<br />
	freopen("1029.out","w",stdout);<br />
	scanf("%d%d",&#038;M,&#038;N);<br />
	for (i=1;i<=M;i++)<br />
	{<br />
		for (j=1;j<=N;j++)<br />
		{<br />
			scanf("%d",&#038;C[i][j]);<br />
		}<br />
	}<br />
}</p>
<p>void dynamic()<br />
{<br />
	int i,j,min;<br />
	point P;<br />
	for (i=1;i<=N;i++)<br />
		F[1][i]=C[1][i];<br />
	for (i=2;i<=M;i++)<br />
	{<br />
		for (j=1;j<=N;j++)<br />
		{<br />
			F[i][j]=INF;<br />
			if (F[i-1][j]+C[i][j]<F[i][j])<br />
			{<br />
				F[i][j]=F[i-1][j]+C[i][j];<br />
				From[i][j].x=i-1;<br />
				From[i][j].y=j;<br />
			}<br />
			if (j>1 &#038;&#038; F[i][j-1]+C[i][j]<F[i][j])<br />
			{<br />
				F[i][j]=F[i][j-1]+C[i][j];<br />
				From[i][j].x=i;<br />
				From[i][j].y=j-1;<br />
			}<br />
		}<br />
		for (j=N-1;j>=1;j--)<br />
		{<br />
			if (F[i][j+1]+C[i][j]<F[i][j])<br />
			{<br />
				F[i][j]=F[i][j+1]+C[i][j];<br />
				From[i][j].x=i;<br />
				From[i][j].y=j+1;<br />
			}<br />
		}<br />
	}<br />
	min=INF;<br />
	for (i=1;i<=N;i++)<br />
	{<br />
		if (F[M][i]<min)<br />
		{<br />
			min=F[M][i];<br />
			P.x=M;<br />
			P.y=i;<br />
		}<br />
	}<br />
	while (P.x)<br />
	{<br />
		Ans[++Ac]=P.y;<br />
		P=From[P.x][P.y];<br />
	}<br />
}</p>
<p>int main()<br />
{<br />
	init();<br />
	dynamic();<br />
	for (;Ac>1;Ac--)<br />
		printf("%d ",Ans[Ac]);<br />
	printf("%dn",Ans[1]);<br />
	return 0;<br />
}<br />
</code></p>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/noi-2001-solution/" title="NOI 2001 解题报告">NOI 2001 解题报告</a></li><li><a href="http://www.byvoid.com/blog/noi-1999-solution/" title="NOI 1999 解题报告">NOI 1999 解题报告</a></li><li><a href="http://www.byvoid.com/blog/noi-1998-solution/" title="NOI 1998 解题报告">NOI 1998 解题报告</a></li><li><a href="http://www.byvoid.com/blog/noi-1997-solution/" title="NOI 1997 解题报告">NOI 1997 解题报告</a></li><li><a href="http://www.byvoid.com/blog/ural-1183/" title="Ural 1183 Brackets sequence">Ural 1183 Brackets sequence</a></li><li><a href="http://www.byvoid.com/blog/ural-1167/" title="Ural 1167 Bicoloured Horses">Ural 1167 Bicoloured Horses</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/ural-1002-1029/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>USACO MAR07 Silver Balanced Lineup 平衡的阵容</title>
		<link>http://www.byvoid.com/blog/usaco-mar07-silver-balanced-lineup/</link>
		<comments>http://www.byvoid.com/blog/usaco-mar07-silver-balanced-lineup/#comments</comments>
		<pubDate>Thu, 09 Oct 2008 14:16:40 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[USACO]]></category>
		<category><![CDATA[区间]]></category>
		<category><![CDATA[哈希]]></category>
		<category><![CDATA[翻译]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=332</guid>
		<description><![CDATA[(Some by Zqzas) 读入时，直接将种类0换成-1，这样我们就可以把问题转化为求和为0最大的区间。然后根据坐标顺序排序。 O(N^3)的算法: 最基本的算法,枚举起始和结束的位置,然后再用O(N)的时间计算... ]]></description>
			<content:encoded><![CDATA[<p><span id="more-332"></span><br />
(Some by Zqzas)</p>
<p>读入时，直接将种类0换成-1，这样我们就可以把问题转化为求和为0最大的区间。然后根据坐标顺序排序。</p>
<p>O(N^3)的算法: 最基本的算法,枚举起始和结束的位置,然后再用O(N)的时间计算出区间内数字和.显然超时.</p>
<p>O(N^2)的算法: 在上一个算法的基础上进行改进,用sum[i]表示前i个数的数字和,那么从第a+1个数到第b个数的数字和就是sum[b]-sum[a]. sum可以在初始化时算出,这样就可以用O(1)时间算出区间内的数字和.但还是超时.</p>
<p>O(N*LogN)的算法: 在N^2算法的基础上改进,不能暴力地枚举区间.</p>
<p>由于sum[i]的范围是从-50000到50000,那么就可以试图借助hash来提高效率.</p>
<p>观察sum[b]-sum[a]这个式子,可以发现当sum[b]-sum[a]=0时,[a+1,b]区间是平衡的,即sum[b]=sum[a],那么我们就可以枚举b的位置,为了得到更大的区间,要使sum[b]=sum[a]中的a尽量小。</p>
<p>可以用hash[sum[i]]表示最少前几个数字的和可以达到sum[i].另一种表述方式:记sum[j]=sum[i],且使j尽量小(j<=i),那么hash[sum[i]]=j.hash也可以在线性时间内算出。</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p332code16'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p33216"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
</pre></td><td class="code" id="p332code16"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#define MAX 50002</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">typedef</span> <span style="color: #0000ff;">struct</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> S,V<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>Point<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> N,Ans<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> Sum<span style="color: #008000;">&#91;</span>MAX<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
Point P<span style="color: #008000;">&#91;</span>MAX<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> <span style="color: #000040;">*</span>Hash<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> cmp<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span> <span style="color: #000040;">*</span>a ,<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span> <span style="color: #000040;">*</span>b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>Point <span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>a<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>S <span style="color: #000040;">-</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>Point <span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>b<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>S<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j,L<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;balance.in&quot;</span>,<span style="color: #FF0000;">&quot;r&quot;</span>,<span style="color: #0000ff;">stdin</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;balance.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span>,<span style="color: #0000ff;">stdout</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d&quot;</span>,<span style="color: #000040;">&amp;</span>N<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Hash<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> <span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span><span style="color: #0000dd;">malloc</span><span style="color: #008000;">&#40;</span>MAX<span style="color: #000040;">*</span><span style="color: #0000dd;">2</span><span style="color: #000040;">*</span><span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Hash<span style="color: #000040;">+</span><span style="color: #000080;">=</span>MAX<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">50000</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span><span style="color: #0000dd;">50000</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		Hash<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #208080;">0x7FFFFFFF</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d%d&quot;</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">V</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">S</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">V</span><span style="color: #008000;">&#41;</span>
			P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">V</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000dd;">qsort</span><span style="color: #008000;">&#40;</span>P<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,N,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>P<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>,cmp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		Sum<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>Sum<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">V</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">&lt;</span>Hash<span style="color: #008000;">&#91;</span>Sum<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			Hash<span style="color: #008000;">&#91;</span>Sum<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		j<span style="color: #000080;">=</span>Hash<span style="color: #008000;">&#91;</span>Sum<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">&gt;=</span>i<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">continue</span><span style="color: #008080;">;</span>
		L<span style="color: #000080;">=</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">S</span><span style="color: #000040;">-</span>P<span style="color: #008000;">&#91;</span>j<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">S</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>L<span style="color: #000080;">&gt;</span>Ans<span style="color: #008000;">&#41;</span>
			Ans<span style="color: #000080;">=</span>L<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> Ans <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<blockquote><p>
<a href="http://www.ruvtex.cn/wiki/USACOMonthly/2007_03_S/Balanced_Lineup/Chinese">平衡的阵容</a></p>
<p>译 By BYVoid</p>
<p>Farmer John 决定给他的奶牛们照一张合影，他让 N (1 ≤ N ≤ 50,000) 头奶牛站成一条直线，每头牛都有它的坐标(范围: 0..1,000,000,000)和种族(0或1)。</p>
<p>一直以来 Farmer John 总是喜欢做一些非凡的事，当然这次照相也不例外。他只给一部分牛照相，并且这一组牛的阵容必须是“平衡的”。平衡的阵容，指的是在一组牛中，种族0和种族1的牛的数量相等。</p>
<p>请算出最广阔的区间，使这个区间内的牛阵容平衡。区间的大小为区间内最右边的牛的坐标减去最做边的牛的坐标。</p>
<p>输入中，每个种族至少有一头牛，没有两头牛的坐标相同。</p>
<p>输入</p>
<p>    * 行 1: 一个整数: N<br />
    * 行 2..N + 1: 每行两个整数，为种族 ID 和 x 坐标。 </p>
<p>输出</p>
<p>    * 行 1: 一个整数，阵容平衡的最大的区间的大小。 </p>
<p>输入样例</p>
<p>7<br />
0 11<br />
1 10<br />
1 25<br />
1 12<br />
1 4<br />
0 13<br />
1 22</p>
<p>输出样例</p>
<p>11</p>
<p>输入说明</p>
<p>有7头牛，像这样在数轴上。</p>
<p>            1                 1  0  1  0                          1        1<br />
+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+<br />
0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25</p>
<p>输出说明</p>
<p>牛 #1 (at 11), #4 (at 12), #6 (at 13), #7 (at 22) 组成一个平衡的最大的区间，大小为 22-11=11 个单位长度。</p>
<p>                                 <--------     平衡的     --------><br />
            1                 1  0  1  0                          1        1<br />
+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+&#8211;+<br />
0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
</p></blockquote>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/usaco-512-starry-night/" title="USACO 5.1.2 Starry Night 夜空繁星 starry">USACO 5.1.2 Starry Night 夜空繁星 starry</a></li><li><a href="http://www.byvoid.com/blog/pku-3255/" title="pku 3255 Roadblocks">pku 3255 Roadblocks</a></li><li><a href="http://www.byvoid.com/blog/noi-2001-solution/" title="NOI 2001 解题报告">NOI 2001 解题报告</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-prz/" title="POI 2001 Intervals 区间">POI 2001 Intervals 区间</a></li><li><a href="http://www.byvoid.com/blog/poi-1997-ali/" title="POI 1997 阿里巴巴 Ali Baba">POI 1997 阿里巴巴 Ali Baba</a></li><li><a href="http://www.byvoid.com/blog/ural-1167/" title="Ural 1167 Bicoloured Horses">Ural 1167 Bicoloured Horses</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/usaco-mar07-silver-balanced-lineup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
