<?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/%e8%ae%a1%e7%ae%97%e5%87%a0%e4%bd%95/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>WC2010 能量场</title>
		<link>http://www.byvoid.com/blog/wc2010-efield/</link>
		<comments>http://www.byvoid.com/blog/wc2010-efield/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 07:15:06 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[NOI]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[WC]]></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=1813</guid>
		<description><![CDATA[问题简述 能量场中有N个粒子，每个粒子都有一个质量m和结合系数c，两个粒子a,b合并时会产生mamb(ca - cb)的能量。(1)找出两个粒子相结合，使得产生的能量最大。(2)从中找出任意k个粒子排列成... ]]></description>
			<content:encoded><![CDATA[<h3><a name="_Toc256326565">问题简述</a></h3>
<p>能量场中有N个粒子，每个粒子都有一个质量m和结合系数c，两个粒子a,b合并时会产生m<sub>a</sub>m<sub>b</sub>(c<sub>a </sub>- c<sub>b</sub>)的能量。(1)找出两个粒子相结合，使得产生的能量最大。(2)从中找出任意k个粒子排列成一个环，相邻两个粒子分别合并，使得总能量最大，产生负能量的粒子必须是环上连续的一段。</p>
<h3><a name="_Toc256326566"></a><a name="_Toc241035976">问题</a><a name="_Toc241035977"></a>分析</h3>
<p>乍一看这个问题的第一问好像很简单，枚举每对粒子即可，但是时间复杂度是O(N<sup>2</sup>)的，而且难以想到如何优化。第二问则更加困难，搜索、动态规划是肯定不行的，贪心、图论也难以找到建模方式。分析发现这个问题可以归约到一个0/1规划问题，如果没有特殊性将无法解决，而特殊性无非在于能量产生的公式，因此将目光聚焦到这个公式上，对公式进行一些变形：</p>
<ul>
<li>m<sub>a</sub>m<sub>b</sub>(c<sub>a </sub>- c<sub>b</sub>)</li>
<li>= m<sub>a</sub>m<sub>b</sub>c<sub>a </sub>- m<sub>a</sub>m<sub>b</sub>c<sub>b</sub></li>
<li>= m<sub>a</sub>c<sub>a</sub>m<sub>b &#8211; </sub>m<sub>b</sub>c<sub>b</sub>m<sub>a</sub></li>
<li>设x<sub>i</sub>=m<sub>i</sub>c<sub>i</sub>，y<sub>i</sub>=m<sub>i</sub>则原式</li>
<li>= x<sub>a</sub>*y<sub>b</sub> &#8211; x<sub>b</sub>*y<sub>a</sub></li>
</ul>
<p><span id="more-1813"></span><br />
经过变形，我们可以明显地看出公式变形为了两个向量叉积的公式，这给我们以启发：把每个粒子看做平面上的一个点，两个粒子合并产生的能量就是原点指向两个点的向量的叉积。因此问题的第一问就转化为了：找到两个向量，使它们的叉积最大。而第二问找到一个环合并的公式恰好对应了多边形的面积公式，再加上“<strong>产生负能量的粒子必须是环上连续的一段</strong>”这个限制，这个多边形必须是简单多边形<a name="_ftnref1_8826" href="#_ftn1_8826">[1]</a>。</p>
<p>要使第二问要求的环对应的多边形面积尽量大，应是平面上这些点能组成的最大的简单多边形，那么就应该是这些点的凸包。</p>
<p>相较之下第一问反而更难求解，不过有了对应的几何意义，就容易下手了。两个向量的叉积对应了两个向量所夹的平行四边形的有向面积，要使之最大首先应该是正值，即让第一个向量在第二个向量顺时针方向。当我们确定了第一个向量<a name="_ftnref2_8826" href="#_ftn2_8826">[2]</a>，即确定了平行四边形的一个底边，要使面积最大，应最大化平行四边形的高。于是我们可以做一条与该向量平行的直线，不断向上平移，直到遇到距离最远的点为止，这样的高最大。第一个向量与这个最远的点对应的向量做叉积就是对应的最大面积，很显然这个最远的点一定在凸包上，反过来考虑第一个向量的终点也一定在凸包上，因此查找这对向量时只需考虑凸包上的点。</p>
<p><img style="display: inline; border-width: 0px;" title="image" src="http://www.byvoid.com/blog/wp-content/uploads/2010/03/image.png" border="0" alt="image" width="346" height="316" /></p>
<p>有这个性质以后，如果直接枚举这对顶点，可能会快不少，但时间复杂度依然是O(N<sup>2</sup>)的。这时如果我们以某种特定的顺序枚举第一个向量，可以减少不少枚举量。具体方法是将从原点到凸包上所有的点的向量按照逆时针方向排序，按顺序枚举，这时候我们枚举的向量就是逆时针方向移动的，对应的第二个向量的终点在凸包上也是逆时针顺序移动（从最上点到最左点），因此枚举就是均摊线性的时间复杂度了。</p>
<h3><a name="_Toc256326567">算法描述</a></h3>
<p>1. 将所有粒子抽象为平面第一象限内的一个点(m<sub>i</sub>c<sub>i</sub>,m<sub>i</sub>)。</p>
<p>2. 求平面上点的凸包。</p>
<p>3. 把凸包上的点按照向量极角的顺序排序依次枚举作为第一个向量i。</p>
<p>4. 找到对应第二个向量的终点j，应满足向量&lt;j,j+1&gt;在向量i逆时针方向。</p>
<h3><a name="_Toc256326568"></a><a name="_Toc241035980">复杂度分析</a></h3>
<p>求凸包的时间复杂度为O(NlogN)，枚举最优向量对的时间复杂度为O(N)，因此总体时间复杂度为O(NlogN)。</p>
<h3><a name="_Toc256326569"></a><a name="_Toc241035981">参考程序</a></h3>

<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('p1813code2'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p18132"><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
153
154
155
156
157
158
</pre></td><td class="code" id="p1813code2"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI Winter Camp 2010 efield
 * Author: Guo Jiabao
 * Time: 2010.3.15 12:21
 * Label: Solved
 * Memo: Computing Geometry + Convex Hull + Graham Scan
*/</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: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;sstream&gt;</span>
<span style="color: #339900;">#include &lt;vector&gt;</span>
<span style="color: #339900;">#include &lt;list&gt;</span>
<span style="color: #339900;">#include &lt;deque&gt;</span>
<span style="color: #339900;">#include &lt;string&gt;</span>
<span style="color: #339900;">#include &lt;queue&gt;</span>
&nbsp;
<span style="color: #339900;">#define var(a,b) typeof(b) a(b)</span>
<span style="color: #339900;">#define foreach(a,b) for (var(a,b.begin());a!=b.end();++a)</span>
<span style="color: #0000ff;">using</span> std<span style="color: #008080;">::</span><span style="color: #007788;">sort</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN <span style="color: #000080;">=</span> <span style="color: #0000dd;">50002</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> point
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">double</span> x,y<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> id<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> N,ipole<span style="color: #008080;">;</span>
point P<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,pole,convex<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,A<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
point operator <span style="color: #000040;">-</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> point <span style="color: #000040;">&amp;</span>a,<span style="color: #0000ff;">const</span> point <span style="color: #000040;">&amp;</span>b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	point t<span style="color: #000080;">=</span><span style="color: #008000;">&#123;</span>a.<span style="color: #007788;">x</span><span style="color: #000040;">-</span>b.<span style="color: #007788;">x</span>,a.<span style="color: #007788;">y</span><span style="color: #000040;">-</span>b.<span style="color: #007788;">y</span>,<span style="color: #0000dd;">0</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> t<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">double</span> operator <span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> point <span style="color: #000040;">&amp;</span>a,<span style="color: #0000ff;">const</span> point <span style="color: #000040;">&amp;</span>b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> a.<span style="color: #007788;">x</span><span style="color: #000040;">*</span>b.<span style="color: #007788;">y</span> <span style="color: #000040;">-</span> b.<span style="color: #007788;">x</span><span style="color: #000040;">*</span>a.<span style="color: #007788;">y</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</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;efield.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;efield.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>
	ipole<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>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;">double</span> m,c<span style="color: #008080;">;</span>
		<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%lf%lf&quot;</span>,<span style="color: #000040;">&amp;</span>m,<span style="color: #000040;">&amp;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span> <span style="color: #000080;">=</span> m<span style="color: #000040;">*</span>c<span style="color: #008080;">;</span>
		P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span> <span style="color: #000080;">=</span> m<span style="color: #008080;">;</span>
		P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">id</span> <span style="color: #000080;">=</span> i<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span> <span style="color: #000080;">&gt;</span> P<span style="color: #008000;">&#91;</span>ipole<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span>
			ipole <span style="color: #000080;">=</span> i<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	pole <span style="color: #000080;">=</span> P<span style="color: #008000;">&#91;</span>ipole<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	P<span style="color: #008000;">&#91;</span>ipole<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> P<span style="color: #008000;">&#91;</span>N<span style="color: #000040;">--</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> cmp<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> point <span style="color: #000040;">&amp;</span>a,<span style="color: #0000ff;">const</span> point <span style="color: #000040;">&amp;</span>b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	point p <span style="color: #000080;">=</span> a <span style="color: #000040;">-</span> pole<span style="color: #008080;">;</span>
	point q <span style="color: #000080;">=</span> b <span style="color: #000040;">-</span> pole<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">double</span> fc <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>fc <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">0</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>fc <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: #0000ff;">false</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span>p.<span style="color: #007788;">x</span> <span style="color: #000040;">*</span> p.<span style="color: #007788;">x</span> <span style="color: #000040;">+</span> p.<span style="color: #007788;">y</span> <span style="color: #000040;">*</span> p.<span style="color: #007788;">y</span> <span style="color: #000080;">&gt;</span> q.<span style="color: #007788;">x</span> <span style="color: #000040;">*</span> q.<span style="color: #007788;">x</span> <span style="color: #000040;">+</span> q.<span style="color: #007788;">y</span> <span style="color: #000040;">*</span> q.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> graham<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> top<span style="color: #008080;">;</span>
	sort<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>,<span style="color: #000040;">&amp;</span>P<span style="color: #008000;">&#91;</span>N<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>,cmp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	convex<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> pole<span style="color: #008080;">;</span>
	convex<span style="color: #008000;">&#91;</span>top<span style="color: #000080;">=</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> P<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</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;">2</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>
		point p <span style="color: #000080;">=</span> convex<span style="color: #008000;">&#91;</span>top<span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span> convex<span style="color: #008000;">&#91;</span>top<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		point q <span style="color: #000080;">=</span> P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span> convex<span style="color: #008000;">&#91;</span>top<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">*</span>q <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			top<span style="color: #000040;">--</span><span style="color: #008080;">;</span>
			i<span style="color: #000040;">--</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">else</span>
			convex<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>top<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	N <span style="color: #000080;">=</span> top<span style="color: #008080;">;</span>
	convex<span style="color: #008000;">&#91;</span>N<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> convex<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> getSumArea<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;">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>,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: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d &quot;</span>,convex<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">id</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>,convex<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">id</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #ff0000; font-style: italic;">/*	double SumArea = 0;
	for (i=1;i&lt;=N;i++)
		SumArea += convex[i] * convex[i+1];
	SumArea *= 0.5;*/</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">bool</span> cmp2<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> point <span style="color: #000040;">&amp;</span>a,<span style="color: #0000ff;">const</span> point <span style="color: #000040;">&amp;</span>b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> a <span style="color: #000040;">*</span> b <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> getPair<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> M <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span>,i,j,ai,aj<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">double</span> PairArea <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>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>
		A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> convex<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>convex<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span> <span style="color: #000080;">&lt;</span> convex<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: #007788;">x</span><span style="color: #008000;">&#41;</span>
			M <span style="color: #000080;">=</span> i<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	sort<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>A<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>,<span style="color: #000040;">&amp;</span>A<span style="color: #008000;">&#91;</span>N<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>,cmp2<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>,j<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;">while</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">&lt;</span>M <span style="color: #000040;">&amp;&amp;</span> A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>convex<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>convex<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: #008000;">&#41;</span> <span style="color: #000080;">&lt;=</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
			j<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>j <span style="color: #000080;">==</span> M<span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">double</span> cur <span style="color: #000080;">=</span> A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">*</span> convex<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>cur <span style="color: #000080;">&gt;</span> PairArea<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			PairArea <span style="color: #000080;">=</span> cur<span style="color: #008080;">;</span>
			ai <span style="color: #000080;">=</span> A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">id</span><span style="color: #008080;">;</span>
			aj <span style="color: #000080;">=</span> convex<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">id</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 %d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,ai,aj<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<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>
	graham<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	getPair<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	getSumArea<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</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>
	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: #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>

<hr size="1" /><a name="_ftn1_8826" href="#_ftnref1_8826">[1]</a> 如果不是简单多边形，则面积公式一定会有多段连续的负值。</p>
<p><a name="_ftn2_8826" href="#_ftnref2_8826">[2]</a> 即顺时针方向下方的那个向量，下同。</p>
<h3>附录</h3>
<p>本题答案不唯一，因此需要一个Special Judge，我写了一个Cena的。使用方法就是编译后放进数据文件夹，添加题目的时候设置自定义校验器，如果实在不会看帮助吧。<br />
下载地址：<a href="http://www.byvoid.com/blog/wp-content/uploads/2010/03/efield-check-cena.zip">efield-check-cena.zip</a><br />
<a href="http://www.byvoid.com/blog/wp-content/uploads/2010/03/image1.png"><img style="display: inline; border: 0px;" title="image" src="http://www.byvoid.com/blog/wp-content/uploads/2010/03/image_thumb.png" border="0" alt="image" width="401" height="336" /></a></p>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/wc-2010-solution/" title="NOI 2010 冬令营 解题报告">NOI 2010 冬令营 解题报告</a></li><li><a href="http://www.byvoid.com/blog/wc2010-sort/" title="WC2010 排序机">WC2010 排序机</a></li><li><a href="http://www.byvoid.com/blog/wc2010-rebuild/" title="WC2010 重建计划">WC2010 重建计划</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/noi-solutions/" title="NOI解题报告">NOI解题报告</a></li><li><a href="http://www.byvoid.com/blog/wc2009-start/" title="出发-NOI2009冬令营">出发-NOI2009冬令营</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/wc2010-efield/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>NOI 2009 描边</title>
		<link>http://www.byvoid.com/blog/noi-2009-path/</link>
		<comments>http://www.byvoid.com/blog/noi-2009-path/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 13:02:09 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[NOI]]></category>
		<category><![CDATA[NOI2009]]></category>
		<category><![CDATA[竖线扫描]]></category>
		<category><![CDATA[计算几何]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=1789</guid>
		<description><![CDATA[问题简述 平面上有一些笔画，笔画两端为半圆，中部为矩形，笔画可以互相重叠。任务是求平面上笔画的总面积。 问题建模 这是一个计算几何问题，我们可以把一个笔画分解看为一个矩形和... ]]></description>
			<content:encoded><![CDATA[<h3><a name="_Toc243122284">问题简述</a></h3>
<p>平面上有一些笔画，笔画两端为半圆，中部为矩形，笔画可以互相重叠。任务是求平面上笔画的总面积。<span id="more-1789"></span></p>
<h3><a name="_Toc243122285"></a><a name="_Toc241035976">问题建模</a><a name="_Toc241035977"></a></h3>
<p>这是一个计算几何问题，我们可以把一个笔画分解看为一个矩形和两个圆相互重叠（如下图所示）。</p>
<p><img style="display: inline; border: 0px;" title="image" src="http://www.byvoid.com/blog/wp-content/uploads/2010/01/image10.png" border="0" alt="image" width="145" height="200" /> <img style="display: inline; border: 0px;" title="image" src="http://www.byvoid.com/blog/wp-content/uploads/2010/01/image11.png" border="0" alt="image" width="145" height="200" /></p>
<p>由于题中给定的是笔画的两个端点的坐标和半径，所以首先要求出矩形的四个端点坐标。如下图所示，设矩形两端中点分别为A,B，矩形A所在边上一个顶点为C。只需求出<img style="display: inline; border: 0px;" title="clip_image006" src="http://www.byvoid.com/blog/wp-content/uploads/2010/01/clip_image0063.gif" border="0" alt="clip_image006" width="17" height="37" />的长度相等的平面法向量<img style="display: inline; border: 0px;" title="clip_image008" src="http://www.byvoid.com/blog/wp-content/uploads/2010/01/clip_image0081.gif" border="0" alt="clip_image008" width="21" height="37" />，然后<img style="display: inline; border: 0px;" title="clip_image008[1]" src="http://www.byvoid.com/blog/wp-content/uploads/2010/01/clip_image00811.gif" border="0" alt="clip_image008[1]" width="21" height="37" />除以<img style="display: inline; border: 0px;" title="clip_image010" src="http://www.byvoid.com/blog/wp-content/uploads/2010/01/clip_image0101.gif" border="0" alt="clip_image010" width="32" height="37" />求出单位向量，再乘以R就能求出<img style="display: inline; border: 0px;" title="clip_image012" src="http://www.byvoid.com/blog/wp-content/uploads/2010/01/clip_image0121.gif" border="0" alt="clip_image012" width="16" height="37" />。用A,B坐标分别加减<img style="display: inline; border: 0px;" title="clip_image012[1]" src="http://www.byvoid.com/blog/wp-content/uploads/2010/01/clip_image01211.gif" border="0" alt="clip_image012[1]" width="16" height="37" />，即可求出矩形四个顶点的坐标。</p>
<p><img style="display: inline; border: 0px;" title="image" src="http://www.byvoid.com/blog/wp-content/uploads/2010/01/image12.png" border="0" alt="image" width="200" height="280" /></p>
<h4><a name="_Toc243122286">解法</a> 竖线扫描</h4>
<h5><a name="_Toc243122287"></a><a name="_Toc241035978">算法描述</a></h5>
<p>用一条竖线去切割平面，会与上面的矩形或圆相交而且有一些相交的区间，把这些区间求并以后并乘以竖线的宽度，即可近似认为是竖线覆盖到的图形面积。用竖线扫描完整个平面，其面积之和就是平面上图形面积。扫描的竖线越细，结果就越精确。</p>
<p><img style="display: inline; border: 0px;" title="image" src="http://www.byvoid.com/blog/wp-content/uploads/2010/01/image13.png" border="0" alt="image" width="321" height="282" /></p>
<p>我们要解决竖线与线段相交，以及竖线与圆相交的问题。</p>
<p>如图所示，扫描线x=x0与线段AB相交，我们要求出交点D的纵坐标。分别过B作平行于x=x0的直线，过A作垂直于x=x0的直线，相交于点C，AC交x=x0与点E。显然有</p>
<p><img style="display: inline; border: 0px;" title="clip_image018" src="http://www.byvoid.com/blog/wp-content/uploads/2010/01/clip_image0181.gif" border="0" alt="clip_image018" width="52" height="55" /></p>
<p>所以</p>
<p><img style="display: inline; border: 0px;" title="clip_image020" src="http://www.byvoid.com/blog/wp-content/uploads/2010/01/clip_image0201.gif" border="0" alt="clip_image020" width="85" height="55" /></p>
<p>于是用E的坐标加上<img style="display: inline; border: 0px;" title="clip_image022" src="http://www.byvoid.com/blog/wp-content/uploads/2010/01/clip_image0221.gif" border="0" alt="clip_image022" width="17" height="37" />可算出D坐标。</p>
<p><img style="display: inline; border: 0px;" title="image" src="http://www.byvoid.com/blog/wp-content/uploads/2010/01/image14.png" border="0" alt="image" width="188" height="240" /></p>
<p>如图是扫描线与圆A相交点C，作AB垂直于扫描线与点B，连接AC。|AC|=R，|AB|为扫描线横坐标与点A横坐标之差绝对值，根据勾股定理即可求出|BC|，进而求出扫描线与圆的两交点坐标。</p>
<p>在程序实现时，我们需要求出每个“笔画”的左右边界横坐标，按照左边界坐标排序所有“笔画”，并用一个双向链表实现队列维护当前扫描线可以扫描到的“笔画”。扫描线向右移动时，判断是否有新的“笔画”左界小于等于扫描线横坐标，并加入队列。同时，当发现一个“笔画”右界小于扫描线横坐标，则把它从队列中删除。</p>
<h5><a name="_Toc243122288">实际测试</a></h5>
<p>时间复杂度为O(MC)，M为笔画数，C为扫描线数。在实际的测试中，前9个测试点扫描竖线宽度设定为1*10^(-6)，均得到了10分，程序运行时间如下表。</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="66" valign="top"><strong>测试点</strong><strong></strong></td>
<td width="66" valign="top"><strong>1</strong></td>
<td width="66" valign="top"><strong>2</strong></td>
<td width="66" valign="top"><strong>3</strong></td>
<td width="66" valign="top"><strong>4</strong></td>
<td width="66" valign="top"><strong>5</strong></td>
<td width="66" valign="top"><strong>6</strong></td>
<td width="66" valign="top"><strong>7</strong></td>
<td width="66" valign="top"><strong>8</strong></td>
<td width="66" valign="top"><strong>9</strong></td>
</tr>
<tr>
<td width="66" valign="top"><strong>时间</strong><strong>(</strong><strong>秒</strong><strong>)</strong></td>
<td width="66" valign="top">10</td>
<td width="66" valign="top">10</td>
<td width="66" valign="top">34</td>
<td width="66" valign="top">25</td>
<td width="66" valign="top">50</td>
<td width="66" valign="top">27</td>
<td width="66" valign="top">10</td>
<td width="66" valign="top">17</td>
<td width="66" valign="top">335</td>
</tr>
</tbody>
</table>
<p><span style="text-decoration: underline;">而第</span><span style="text-decoration: underline;">10</span><span style="text-decoration: underline;">个测试点由于规模过大，运行</span><span style="text-decoration: underline;">400</span><span style="text-decoration: underline;">秒仅能得到</span><span style="text-decoration: underline;">7</span><span style="text-decoration: underline;">分。当我把扫描竖线宽度设定为5*10^(-8)，</span><span style="text-decoration: underline;">，并运行了</span><span style="text-decoration: underline;">11</span><span style="text-decoration: underline;">天零</span><span style="text-decoration: underline;">4</span><span style="text-decoration: underline;">个小时后，终于获得了</span><span style="text-decoration: underline;">10</span><span style="text-decoration: underline;">分。</span></p>
<h5><a name="_Toc243122289"></a><a name="_Toc241035981">参考程序</a></h5>

<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('p1789code4'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p17894"><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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
</pre></td><td class="code" id="p1789code4"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI2009 path
 * Author: Guo Jiabao
 * Time: 2009.10.9 13:50
 * 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: #339900;">#include &lt;ctime&gt;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN <span style="color: #000080;">=</span> <span style="color: #0000dd;">2501</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">double</span> INF <span style="color: #000080;">=</span> <span style="color:#800080;">1e100</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> point
<span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">double</span> x,y<span style="color: #008080;">;</span>
    point <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span> tx,<span style="color: #0000ff;">double</span> ty<span style="color: #008000;">&#41;</span> <span style="color: #008080;">:</span> x<span style="color: #008000;">&#40;</span>tx<span style="color: #008000;">&#41;</span>,y<span style="color: #008000;">&#40;</span>ty<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span>
    point <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008080;">:</span> x<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> , y<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: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> shape
<span style="color: #008000;">&#123;</span>
    point c<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span>,v<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">double</span> left,right<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> itvs
<span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">double</span> a<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">bool</span> s<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>isl<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> delist
<span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">struct</span> item
    <span style="color: #008000;">&#123;</span>
        item <span style="color: #000040;">*</span>c<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
        shape <span style="color: #000040;">*</span>e<span style="color: #008080;">;</span>
        item<span style="color: #008000;">&#40;</span>item <span style="color: #000040;">*</span>last,shape <span style="color: #000040;">*</span>te<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            c<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> last<span style="color: #008080;">;</span>
            c<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span>
            e <span style="color: #000080;">=</span> te<span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span><span style="color: #000040;">*</span>front,<span style="color: #000040;">*</span>rear<span style="color: #008080;">;</span>
    delist<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        front <span style="color: #000080;">=</span> rear <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> insert<span style="color: #008000;">&#40;</span>shape <span style="color: #000040;">*</span>e<span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>rear<span style="color: #008000;">&#41;</span>
            rear <span style="color: #000080;">=</span> rear <span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span> c<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> item<span style="color: #008000;">&#40;</span>rear,e<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">else</span>
            front <span style="color: #000080;">=</span> rear <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> item<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span>,e<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">void</span> <span style="color: #0000dd;">remove</span><span style="color: #008000;">&#40;</span>item <span style="color: #000040;">*</span>i<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: #000040;">-</span><span style="color: #000080;">&gt;</span> c<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
            i <span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span> c<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span> c<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> i <span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span> c<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">else</span>
            front <span style="color: #000080;">=</span> i <span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span> c<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span> c<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
            i <span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span> c<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: #000080;">&gt;</span> c<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> i <span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span> c<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">else</span>
            rear <span style="color: #000080;">=</span> i <span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span> c<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
        <span style="color: #0000dd;">delete</span> i<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;">int</span> M,N,ic<span style="color: #008080;">;</span>
<span style="color: #0000ff;">double</span> R,Total,Left,Right,miny,maxy<span style="color: #008080;">;</span>
point P<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
shape A<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
delist DL<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">void</span> operator <span style="color: #000040;">*</span><span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>point <span style="color: #000040;">&amp;</span>a,<span style="color: #0000ff;">double</span> k<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    a.<span style="color: #007788;">x</span> <span style="color: #000040;">*</span><span style="color: #000080;">=</span>k<span style="color: #008080;">;</span>
    a.<span style="color: #007788;">y</span> <span style="color: #000040;">*</span><span style="color: #000080;">=</span>k<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
point operator <span style="color: #000040;">+</span> <span style="color: #008000;">&#40;</span>point a,point b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">return</span> point<span style="color: #008000;">&#40;</span>a.<span style="color: #007788;">x</span> <span style="color: #000040;">+</span> b.<span style="color: #007788;">x</span>,a.<span style="color: #007788;">y</span> <span style="color: #000040;">+</span> b.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
point operator <span style="color: #000040;">-</span> <span style="color: #008000;">&#40;</span>point a,point b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">return</span> point<span style="color: #008000;">&#40;</span>a.<span style="color: #007788;">x</span> <span style="color: #000040;">-</span> b.<span style="color: #007788;">x</span>,a.<span style="color: #007788;">y</span> <span style="color: #000040;">-</span> b.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">double</span> MIN<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span> a,<span style="color: #0000ff;">double</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;">&lt;</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>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">double</span> MAX<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span> a,<span style="color: #0000ff;">double</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>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">double</span> ABS<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</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>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">double</span> dist<span style="color: #008000;">&#40;</span>point a,point b<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">sqrt</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>a.<span style="color: #007788;">x</span><span style="color: #000040;">-</span>b.<span style="color: #007788;">x</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>a.<span style="color: #007788;">x</span><span style="color: #000040;">-</span>b.<span style="color: #007788;">x</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> <span style="color: #008000;">&#40;</span>a.<span style="color: #007788;">y</span><span style="color: #000040;">-</span>b.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>a.<span style="color: #007788;">y</span><span style="color: #000040;">-</span>b.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</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: #0000ff;">int</span> i,a,b<span style="color: #008080;">;</span>
    <span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;path.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;path.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>
    <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: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%lf%lf&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;">x</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;">y</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: #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&quot;</span>,<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>
        A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">c</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> P<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
        A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">c</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> P<span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%lf&quot;</span>,<span style="color: #000040;">&amp;</span>R<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> count_point<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>
    point v,v1,v2<span style="color: #008080;">;</span>
    Left <span style="color: #000080;">=</span> INF<span style="color: #008080;">;</span> Right <span style="color: #000080;">=</span> <span style="color: #000040;">-</span>INF<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>
        v <span style="color: #000080;">=</span> A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">c</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span> A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">c</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
        v1.<span style="color: #007788;">x</span> <span style="color: #000080;">=</span> v.<span style="color: #007788;">y</span><span style="color: #008080;">;</span> v1.<span style="color: #007788;">y</span> <span style="color: #000080;">=</span> <span style="color: #000040;">-</span>v.<span style="color: #007788;">x</span><span style="color: #008080;">;</span>
        v1 <span style="color: #000040;">*</span><span style="color: #000080;">=</span> R <span style="color: #000040;">/</span> dist<span style="color: #008000;">&#40;</span>A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">c</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>,A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">c</span><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: #008080;">;</span>
        A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">v</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">c</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> v1<span style="color: #008080;">;</span>
        A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">v</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">c</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span> v1<span style="color: #008080;">;</span>
        A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">v</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">c</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> v1<span style="color: #008080;">;</span>
        A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">v</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">c</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span> v1<span style="color: #008080;">;</span>
&nbsp;
        A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">left</span> <span style="color: #000080;">=</span> MIN<span style="color: #008000;">&#40;</span>A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">c</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #000040;">-</span>R,A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">c</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #000040;">-</span>R<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: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">left</span> <span style="color: #000080;">&lt;</span> Left<span style="color: #008000;">&#41;</span>
            Left <span style="color: #000080;">=</span> A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">left</span><span style="color: #008080;">;</span>
&nbsp;
        A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">right</span> <span style="color: #000080;">=</span> MAX<span style="color: #008000;">&#40;</span>A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">c</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #000040;">+</span>R,A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">c</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #000040;">+</span>R<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: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">right</span> <span style="color: #000080;">&gt;</span> Right<span style="color: #008000;">&#41;</span>
            Right <span style="color: #000080;">=</span> A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">right</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</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>shape <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> left <span style="color: #000080;">&lt;</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>shape <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> left <span style="color: #008080;">?</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span> <span style="color: #008080;">:</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> cmp1<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;">if</span> <span style="color: #008000;">&#40;</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>itvs <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> a <span style="color: #000080;">&lt;</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>itvs <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> a <span style="color: #008000;">&#41;</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: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>itvs <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> a <span style="color: #000080;">&gt;</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>itvs <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> a <span style="color: #008000;">&#41;</span>
        <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>itvs <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: #008000;">&#41;</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: #0000ff;">return</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> insert_ivl<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span> s,<span style="color: #0000ff;">double</span> t<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s <span style="color: #000080;">&gt;=</span> t<span style="color: #008000;">&#41;</span>
        <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
    isl<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>ic<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">a</span> <span style="color: #000080;">=</span> s<span style="color: #008080;">;</span>
    isl<span style="color: #008000;">&#91;</span>ic<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">s</span> <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
    isl<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>ic<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">a</span> <span style="color: #000080;">=</span> t<span style="color: #008080;">;</span>
    isl<span style="color: #008000;">&#91;</span>ic<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">s</span> <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">double</span> ivl_merge<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,lv<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">double</span> s,t<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    <span style="color: #0000dd;">qsort</span><span style="color: #008000;">&#40;</span>isl<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,ic,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>isl<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>,cmp1<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>ic<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;">if</span> <span style="color: #008000;">&#40;</span>isl<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: #008000;">&#123;</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">++</span>lv <span style="color: #000080;">==</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
                s <span style="color: #000080;">=</span> isl<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">a</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><span style="color: #000040;">--</span>lv <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
                t <span style="color: #000040;">+</span><span style="color: #000080;">=</span> isl<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">a</span> <span style="color: #000040;">-</span> s<span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> t<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">bool</span> isin<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span> x,<span style="color: #0000ff;">double</span> x1,<span style="color: #0000ff;">double</span> x2<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>x1 <span style="color: #000080;">&lt;</span> x2<span style="color: #008000;">&#41;</span>
        <span style="color: #0000ff;">return</span> x1 <span style="color: #000080;">&lt;=</span> x <span style="color: #000040;">&amp;&amp;</span> x <span style="color: #000080;">&lt;=</span> x2<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">else</span>
        <span style="color: #0000ff;">return</span> x2 <span style="color: #000080;">&lt;=</span> x <span style="color: #000040;">&amp;&amp;</span> x <span style="color: #000080;">&lt;=</span> x1<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> cross_segment<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span> x,point a,point 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>b.<span style="color: #007788;">x</span> <span style="color: #000080;">==</span> a.<span style="color: #007788;">x</span> <span style="color: #000040;">||</span> <span style="color: #000040;">!</span>isin<span style="color: #008000;">&#40;</span>x,a.<span style="color: #007788;">x</span>,b.<span style="color: #007788;">x</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">double</span> y <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>b.<span style="color: #007788;">y</span> <span style="color: #000040;">-</span> a.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> <span style="color: #008000;">&#40;</span>x <span style="color: #000040;">-</span> a.<span style="color: #007788;">x</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">/</span> <span style="color: #008000;">&#40;</span>b.<span style="color: #007788;">x</span> <span style="color: #000040;">-</span> a.<span style="color: #007788;">x</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    y <span style="color: #000040;">+</span><span style="color: #000080;">=</span> a.<span style="color: #007788;">y</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>y <span style="color: #000080;">&lt;</span> miny<span style="color: #008000;">&#41;</span>
        miny <span style="color: #000080;">=</span> y<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>y <span style="color: #000080;">&gt;</span> maxy<span style="color: #008000;">&#41;</span>
        maxy <span style="color: #000080;">=</span> y<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> scan<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">double</span> dx <span style="color: #000080;">=</span> <span style="color:#800080;">1e-6</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">double</span> x<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">double</span> per,lper<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> p<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>x<span style="color: #000080;">=</span>Left<span style="color: #008080;">;</span>x<span style="color: #000080;">&lt;=</span>Right<span style="color: #008080;">;</span>x<span style="color: #000040;">+</span><span style="color: #000080;">=</span>dx<span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        <span style="color: #666666;">//////</span>
        per <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>x <span style="color: #000040;">-</span> Left<span style="color: #008000;">&#41;</span><span style="color: #000040;">/</span><span style="color: #008000;">&#40;</span>Right <span style="color: #000040;">-</span> Left<span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> <span style="color: #0000dd;">100</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>per <span style="color: #000040;">-</span> lper <span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
            lper <span style="color: #000080;">=</span> per<span style="color: #008080;">;</span>
            <span style="color: #0000dd;">fprintf</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">stderr</span>,<span style="color: #FF0000;">&quot;%.0lf percent<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,per<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
        <span style="color: #666666;">//////</span>
        <span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span> <span style="color: #000080;">&lt;=</span>M <span style="color: #000040;">&amp;&amp;</span> A<span style="color: #008000;">&#91;</span>p<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">left</span> <span style="color: #000080;">&lt;=</span> x<span style="color: #008000;">&#41;</span>
            DL.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>A<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>p<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        ic <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>delist <span style="color: #008080;">::</span> <span style="color: #007788;">item</span> <span style="color: #000040;">*</span>it <span style="color: #000080;">=</span> DL.<span style="color: #007788;">front</span><span style="color: #008080;">;</span>it<span style="color: #008080;">;</span>it <span style="color: #000080;">=</span> it <span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<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: #008000;">&#123;</span>
            shape <span style="color: #000040;">*</span>S<span style="color: #008080;">;</span>
            <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #008080;">;</span>it<span style="color: #008080;">;</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
                S <span style="color: #000080;">=</span> it <span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span> e<span style="color: #008080;">;</span>
                <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>x <span style="color: #000080;">&lt;=</span> S<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>right<span style="color: #008000;">&#41;</span>
                    <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
                delist <span style="color: #008080;">::</span> <span style="color: #007788;">item</span> <span style="color: #000040;">*</span>itn <span style="color: #000080;">=</span> it <span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span> c<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
                DL.<span style="color: #0000dd;">remove</span><span style="color: #008000;">&#40;</span>it<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                it <span style="color: #000080;">=</span> itn<span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>it<span style="color: #008000;">&#41;</span>
                <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
&nbsp;
            <span style="color: #666666;">//Cross circle</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;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">2</span><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;">if</span> <span style="color: #008000;">&#40;</span>S<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #000040;">-</span>R <span style="color: #000080;">&lt;</span> x <span style="color: #000040;">&amp;&amp;</span> x <span style="color: #000080;">&lt;</span> S<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #000040;">+</span>R<span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>
                    <span style="color: #0000ff;">double</span> tx,ty<span style="color: #008080;">;</span>
                    tx <span style="color: #000080;">=</span> ABS<span style="color: #008000;">&#40;</span>x <span style="color: #000040;">-</span> S<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                    ty <span style="color: #000080;">=</span> <span style="color: #0000dd;">sqrt</span><span style="color: #008000;">&#40;</span>R<span style="color: #000040;">*</span>R <span style="color: #000040;">-</span> tx<span style="color: #000040;">*</span>tx<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                    insert_ivl<span style="color: #008000;">&#40;</span>S<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span> <span style="color: #000040;">-</span> ty , S<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>c<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span> <span style="color: #000040;">+</span> ty<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                <span style="color: #008000;">&#125;</span>
            <span style="color: #008000;">&#125;</span>
&nbsp;
            miny <span style="color: #000080;">=</span> INF<span style="color: #008080;">;</span> maxy <span style="color: #000080;">=</span> <span style="color: #000040;">-</span>INF<span style="color: #008080;">;</span>
            cross_segment<span style="color: #008000;">&#40;</span>x,S<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>,S<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<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: #008080;">;</span>
            cross_segment<span style="color: #008000;">&#40;</span>x,S<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span>,S<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
            cross_segment<span style="color: #008000;">&#40;</span>x,S<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>,S<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
            cross_segment<span style="color: #008000;">&#40;</span>x,S<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>,S<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
            insert_ivl<span style="color: #008000;">&#40;</span>miny,maxy<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
        <span style="color: #0000ff;">double</span> t <span style="color: #000080;">=</span> ivl_merge<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        Total <span style="color: #000040;">+</span><span style="color: #000080;">=</span> t <span style="color: #000040;">*</span> dx<span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<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>
    count_point<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000dd;">qsort</span><span style="color: #008000;">&#40;</span>A<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,M,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>A<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>
    scan<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;%.12lf<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,Total<span style="color: #008000;">&#41;</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> c_start,c_end<span style="color: #008080;">;</span>
    c_start <span style="color: #000080;">=</span> <span style="color: #0000dd;">clock</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</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>
    c_end <span style="color: #000080;">=</span> <span style="color: #0000dd;">clock</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000dd;">cerr</span> <span style="color: #000080;">&lt;&lt;</span><span style="color: #FF0000;">&quot;Running Time : &quot;</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #0000ff;">double</span><span style="color: #008000;">&#40;</span>c_end <span style="color: #000040;">-</span> c_start<span style="color: #008000;">&#41;</span> <span style="color: #000040;">/</span> <span style="color: #0000ff;">CLOCKS_PER_SEC</span> <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>

<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/wc2010-efield/" title="WC2010 能量场">WC2010 能量场</a></li><li><a href="http://www.byvoid.com/blog/noi-2009-solution/" title="NOI 2009 解题报告">NOI 2009 解题报告</a></li><li><a href="http://www.byvoid.com/blog/noi-2009-ball/" title="NOI 2009 管道取珠">NOI 2009 管道取珠</a></li><li><a href="http://www.byvoid.com/blog/noi-2009-pvz/" title="NOI 2009 植物大战僵尸">NOI 2009 植物大战僵尸</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-2009-poet/" title="NOI 2009 诗人小G">NOI 2009 诗人小G</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/noi-2009-path/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>NOI 2003 卫星探测</title>
		<link>http://www.byvoid.com/blog/noi-2003-detect/</link>
		<comments>http://www.byvoid.com/blog/noi-2003-detect/#comments</comments>
		<pubDate>Tue, 26 May 2009 06:15:13 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[NOI]]></category>
		<category><![CDATA[NOI2003]]></category>
		<category><![CDATA[二分]]></category>
		<category><![CDATA[交互式]]></category>
		<category><![CDATA[计算几何]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=1332</guid>
		<description><![CDATA[这道题我的方法是二分判断+计算几何。 首先要找到多边形的边界，可以用四个点分别表示多边形上下左右边界的一个顶点。寻找边界可以用二分的方法。由于已知原点一定在多边形内或边上，... ]]></description>
			<content:encoded><![CDATA[<p>这道题我的方法是二分判断+计算几何。</p>
<p>首先要找到多边形的边界，可以用四个点分别表示多边形上下左右边界的一个顶点。寻找边界可以用二分的方法。由于已知原点一定在多边形内或边上，寻找左边界就可以从x取值-10000到0之间二分答案，其余边界以此类推。</p>
<p>确定边界后，接着要确定每个每个顶点的位置，由于这是一个凸多边形，而且没有边与坐标轴平行，所以从左界点到下界点之间的一段折线斜率一定是严格单调递增的，类似的相邻两个边界点之间的一段折线的斜率也都是单调的。于是我们可以二分答案，确定折线每条线段的端点。最后在按照极角排序好的顶点顺序求出多边形面积，顺序输出每个顶点坐标。其实再写程序时如果求折线端点的顺序恰当，顶点就是直接排好的。</p>
<p>为了尽量减少询问次数，可以把已经询问过的记录下来，以免重复询问。计算几何题一般来说细节较多，代码量大，很难一次写对。再加上这是一个交互式题，我调了好长时间。由于询问次数的限制，我的程序不能拿到满分，后面有几个点都是8分9分。谁要是能写出满分的程序，我一定拜读。<br />
<span id="more-1332"></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('p1332code6'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13326"><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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
</pre></td><td class="code" id="p1332code6"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI2003 detect
 * Author: Guo Jiabao
 * Time: 2009.5.26 13:30
 * 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: #339900;">#include &quot;detect_lib.h&quot;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXB<span style="color: #000080;">=</span><span style="color: #0000dd;">10000</span>,MAXL<span style="color: #000080;">=</span><span style="color: #0000dd;">20001</span>,MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">201</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">double</span> zero<span style="color: #000080;">=</span><span style="color:#800080;">1e-6</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> point
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">double</span> x,y<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>LB,RB,BB,TB,V<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,V2<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> ask
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> acnt<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">double</span> v1,v2<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>AX0<span style="color: #008000;">&#91;</span>MAXL<span style="color: #008000;">&#93;</span>,AY0<span style="color: #008000;">&#91;</span>MAXL<span style="color: #008000;">&#93;</span>,<span style="color: #000040;">*</span>Ax,<span style="color: #000040;">*</span>Ay<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> N,N2<span style="color: #008080;">;</span>
<span style="color: #0000ff;">double</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>opt<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span>,<span style="color: #0000ff;">double</span><span style="color: #008000;">&#41;</span> <span style="color: #008080;">;</span>
<span style="color: #0000ff;">double</span> min<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span> a,<span style="color: #0000ff;">double</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>a<span style="color: #000080;">==</span>MAXB<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> b<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>b<span style="color: #000080;">==</span>MAXB<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> a<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> a<span style="color: #000080;">&lt;</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;">double</span> max<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span> a,<span style="color: #0000ff;">double</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>a<span style="color: #000080;">==</span>MAXB<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> b<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>b<span style="color: #000080;">==</span>MAXB<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> a<span style="color: #008080;">;</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> init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	Ax<span style="color: #000080;">=</span>AX0<span style="color: #000040;">+</span>MAXB<span style="color: #008080;">;</span> Ay<span style="color: #000080;">=</span>AY0<span style="color: #000040;">+</span>MAXB<span style="color: #008080;">;</span>
	prog_initialize<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><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #000040;">-</span>MAXB<span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>MAXB<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		Ax<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">acnt</span><span style="color: #000080;">=</span>Ay<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">acnt</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>
ask Ask<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> k,<span style="color: #0000ff;">bool</span> x<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>x<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Ax<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">acnt</span><span style="color: #000080;">==</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
			Ax<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">acnt</span><span style="color: #000080;">=</span>ask_x<span style="color: #008000;">&#40;</span>k, <span style="color: #000040;">&amp;</span>Ax<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">v1</span>, <span style="color: #000040;">&amp;</span>Ax<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">v2</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Ax<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">acnt</span><span style="color: #000080;">==</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
			Ax<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">v2</span><span style="color: #000080;">=</span>MAXB<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> Ax<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: #0000ff;">else</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Ay<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">acnt</span><span style="color: #000080;">==</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
			Ay<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">acnt</span><span style="color: #000080;">=</span>ask_y<span style="color: #008000;">&#40;</span>k, <span style="color: #000040;">&amp;</span>Ay<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">v1</span>, <span style="color: #000040;">&amp;</span>Ay<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">v2</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Ay<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">acnt</span><span style="color: #000080;">==</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
			Ay<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">v2</span><span style="color: #000080;">=</span>MAXB<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> Ay<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;">int</span> BS_inc<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b,<span style="color: #0000ff;">bool</span> x<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> m<span style="color: #008080;">;</span>ask A<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>a<span style="color: #000080;">&lt;=</span>b<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		m<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>a<span style="color: #000040;">+</span>b<span style="color: #008000;">&#41;</span><span style="color: #000080;">&gt;&gt;</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		A<span style="color: #000080;">=</span>Ask<span style="color: #008000;">&#40;</span>m,x<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: #007788;">acnt</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
			a<span style="color: #000080;">=</span>m<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">acnt</span><span style="color: #000080;">==</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span>
			b<span style="color: #000080;">=</span>m<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span>
			<span style="color: #0000ff;">return</span> m<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> BS_dec<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b,<span style="color: #0000ff;">bool</span> x<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> m<span style="color: #008080;">;</span>ask A<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>a<span style="color: #000080;">&lt;=</span>b<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		m<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>a<span style="color: #000040;">+</span>b<span style="color: #008000;">&#41;</span><span style="color: #000080;">&gt;&gt;</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		A<span style="color: #000080;">=</span>Ask<span style="color: #008000;">&#40;</span>m,x<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: #007788;">acnt</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
			b<span style="color: #000080;">=</span>m<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">acnt</span><span style="color: #000080;">==</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span>
			a<span style="color: #000080;">=</span>m<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span>
			<span style="color: #0000ff;">return</span> m<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> Boundary<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	LB.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>Ax<span style="color: #008000;">&#91;</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>LB.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>BS_inc<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span>MAXB,<span style="color: #0000dd;">0</span>,<span style="color: #0000ff;">true</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#93;</span>.<span style="color: #007788;">v1</span><span style="color: #008080;">;</span>
	BB.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>Ay<span style="color: #008000;">&#91;</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>BB.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>BS_inc<span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span>MAXB,<span style="color: #0000dd;">0</span>,<span style="color: #0000ff;">false</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">v1</span><span style="color: #008080;">;</span>
	RB.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>Ax<span style="color: #008000;">&#91;</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>RB.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>BS_dec<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span>,MAXB,<span style="color: #0000ff;">true</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>  <span style="color: #008000;">&#93;</span>.<span style="color: #007788;">v1</span><span style="color: #008080;">;</span>
	TB.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>Ay<span style="color: #008000;">&#91;</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>TB.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>BS_dec<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span>,MAXB,<span style="color: #0000ff;">false</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#93;</span>.<span style="color: #007788;">v1</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">double</span> FP<span style="color: #008000;">&#40;</span>point p1,point p2<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span>p1.<span style="color: #007788;">x</span> <span style="color: #000040;">*</span> p2.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #008000;">&#40;</span>p2.<span style="color: #007788;">x</span> <span style="color: #000040;">*</span> p1.<span style="color: #007788;">y</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;">bool</span> online<span style="color: #008000;">&#40;</span>point p1,point p2,point p3,point p4<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	point r1,r2<span style="color: #008080;">;</span>
	r1.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>p1.<span style="color: #007788;">x</span><span style="color: #000040;">-</span>p2.<span style="color: #007788;">x</span><span style="color: #008080;">;</span> r1.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>p1.<span style="color: #007788;">y</span><span style="color: #000040;">-</span>p2.<span style="color: #007788;">y</span><span style="color: #008080;">;</span>
	r2.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>p3.<span style="color: #007788;">x</span><span style="color: #000040;">-</span>p4.<span style="color: #007788;">x</span><span style="color: #008080;">;</span> r2.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>p3.<span style="color: #007788;">y</span><span style="color: #000040;">-</span>p4.<span style="color: #007788;">y</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">fabs</span><span style="color: #008000;">&#40;</span>FP<span style="color: #008000;">&#40;</span>r1,r2<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">&lt;</span>zero<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">bool</span> check<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> p,<span style="color: #0000ff;">int</span> m<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	point p1,p2,r1,r2<span style="color: #008080;">;</span>
	ask A<span style="color: #008080;">;</span>
	r1.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>p<span style="color: #008080;">;</span> r2.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>p<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	A<span style="color: #000080;">=</span>Ask<span style="color: #008000;">&#40;</span>p,<span style="color: #0000ff;">true</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	r1.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>opt<span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">v1</span>,A.<span style="color: #007788;">v2</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	A<span style="color: #000080;">=</span>Ask<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,<span style="color: #0000ff;">true</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	r2.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>opt<span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">v1</span>,A.<span style="color: #007788;">v2</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	p1.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>m<span style="color: #008080;">;</span> p2.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>m<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	A<span style="color: #000080;">=</span>Ask<span style="color: #008000;">&#40;</span>m,<span style="color: #0000ff;">true</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	p1.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>opt<span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">v1</span>,A.<span style="color: #007788;">v2</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	A<span style="color: #000080;">=</span>Ask<span style="color: #008000;">&#40;</span>m<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,<span style="color: #0000ff;">true</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	p2.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>opt<span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">v1</span>,A.<span style="color: #007788;">v2</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #000040;">!</span>online<span style="color: #008000;">&#40;</span>r1,r2,p1,p2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">int</span> BS<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b,<span style="color: #0000ff;">int</span> p<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> m<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>a<span style="color: #000080;">&gt;</span>b <span style="color: #000040;">||</span> <span style="color: #000040;">!</span>check<span style="color: #008000;">&#40;</span>p,b<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span> MAXB<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>a<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&lt;</span>b<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		m<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>a<span style="color: #000040;">+</span>b<span style="color: #008000;">&#41;</span><span style="color: #000080;">&gt;&gt;</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>check<span style="color: #008000;">&#40;</span>p,m<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			b<span style="color: #000080;">=</span>m<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span>
			a<span style="color: #000080;">=</span>m<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: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>check<span style="color: #008000;">&#40;</span>p,a<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
		b<span style="color: #000080;">=</span>a<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> b<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> Vertex<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> x,x1<span style="color: #008080;">;</span>
	V<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>N<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>LB<span style="color: #008080;">;</span>
	opt<span style="color: #000080;">=</span>min<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>x<span style="color: #000080;">=</span>LB.<span style="color: #007788;">x</span><span style="color: #008080;">;</span>x<span style="color: #000080;">&lt;</span>BB.<span style="color: #007788;">x</span><span style="color: #008080;">;</span>x<span style="color: #000080;">=</span>x1<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		x1<span style="color: #000080;">=</span>BS<span style="color: #008000;">&#40;</span>x<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,BB.<span style="color: #007788;">x</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,x<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>x1<span style="color: #000080;">==</span>MAXB<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
		V<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>N<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>x1<span style="color: #008080;">;</span>
		V<span style="color: #008000;">&#91;</span>N<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>opt<span style="color: #008000;">&#40;</span>Ax<span style="color: #008000;">&#91;</span>x1<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">v1</span>,Ax<span style="color: #008000;">&#91;</span>x1<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">v2</span><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>BB.<span style="color: #007788;">x</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>LB.<span style="color: #007788;">x</span> <span style="color: #000040;">||</span> BB.<span style="color: #007788;">y</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>LB.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span>
		V<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>N<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>BB<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>x<span style="color: #000080;">=</span>BB.<span style="color: #007788;">x</span><span style="color: #008080;">;</span>x<span style="color: #000080;">&lt;</span>RB.<span style="color: #007788;">x</span><span style="color: #008080;">;</span>x<span style="color: #000080;">=</span>x1<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		x1<span style="color: #000080;">=</span>BS<span style="color: #008000;">&#40;</span>x<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,RB.<span style="color: #007788;">x</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,x<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>x1<span style="color: #000080;">==</span>MAXB<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
		V<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>N<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>x1<span style="color: #008080;">;</span>
		V<span style="color: #008000;">&#91;</span>N<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>opt<span style="color: #008000;">&#40;</span>Ax<span style="color: #008000;">&#91;</span>x1<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">v1</span>,Ax<span style="color: #008000;">&#91;</span>x1<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">v2</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	opt<span style="color: #000080;">=</span>max<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>x<span style="color: #000080;">=</span>LB.<span style="color: #007788;">x</span><span style="color: #008080;">;</span>x<span style="color: #000080;">&lt;</span>TB.<span style="color: #007788;">x</span><span style="color: #008080;">;</span>x<span style="color: #000080;">=</span>x1<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		x1<span style="color: #000080;">=</span>BS<span style="color: #008000;">&#40;</span>x<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,TB.<span style="color: #007788;">x</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,x<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>x1<span style="color: #000080;">==</span>MAXB<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
		V2<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>N2<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>x1<span style="color: #008080;">;</span>
		V2<span style="color: #008000;">&#91;</span>N2<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>opt<span style="color: #008000;">&#40;</span>Ax<span style="color: #008000;">&#91;</span>x1<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">v1</span>,Ax<span style="color: #008000;">&#91;</span>x1<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">v2</span><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>TB.<span style="color: #007788;">x</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>LB.<span style="color: #007788;">x</span> <span style="color: #000040;">||</span> TB.<span style="color: #007788;">y</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>LB.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span>
		V2<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>N2<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>TB<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>x<span style="color: #000080;">=</span>TB.<span style="color: #007788;">x</span><span style="color: #008080;">;</span>x<span style="color: #000080;">&lt;</span>RB.<span style="color: #007788;">x</span><span style="color: #008080;">;</span>x<span style="color: #000080;">=</span>x1<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		x1<span style="color: #000080;">=</span>BS<span style="color: #008000;">&#40;</span>x<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,RB.<span style="color: #007788;">x</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,x<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>x1<span style="color: #000080;">==</span>MAXB<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
		V2<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>N2<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span><span style="color: #000080;">=</span>x1<span style="color: #008080;">;</span>
		V2<span style="color: #008000;">&#91;</span>N2<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</span><span style="color: #000080;">=</span>opt<span style="color: #008000;">&#40;</span>Ax<span style="color: #008000;">&#91;</span>x1<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">v1</span>,Ax<span style="color: #008000;">&#91;</span>x1<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">v2</span><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><span style="color: #008000;">&#40;</span>BB.<span style="color: #007788;">x</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>RB.<span style="color: #007788;">x</span> <span style="color: #000040;">||</span> BB.<span style="color: #007788;">y</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>RB.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">&amp;&amp;</span><span style="color: #008000;">&#40;</span>TB.<span style="color: #007788;">x</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>RB.<span style="color: #007788;">x</span> <span style="color: #000040;">||</span> TB.<span style="color: #007788;">y</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>RB.<span style="color: #007788;">y</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
		V2<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>N2<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>RB<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #008080;">;</span>N2<span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>N2<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span>
		V<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>N<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>V2<span style="color: #008000;">&#91;</span>N2<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<span style="color: #0000ff;">void</span> Square<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: #0000ff;">double</span> S<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span>,k<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>
		k<span style="color: #000080;">=</span>FP<span style="color: #008000;">&#40;</span>V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>,V<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: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> k<span style="color: #000080;">=</span><span style="color: #000040;">-</span>k<span style="color: #008080;">;</span>
		S<span style="color: #000040;">+</span><span style="color: #000080;">=</span>k<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	k<span style="color: #000080;">=</span>FP<span style="color: #008000;">&#40;</span>V<span style="color: #008000;">&#91;</span>N<span style="color: #008000;">&#93;</span>,V<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: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span> k<span style="color: #000080;">=</span><span style="color: #000040;">-</span>k<span style="color: #008080;">;</span>
	S<span style="color: #000040;">+</span><span style="color: #000080;">=</span>k<span style="color: #008080;">;</span>
	S<span style="color: #000040;">/</span><span style="color: #000080;">=</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
	ret_area<span style="color: #008000;">&#40;</span>S<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>
	Boundary<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Vertex<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Square<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	ret_n<span style="color: #008000;">&#40;</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><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>
		ret_vertex<span style="color: #008000;">&#40;</span>V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x</span>,V<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y</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: #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>【问题描述】</p>
<p>A国最近检测到了B国内有不正常的辐射，经调查发现，这是因为B国正在耗资百亿研制新式武器——连环阵。可是，由于B国对此武器的高度保密 措施，A国的间谍甚至无法确定出连环阵的具体位置。不过，A国的卫星还是可以找出连环阵所在的基地的。我们现在知道该基地是一个边上含有放射性物质的凸多 边形。经研究发现，在这个凸多边形所在的平面内，它具有如下性质：</p>
<ul>
<li>包含坐标原点；</li>
<li>任意两条边不在同一直线上；</li>
<li>没有和x轴或y轴平行的边；</li>
<li>所有顶点的x坐标和y坐标都是整数。</li>
</ul>
<p>现在A国可以通过卫星发出无限大的扇形探测波，与该凸多边形所在平面交于一条直线。不过该直线不是与x轴平行，就是与y轴平行。通过反射信号，我们可以确定该直线与凸多边形的交点个数和所有交点的坐标（如果有的话）。</p>
<p>现在，需要你写一个程序，通过控制卫星发出的探测波来确定这个凸多边形。</p>
<p>【交互方法】</p>
<p>本题是一道交互式题目，你的程序应当和测试库进行交互，而不得访问任何文件。测试库提供3组函数，分别用于程序的初始化，与测试库的交互，以及返回结果。它们的用法与作用如下：</p>
<ul>
<li>prog_initialize必须先调用，但只能调用一次，用作初始化测试库；</li>
</ul>
<ul>
<li>测试库提供两个函数ask_x和ask_y作为与测试库交互的方式。其中ask_x(x0, y1, y2)的的作用是询问直线x=x0和多边形的交点，ask_y(y0, x1, x2)的作用是询问直线y=y0与多边形的交点，函数的返回值是交点的个数。ask_x(x0, y1, y2)调用后，y1和y2被赋值为交点的y坐标；ask_y(y0, x1, x2)调用后，x1和x2被赋值为交点的x坐标。如果只有一个交点，那么x1和x2或y1和y2的值相同；如果没有交点，那么x1和x2或y1和y2的值 没有意义。</li>
</ul>
<ul>
<li>最后的一组函数是你的程序用来向测试库返回结果的。这里包括返回多边形面积的ret_area(s)，返回多边形顶点数目的 ret_n(n)，返回多边形顶点坐标的ret_vertex(x, y)。需要注意的事，这里ret_area是必须先于ret_n调用的，而ret_n又是必须先于ret_vertex调用的。不合适的调用方式将会强制 你的程序非法退出。这里你需要在调用ret_n后调用n次ret_vertex返回多边形的顶点，但需要注意的是，如果你用ret_n返回的结果是错误 的，那么测试库将会马上终止你的程序，并不接受下面的结果；同样的，如果ret_vertex中返回了错误的结果，那么测试库也会马上终止你的程序。如果 ret_vertex的结果均是正确的，那么测试库将会在你返回最后一个顶点坐标后终止你的程序。</li>
</ul>
<ul>
<li>注意：你需要按照逆时针顺序返回所有顶点的坐标，不过你可以从任意一个顶点开始。</li>
</ul>
<p>【对使用Pascal选手的提示】</p>
<p>你的程序应当使用如下的语句引用测试库。</p>
<pre>uses detect_lib;</pre>
<p>测试库使用的函数原型为：</p>
<pre>procedure prog_initialize;
function ask_x(const x0: longint; var y1, y2: double): longint;
function ask_y(const y0: longint; var x1, x2: double): longint;
procedure ret_area(const s: double);
procedure ret_n(const n: longint);
procedure ret_vertex(const x, y:longint);</pre>
<p>【对使用C/C++选手的提示】</p>
<p>你应当建立一个工程，把文件libdetect.o包含进来，然后在程序头加上一行：</p>
<pre>#include “detect_lib.h”</pre>
<p>测试库使用的函数原型为：</p>
<pre>void prog_initialize();
int ask_x(int x0, double *y1, double *y2);
int ask_y(int y0, double *x1, double *x2);
void ret_area(double s);
void ret_n(int n);
void ret_vertex(int x, int y);</pre>
<p>【数据说明】</p>
<p>如果凸多边形的坐标如图所示，那么一种可能得满分的调用方案如下：</p>
<p><a class="image" title="Image:Detect1.gif" href="http://www.ruvtex.cn/wiki/Image:Detect1.gif"><img longdesc="/wiki/Image:Detect1.gif" src="http://www.ruvtex.cn/mw/images/f/fb/Detect1.gif" alt="Image:Detect1.gif" width="341" height="304" /></a></p>
<table class="MsoNormalTable" style="border: medium none; width: 428.4pt; border-collapse: collapse;" border="1" cellspacing="0" cellpadding="0" width="571">
<tbody>
<tr>
<td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 122.4pt;" width="163">
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;" lang="EN-US">Pascal</span><span style="font-family: 宋体;">选手的调用方法</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 135pt; border: 1pt 1pt 1pt medium solid solid solid none windowtext windowtext windowtext -moz-use-text-color;" width="180">
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;" lang="EN-US">C/C++</span><span style="font-family: 宋体;">选手的调用方法</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 171pt; border: 1pt 1pt 1pt medium solid solid solid none windowtext windowtext windowtext -moz-use-text-color;" width="228">
<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: 宋体;">说明</span></p>
</td>
</tr>
<tr>
<td style="padding: 0cm 5.4pt; width: 122.4pt; border: medium 1pt 1pt none solid solid -moz-use-text-color windowtext windowtext;" width="163">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">Prog_initialize;</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 135pt; border: medium 1pt 1pt medium none solid solid none -moz-use-text-color windowtext windowtext -moz-use-text-color;" width="180">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">prog_initialize();</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 171pt; border: medium 1pt 1pt medium none solid solid none -moz-use-text-color windowtext windowtext -moz-use-text-color;" width="228">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: 宋体;">初始化程序</span></p>
</td>
</tr>
<tr>
<td style="padding: 0cm 5.4pt; width: 122.4pt; border: medium 1pt 1pt none solid solid -moz-use-text-color windowtext windowtext;" width="163">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">ask_x(-6, y1, y2);</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 135pt; border: medium 1pt 1pt medium none solid solid none -moz-use-text-color windowtext windowtext -moz-use-text-color;" width="180">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">ask_x(-6, &amp;y1,   &amp;y2);</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 171pt; border: medium 1pt 1pt medium none solid solid none -moz-use-text-color windowtext windowtext -moz-use-text-color;" width="228">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: 宋体;">返回值</span><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">1</span><span style="font-family: 宋体;">，</span><em><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">y<sub>1</sub>=2</span></em><span style="font-family: 宋体;">，</span><em><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">y<sub>2</sub>=2</span></em></p>
</td>
</tr>
<tr>
<td style="padding: 0cm 5.4pt; width: 122.4pt; border: medium 1pt 1pt none solid solid -moz-use-text-color windowtext windowtext;" width="163">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">ask_x(-5, y1, y2);</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 135pt; border: medium 1pt 1pt medium none solid solid none -moz-use-text-color windowtext windowtext -moz-use-text-color;" width="180">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">ask_x(-5, &amp;y1,   &amp;y2);</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 171pt; border: medium 1pt 1pt medium none solid solid none -moz-use-text-color windowtext windowtext -moz-use-text-color;" width="228">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: 宋体;">返回值</span><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">2</span><span style="font-family: 宋体;">，</span><em><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">y<sub>1</sub>=3.4</span></em><span style="font-family: 宋体;">，</span><em><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">y<sub>2</sub>=-5</span></em></p>
</td>
</tr>
<tr>
<td style="padding: 0cm 5.4pt; width: 122.4pt; border: medium 1pt 1pt none solid solid -moz-use-text-color windowtext windowtext;" width="163">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">ask_y(2, x1, x2);</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 135pt; border: medium 1pt 1pt medium none solid solid none -moz-use-text-color windowtext windowtext -moz-use-text-color;" width="180">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">ask_y(2, &amp;x1,   &amp;x2);</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 171pt; border: medium 1pt 1pt medium none solid solid none -moz-use-text-color windowtext windowtext -moz-use-text-color;" width="228">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: 宋体;">返回值</span><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">2</span><span style="font-family: 宋体;">，</span><em><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">x<sub>1</sub>=-6</span></em><span style="font-family: 宋体;">，</span><em><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">x<sub>2</sub>=16</span></em></p>
</td>
</tr>
<tr>
<td style="padding: 0cm 5.4pt; width: 122.4pt; border: medium 1pt 1pt none solid solid -moz-use-text-color windowtext windowtext;" width="163">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">ask_y(-20, x1, x2)</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 135pt; border: medium 1pt 1pt medium none solid solid none -moz-use-text-color windowtext windowtext -moz-use-text-color;" width="180">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">ask_y(-20, &amp;x1,   &amp;x2)</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 171pt; border: medium 1pt 1pt medium none solid solid none -moz-use-text-color windowtext windowtext -moz-use-text-color;" width="228">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: 宋体;">返回值</span><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">0</span><span style="font-family: 宋体;">，</span><em><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">x<sub>1</sub></span></em><span style="font-family: 宋体;">、</span><em><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">x<sub>2</sub></span></em><span style="font-family: 宋体;">中的值无意义</span></p>
</td>
</tr>
<tr>
<td style="padding: 0cm 5.4pt; width: 122.4pt; border: medium 1pt 1pt none solid solid -moz-use-text-color windowtext windowtext;" width="163">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">ret_area(241.5);</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 135pt; border: medium 1pt 1pt medium none solid solid none -moz-use-text-color windowtext windowtext -moz-use-text-color;" width="180">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">ret_area(241.5);</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 171pt; border: medium 1pt 1pt medium none solid solid none -moz-use-text-color windowtext windowtext -moz-use-text-color;" width="228">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: 宋体;">返回面积</span></p>
</td>
</tr>
<tr>
<td style="padding: 0cm 5.4pt; width: 122.4pt; border: medium 1pt 1pt none solid solid -moz-use-text-color windowtext windowtext;" width="163">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">ret_n(5);</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 135pt; border: medium 1pt 1pt medium none solid solid none -moz-use-text-color windowtext windowtext -moz-use-text-color;" width="180">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">ret_n(5);</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 171pt; border: medium 1pt 1pt medium none solid solid none -moz-use-text-color windowtext windowtext -moz-use-text-color;" width="228">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: 宋体;">返回</span><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">n</span></p>
</td>
</tr>
<tr>
<td style="padding: 0cm 5.4pt; width: 122.4pt; border: medium 1pt 1pt none solid solid -moz-use-text-color windowtext windowtext;" width="163">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">ret_vertex(8, -9);</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 135pt; border: medium 1pt 1pt medium none solid solid none -moz-use-text-color windowtext windowtext -moz-use-text-color;" width="180">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">ret_vertex(8, -9);</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 171pt; border: medium 1pt 1pt medium none solid solid none -moz-use-text-color windowtext windowtext -moz-use-text-color;" width="228">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: 宋体;">返回顶点</span><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">(8,   -9)</span></p>
</td>
</tr>
<tr>
<td style="padding: 0cm 5.4pt; width: 122.4pt; border: medium 1pt 1pt none solid solid -moz-use-text-color windowtext windowtext;" width="163">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">ret_vertex(16, 2);</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 135pt; border: medium 1pt 1pt medium none solid solid none -moz-use-text-color windowtext windowtext -moz-use-text-color;" width="180">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">ret_vertex(16, 2);</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 171pt; border: medium 1pt 1pt medium none solid solid none -moz-use-text-color windowtext windowtext -moz-use-text-color;" width="228">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: 宋体;">返回顶点</span><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">(16,   2)</span></p>
</td>
</tr>
<tr>
<td style="padding: 0cm 5.4pt; width: 122.4pt; border: medium 1pt 1pt none solid solid -moz-use-text-color windowtext windowtext;" width="163">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">ret_vertex(-1, 9);</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 135pt; border: medium 1pt 1pt medium none solid solid none -moz-use-text-color windowtext windowtext -moz-use-text-color;" width="180">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">ret_vertex(-1, 9);</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 171pt; border: medium 1pt 1pt medium none solid solid none -moz-use-text-color windowtext windowtext -moz-use-text-color;" width="228">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: 宋体;">返回顶点</span><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">(-1,   9)</span></p>
</td>
</tr>
<tr>
<td style="padding: 0cm 5.4pt; width: 122.4pt; border: medium 1pt 1pt none solid solid -moz-use-text-color windowtext windowtext;" width="163">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">ret_vertex(-6, 2);</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 135pt; border: medium 1pt 1pt medium none solid solid none -moz-use-text-color windowtext windowtext -moz-use-text-color;" width="180">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">ret_vertex(-6, 2);</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 171pt; border: medium 1pt 1pt medium none solid solid none -moz-use-text-color windowtext windowtext -moz-use-text-color;" width="228">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: 宋体;">返回顶点</span><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">(-6,   2)</span></p>
</td>
</tr>
<tr>
<td style="padding: 0cm 5.4pt; width: 122.4pt; border: medium 1pt 1pt none solid solid -moz-use-text-color windowtext windowtext;" width="163">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">ret_vertex(-5, -5);</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 135pt; border: medium 1pt 1pt medium none solid solid none -moz-use-text-color windowtext windowtext -moz-use-text-color;" width="180">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">ret_vertex(-5, -5);</span></p>
</td>
<td style="padding: 0cm 5.4pt; width: 171pt; border: medium 1pt 1pt medium none solid solid none -moz-use-text-color windowtext windowtext -moz-use-text-color;" width="228">
<p class="MsoNormal" style="margin-bottom: 2pt; text-align: left;" align="left"><span style="font-family: 宋体;">返回顶点</span><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;;" lang="EN-US">(-5,   -5)</span></p>
</td>
</tr>
</tbody>
</table>
<p>注意，该例子只是对库函数的使用说明，并没有算法上的意义。</p>
<p>这里n最大为200，x、y坐标在[-10000, 10000]这个区间内。</p>
<p>【评分方法】</p>
<p>如果你的程序有下列情况之一，得0分：</p>
<ul>
<li>访问了任何文件(包括临时文件)或者自行终止；</li>
<li>非法调用库函数；</li>
<li>让测试库异常退出。</li>
</ul>
<p>否则每个测试点你的得分按这样来计算：包括顶点数提交正确的1分，面积提交正确的2分，顶点坐标完全正确的2分，分数累计。剩下的5分将根据你调用ask_x和ask_y的总次数进行评判，公式如下：</p>
<p><a class="image" title="Image:Detect2.gif" href="http://www.ruvtex.cn/wiki/Image:Detect2.gif"><img longdesc="/wiki/Image:Detect2.gif" src="http://www.ruvtex.cn/mw/images/5/58/Detect2.gif" alt="Image:Detect2.gif" width="289" height="104" /></a></p>
<p>这里x为你的程序调用的ask_x和ask_y的次数，score为你的得分。</p>
<p>【你如何测试自己的程序】</p>
<ul>
<li>在工作目录下建立一个文件叫做detect.in，文件的第一行包括一个整数n为顶点的数目，以下n行每行两个整数按照逆时针方向给出凸多边形的顶点坐标；</li>
<li>执行你的程序，此时测试库会产生输出文件detect.log，该文件中包括了你程序和库交互的记录和最后的结果；</li>
<li>如果程序正常结束，detect.log的最后一行会给出你的程序的分数；</li>
<li>如果程序非法退出，则我们不保证detect.log中的内容有意义。</li>
</ul>
</blockquote>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/wc2010-efield/" title="WC2010 能量场">WC2010 能量场</a></li><li><a href="http://www.byvoid.com/blog/noi-2009-path/" title="NOI 2009 描边">NOI 2009 描边</a></li><li><a href="http://www.byvoid.com/blog/noi-2003-jerrygen/" title="NOI 2003 数据生成器 (逃学的小孩)">NOI 2003 数据生成器 (逃学的小孩)</a></li><li><a href="http://www.byvoid.com/blog/noi-2003-game/" title="NOI 2003 木棒游戏">NOI 2003 木棒游戏</a></li><li><a href="http://www.byvoid.com/blog/noi-2002-child/" title="NOI 2002 调皮的小孩">NOI 2002 调皮的小孩</a></li><li><a href="http://www.byvoid.com/blog/noi-2003-editor/" title="NOI 2003 文本编辑器">NOI 2003 文本编辑器</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/noi-2003-detect/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NOI 1997 解题报告</title>
		<link>http://www.byvoid.com/blog/noi-1997-solution/</link>
		<comments>http://www.byvoid.com/blog/noi-1997-solution/#comments</comments>
		<pubDate>Sun, 15 Feb 2009 13:33:58 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[NOI]]></category>
		<category><![CDATA[1997]]></category>
		<category><![CDATA[优化]]></category>
		<category><![CDATA[剪枝]]></category>
		<category><![CDATA[动态规划]]></category>
		<category><![CDATA[图论]]></category>
		<category><![CDATA[搜索]]></category>
		<category><![CDATA[最短路径]]></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=866</guid>
		<description><![CDATA[我的计划就从NOI1997开始。NOI1997一共有6道题，分别是[卫星覆盖][积木游戏][竞赛排名][最佳游览][最优乘车][文件匹配]。这一年的6个题难易分布均衡，做完后收获不小。 其中[竞赛排名]和[最佳游... ]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.byvoid.com/blog/noi-plan/">我的计划</a>就从NOI1997开始。<strong>NOI1997</strong>一共有6道题，分别是[卫星覆盖][积木游戏][竞赛排名][最佳游览][最优乘车][文件匹配]。这一年的6个题难易分布均衡，做完后收获不小。</p>
<p>其中[竞赛排名]和[最佳游览]是两个最简单的题，但是往往细节是容易忽视的。[积木游戏]和[最优乘车]难度属于中等，分别是动态规划和构造最短路径解题。[卫星覆盖]和[文件匹配]属于较难题，用到了[卫星覆盖]离散化或者立体切割的方法，而[文件匹配]是搜索中的难题，需要很多的优化。</p>
<p>做这些题我花了4天的时间，进度还算正常，希望能继续保持下去。今后做题的宗旨是“不求多，不求快，但求精”。</p>
<p><span id="more-866"></span></p>
<p><strong>[最佳游览]</strong></p>
<p>这是一道非常简单的题，读懂题后，发现方法就是统计出每一列的最大值，存为一个数列A。求A的连续最大子序列即可。</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('p866code15'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p86615"><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
</pre></td><td class="code" id="p866code15"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI1997 perfecttour
 * Author: Guo Jiabao
 * Time: 2009.2.14 14:01
 * 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;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">20001</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> M,N,i,j,t,T,Ans<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> A<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</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: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;perfecttour.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;perfecttour.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>M,<span style="color: #000040;">&amp;</span>N<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	N<span style="color: #000040;">--</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>N<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		A<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">-</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>M<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</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>N<span style="color: #008080;">;</span>j<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&quot;</span>,<span style="color: #000040;">&amp;</span>t<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>t<span style="color: #000080;">&gt;</span>A<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
				A<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>t<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>,T<span style="color: #000080;">=</span><span style="color: #0000dd;">0</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>
		T<span style="color: #000040;">+</span><span style="color: #000080;">=</span>A<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>T<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
			T<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>T<span style="color: #000080;">&gt;</span>Ans<span style="color: #008000;">&#41;</span>
			Ans<span style="color: #000080;">=</span>T<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</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: #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>

<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('p866code16'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p86616"><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
</pre></td><td class="code" id="p866code16"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI1997 competitionsort
 * Author: Guo Jiabao
 * Time: 2009.2.13 14:09
 * 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;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cstring&gt;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">1001</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> sum<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,S<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">9</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">double</span> avg<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">9</span><span style="color: #008000;">&#93;</span>,pos<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span>,y<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">9</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> inf<span style="color: #008000;">&#123;</span><span style="color: #0000ff;">int</span> id,sum<span style="color: #008080;">;</span><span style="color: #0000ff;">double</span> pos<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span> P<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<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;competitionsort.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;competitionsort.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>
	<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: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</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><span style="color: #0000dd;">8</span><span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</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>S<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;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">double</span> ABS<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</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>
&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;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>inf <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>pos <span style="color: #000080;">&gt;</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>inf <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>pos<span style="color: #008000;">&#41;</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: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>inf <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>pos <span style="color: #000080;">&lt;</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>inf <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>pos<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>inf <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>sum <span style="color: #000080;">&gt;</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>inf <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>sum<span style="color: #008000;">&#41;</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: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>inf <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>sum <span style="color: #000080;">&lt;</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>inf <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>sum<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>inf <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>id <span style="color: #000080;">&lt;</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>inf <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>id<span style="color: #008000;">&#41;</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: #0000ff;">return</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> statistics<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;">double</span> m<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">8</span><span style="color: #008000;">&#93;</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><span style="color: #0000dd;">8</span><span style="color: #008080;">;</span>j<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>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>
			avg<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span><span style="color: #000080;">=</span>S<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: #008080;">;</span>
			sum<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span><span style="color: #000080;">=</span>S<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: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		avg<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000040;">/</span><span style="color: #000080;">=</span>N<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</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><span style="color: #0000dd;">8</span><span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		m<span style="color: #008000;">&#91;</span>j<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>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>
			m<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span><span style="color: #000080;">=</span>ABS<span style="color: #008000;">&#40;</span>S<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: #000040;">-</span>avg<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		m<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000040;">/</span><span style="color: #000080;">=</span>N<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>
		<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><span style="color: #0000dd;">8</span><span style="color: #008080;">;</span>j<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>m<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
				y<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: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">else</span>
				y<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: #000080;">=</span><span style="color: #008000;">&#40;</span>S<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: #000040;">-</span>avg<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">/</span>m<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</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><span style="color: #0000dd;">3</span><span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			pos<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span><span style="color: #000080;">=</span>y<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: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">4</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span><span style="color: #0000dd;">8</span><span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			pos<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span><span style="color: #000080;">=</span>y<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: #000040;">*</span><span style="color:#800080;">0.8</span><span style="color: #008080;">;</span>
		P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">pos</span><span style="color: #000080;">=</span>pos<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sum</span><span style="color: #000080;">=</span>sum<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">id</span><span style="color: #000080;">=</span>i<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: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%dn&quot;</span>,P<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">id</span><span style="color: #008000;">&#41;</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>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	statistics<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>由于把积木分成M堆，每堆中积木的编号都是严格划分的，可以看作把积木按编号顺序划分为M份。可以动态规划，状态转移时只需考虑第i个放置相邻两对的决策。</p>
<p>设定F[i,j,k]表示放置第i个积木时，把它放在第j堆，用第k种方式放置的总最大高度。</p>
<p>第k种放置方式(0&lt;=k&lt;=2)，分别表示了用积木的哪一面作为底。</p>
<p>状态转移方程</p>
<ul>
<li>F[i,j,k]=Max{ F[a,j,b]|(i,k)能放置在(a,b)上 ,F[a,j-1,b] (0&lt;=a&lt;=i-1,0&lt;=b&lt;=2) } + height(i,k)</li>
</ul>
<ul>
<li>height(i,k)为第i个积木以方式k放置的高。</li>
</ul>
<p>初始条件为</p>
<ul>
<li>F[i,j,k]=负无穷大;(0&lt;=i&lt;=N,0&lt;=j&lt;=M,0&lt;=k&lt;=2)</li>
<li>F[0,0,0]=0;</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('p866code17'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p86617"><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
</pre></td><td class="code" id="p866code17"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI1997 buildinggame
 * Author: Guo Jiabao
 * Time: 2009.2.12 13:53
 * 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;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;">const</span> <span style="color: #0000ff;">int</span> MAX<span style="color: #000080;">=</span><span style="color: #0000dd;">101</span>,INF<span style="color: #000080;">=</span><span style="color: #208080;">0x7FFFFFFF</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> block<span style="color: #008000;">&#123;</span><span style="color: #0000ff;">int</span> a,b,c<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>B<span style="color: #008000;">&#91;</span>MAX<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> F<span style="color: #008000;">&#91;</span>MAX<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAX<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> N,M,Ans<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,k<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;buildinggame.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;buildinggame.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: #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>B<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">a</span>,<span style="color: #000040;">&amp;</span>B<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">b</span>,<span style="color: #000040;">&amp;</span>B<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">c</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;">0</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: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">0</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;">for</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>k<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">3</span><span style="color: #008080;">;</span>k<span style="color: #000040;">++</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><span style="color: #000040;">-</span>INF<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: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> block roll<span style="color: #008000;">&#40;</span>block A,<span style="color: #0000ff;">int</span> k<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> t<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">==</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>t<span style="color: #000080;">=</span>A.<span style="color: #007788;">b</span><span style="color: #008080;">;</span>A.<span style="color: #007788;">b</span><span style="color: #000080;">=</span>A.<span style="color: #007788;">c</span><span style="color: #008080;">;</span>A.<span style="color: #007788;">c</span><span style="color: #000080;">=</span>t<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">==</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>t<span style="color: #000080;">=</span>A.<span style="color: #007788;">a</span><span style="color: #008080;">;</span>A.<span style="color: #007788;">a</span><span style="color: #000080;">=</span>A.<span style="color: #007788;">b</span><span style="color: #008080;">;</span>A.<span style="color: #007788;">b</span><span style="color: #000080;">=</span>A.<span style="color: #007788;">c</span><span style="color: #008080;">;</span>A.<span style="color: #007788;">c</span><span style="color: #000080;">=</span>t<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> A<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">bool</span> available<span style="color: #008000;">&#40;</span>block A,<span style="color: #0000ff;">int</span> k1,block B,<span style="color: #0000ff;">int</span> k2<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	A<span style="color: #000080;">=</span>roll<span style="color: #008000;">&#40;</span>A,k1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>B<span style="color: #000080;">=</span>roll<span style="color: #008000;">&#40;</span>B,k2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span>B.<span style="color: #007788;">a</span><span style="color: #000080;">&gt;=</span>A.<span style="color: #007788;">a</span> <span style="color: #000040;">&amp;&amp;</span> B.<span style="color: #007788;">b</span><span style="color: #000080;">&gt;=</span>A.<span style="color: #007788;">b</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">||</span> <span style="color: #008000;">&#40;</span>B.<span style="color: #007788;">a</span><span style="color: #000080;">&gt;=</span>A.<span style="color: #007788;">b</span> <span style="color: #000040;">&amp;&amp;</span> B.<span style="color: #007788;">b</span><span style="color: #000080;">&gt;=</span>A.<span style="color: #007788;">a</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<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,a,b<span style="color: #008080;">;</span>
	block T<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: #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;">for</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>k<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">3</span><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;">for</span> <span style="color: #008000;">&#40;</span>a<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>a<span style="color: #000080;">&lt;</span>i<span style="color: #008080;">;</span>a<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
					<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>b<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>b<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">3</span><span style="color: #008080;">;</span>b<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>available<span style="color: #008000;">&#40;</span>B<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>,k,B<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>,b<span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;&amp;</span> F<span style="color: #008000;">&#91;</span>a<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>b<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</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: #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> F<span style="color: #008000;">&#91;</span>a<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>b<span style="color: #008000;">&#93;</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>a<span style="color: #008000;">&#93;</span><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: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</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: #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> F<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><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: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
					<span style="color: #008000;">&#125;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</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: #000040;">+</span><span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>T<span style="color: #000080;">=</span>roll<span style="color: #008000;">&#40;</span>B<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>,k<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>.<span style="color: #007788;">c</span><span style="color: #008000;">&#41;</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>
&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>
	init<span style="color: #008000;">&#40;</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: #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: #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>可以构造最短路径求解。对于不同线路上的相同编号的车站，应该看作不同的顶点，而且这两个点之间互相连接一条边权为1的有向边。同一条线路上的所有 车站，按照顺序连接边权为0的有向边。为了方便，我们增设一个超级源S和超级汇T。S向所有代表车站1的顶点连接一条边权为0的有向边，所有代表车站N的 顶点向T连接一条边权为0的有向边。</p>
<p>图构造好以后，只需求从S到T的最短路径即可。建议用SPFA，在这种特殊的01图上，SPFA会比Dijkstra(堆)快得多。</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('p866code18'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p86618"><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
</pre></td><td class="code" id="p866code18"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI1997 bustravel
 * Author: Guo Jiabao
 * Time: 2009.2.14 19:10
 * 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;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;">const</span> <span style="color: #0000ff;">int</span> MAXM<span style="color: #000080;">=</span><span style="color: #0000dd;">101</span>,MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">501</span>,INF<span style="color: #000080;">=</span><span style="color: #208080;">0x7FFFFFF</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> edge<span style="color: #008000;">&#123;</span>edge <span style="color: #000040;">*</span>next<span style="color: #008080;">;</span><span style="color: #0000ff;">int</span> t,v<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> adjl<span style="color: #008000;">&#123;</span>edge <span style="color: #000040;">*</span>f,<span style="color: #000040;">*</span>l<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> M,N,Total,Target,EC<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span>,Queue_cnt,Queue_head,Queue_tail<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> BusLine<span style="color: #008000;">&#91;</span>MAXM<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//第i行第j个点的原始编号</span>
<span style="color: #0000ff;">int</span> BusHash<span style="color: #008000;">&#91;</span>MAXM<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//第i行原始编号为j的点正式编号</span>
<span style="color: #0000ff;">int</span> sp<span style="color: #008000;">&#91;</span>MAXM<span style="color: #000040;">*</span>MAXN<span style="color: #008000;">&#93;</span>,Queue<span style="color: #008000;">&#91;</span>MAXM<span style="color: #000040;">*</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> inQueue<span style="color: #008000;">&#91;</span>MAXM<span style="color: #000040;">*</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
edge ES<span style="color: #008000;">&#91;</span>MAXM<span style="color: #000040;">*</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
adjl Adjl<span style="color: #008000;">&#91;</span>MAXM<span style="color: #000040;">*</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,k,c<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;bustravel.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;bustravel.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>M,<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>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: #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: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><span style="color: #008000;">&#40;</span>c<span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #0000dd;">10</span> <span style="color: #000040;">&amp;&amp;</span> c<span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #0000dd;">13</span> <span style="color: #000040;">&amp;&amp;</span> c<span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #0000ff;">EOF</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</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>
			<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>k<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			BusLine<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>k<span style="color: #008080;">;</span>
			BusHash<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: #000080;">=</span><span style="color: #000040;">++</span>Total<span style="color: #008080;">;</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: #008000;">&#125;</span>
		BusLine<span style="color: #008000;">&#91;</span>i<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: #000080;">=</span>j<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	Target<span style="color: #000080;">=</span><span style="color: #000040;">++</span>Total<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> addedge<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b,<span style="color: #0000ff;">int</span> v<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	edge <span style="color: #000040;">*</span>p<span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>ES<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>EC<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Adjl<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">l</span><span style="color: #008000;">&#41;</span>
		Adjl<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">l</span><span style="color: #000080;">=</span>Adjl<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">l</span><span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span>
		Adjl<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">f</span><span style="color: #000080;">=</span>Adjl<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">l</span><span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #000080;">=</span>b<span style="color: #008080;">;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #000080;">=</span>v<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> makegraph<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,p,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: #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>BusLine<span style="color: #008000;">&#91;</span>i<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: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			a<span style="color: #000080;">=</span>BusHash<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span> BusLine<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;">&#93;</span><span style="color: #008080;">;</span>
			b<span style="color: #000080;">=</span>BusHash<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span> BusLine<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><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: #008000;">&#93;</span><span style="color: #008080;">;</span>
			addedge<span style="color: #008000;">&#40;</span>a,b,<span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>BusLine<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: #000080;">==</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
				addedge<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span>,a,<span style="color: #0000dd;">0</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>BusLine<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: #000080;">==</span>N<span style="color: #008000;">&#41;</span>
				addedge<span style="color: #008000;">&#40;</span>a,Target,<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;">if</span> <span style="color: #008000;">&#40;</span>BusLine<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: #000080;">==</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
			addedge<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span>,b,<span style="color: #0000dd;">0</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>BusLine<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: #000080;">==</span>N<span style="color: #008000;">&#41;</span>
			addedge<span style="color: #008000;">&#40;</span>b,Target,<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;">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: #000040;">-</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>
		<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>BusLine<span style="color: #008000;">&#91;</span>i<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: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			p<span style="color: #000080;">=</span>BusLine<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: #008080;">;</span>
			a<span style="color: #000080;">=</span>BusHash<span style="color: #008000;">&#91;</span>i<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: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">=</span>i<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>k<span style="color: #000080;">&lt;=</span>M<span style="color: #008080;">;</span>k<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				b<span style="color: #000080;">=</span>BusHash<span style="color: #008000;">&#91;</span>k<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: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>b<span style="color: #008000;">&#41;</span>
				<span style="color: #008000;">&#123;</span>
					addedge<span style="color: #008000;">&#40;</span>a,b,<span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
					addedge<span style="color: #008000;">&#40;</span>b,a,<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: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Queue_ins<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><span style="color: #000040;">++</span>Queue_head<span style="color: #000080;">==</span>MAXM<span style="color: #000040;">*</span>MAXN<span style="color: #008000;">&#41;</span> Queue_head<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	Queue<span style="color: #008000;">&#91;</span>Queue_head<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>
	inQueue<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>
	Queue_cnt<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> Queue_pop<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> p<span style="color: #000080;">=</span>Queue<span style="color: #008000;">&#91;</span>Queue_tail<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: #000040;">++</span>Queue_tail<span style="color: #000080;">==</span>MAXM<span style="color: #000040;">*</span>MAXN<span style="color: #008000;">&#41;</span> Queue_tail<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	inQueue<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>
	Queue_cnt<span style="color: #000040;">--</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> p<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> spfa<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,u,v<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>Total<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		sp<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>INF<span style="color: #008080;">;</span>
	Queue_head<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>Queue_tail<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	Queue_ins<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: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>Queue_cnt<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		u<span style="color: #000080;">=</span>Queue_pop<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>edge <span style="color: #000040;">*</span>k<span style="color: #000080;">=</span>Adjl<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">f</span><span style="color: #008080;">;</span>k<span style="color: #008080;">;</span>k<span style="color: #000080;">=</span>k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>next<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			v<span style="color: #000080;">=</span>k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>t<span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>sp<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v <span style="color: #000080;">&lt;</span> sp<span style="color: #008000;">&#91;</span>v<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				sp<span style="color: #008000;">&#91;</span>v<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>sp<span style="color: #008000;">&#91;</span>u<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> k<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>v<span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>inQueue<span style="color: #008000;">&#91;</span>v<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
					Queue_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: #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>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	makegraph<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	spfa<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>sp<span style="color: #008000;">&#91;</span>Target<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span>INF<span style="color: #008000;">&#41;</span>
		<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;NOn&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>,sp<span style="color: #008000;">&#91;</span>Target<span style="color: #008000;">&#93;</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>经典的分治问题，方法为立方体切割。和USACO中的<a href="http://www.byvoid.com/blog/usaco-314-shaping-regions/">Shaping Regions</a>的做法相似，只不过是从二维推广到了三维。</p>
<p>具体方法是，对于第i个立方体，判断大于i的每个立方体是否与之有公共部分，如果有公共部分，把该长方体非公共部分切割成几个规则的长方体，然后递归处理每一个长方体。直到没有公共部分了，体积就是长*宽*高。</p>
<p>对于两个矩形（每条边都平行于坐标轴），我们判断它们相交，有一种简单的方法。两个矩形A和B，定义(A.x1,A.y1)为A的左下角顶 点，(A.x2,A.y2)为A的右上角顶点，同理B，只要满足 A.x1 &lt; B.x2 且 A.y1 &lt; B.y2 且 B.x1 &lt; A.x2 且 B.y1 &lt; A.y2，则A、B一定相交。</p>
<p>相似地，对于两个长方体A、B，只要满足</p>
<pre>A.x1 &lt; B.x2 &amp;&amp; A.y1 &lt; B.y2 &amp;&amp; A.z1 &lt; B.z2 &amp;&amp; B.x1 &lt; A.x2 &amp;&amp; B.y1 &lt; A.y2 &amp;&amp; B.z1 &lt; A.z2</pre>
<p>则A、B相交。</p>
<p>上述方法的时间复杂度是O(N^3)，是很宽松的。</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('p866code19'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p86619"><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
</pre></td><td class="code" id="p866code19"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI1997 satellitecover
 * Author: Guo Jiabao
 * Time: 2009.2.11 21:17
 * 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;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;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">201</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> cube<span style="color: #008000;">&#123;</span><span style="color: #0000ff;">int</span> x1,y1,z1,x2,y2,z2<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> N<span style="color: #008080;">;</span>
cube Cubes<span style="color: #008000;">&#91;</span>MAXN<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: #0000ff;">int</span> i,a,b,c,r<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;satellitecover.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;satellitecover.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>
	<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&quot;</span>,<span style="color: #000040;">&amp;</span>a,<span style="color: #000040;">&amp;</span>b,<span style="color: #000040;">&amp;</span>c,<span style="color: #000040;">&amp;</span>r<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		Cubes<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x1</span><span style="color: #000080;">=</span>a<span style="color: #000040;">-</span>r<span style="color: #008080;">;</span> Cubes<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y1</span><span style="color: #000080;">=</span>b<span style="color: #000040;">-</span>r<span style="color: #008080;">;</span> Cubes<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">z1</span><span style="color: #000080;">=</span>c<span style="color: #000040;">-</span>r<span style="color: #008080;">;</span>
		Cubes<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">x2</span><span style="color: #000080;">=</span>a<span style="color: #000040;">+</span>r<span style="color: #008080;">;</span> Cubes<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">y2</span><span style="color: #000080;">=</span>b<span style="color: #000040;">+</span>r<span style="color: #008080;">;</span> Cubes<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">z2</span><span style="color: #000080;">=</span>c<span style="color: #000040;">+</span>r<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">bool</span> cross<span style="color: #008000;">&#40;</span>cube A,cube B<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> A.<span style="color: #007788;">x1</span> <span style="color: #000080;">&lt;</span> B.<span style="color: #007788;">x2</span> <span style="color: #000040;">&amp;&amp;</span> A.<span style="color: #007788;">y1</span> <span style="color: #000080;">&lt;</span> B.<span style="color: #007788;">y2</span> <span style="color: #000040;">&amp;&amp;</span> A.<span style="color: #007788;">z1</span> <span style="color: #000080;">&lt;</span> B.<span style="color: #007788;">z2</span> <span style="color: #000040;">&amp;&amp;</span> B.<span style="color: #007788;">x1</span> <span style="color: #000080;">&lt;</span> A.<span style="color: #007788;">x2</span> <span style="color: #000040;">&amp;&amp;</span> B.<span style="color: #007788;">y1</span> <span style="color: #000080;">&lt;</span> A.<span style="color: #007788;">y2</span> <span style="color: #000040;">&amp;&amp;</span> B.<span style="color: #007788;">z1</span> <span style="color: #000080;">&lt;</span> A.<span style="color: #007788;">z2</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
cube mcube<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> x1,<span style="color: #0000ff;">int</span> y1,<span style="color: #0000ff;">int</span> z1,<span style="color: #0000ff;">int</span> x2,<span style="color: #0000ff;">int</span> y2,<span style="color: #0000ff;">int</span> z2<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	cube A<span style="color: #008080;">;</span>
	A.<span style="color: #007788;">x1</span><span style="color: #000080;">=</span>x1<span style="color: #008080;">;</span>A.<span style="color: #007788;">y1</span><span style="color: #000080;">=</span>y1<span style="color: #008080;">;</span>A.<span style="color: #007788;">z1</span><span style="color: #000080;">=</span>z1<span style="color: #008080;">;</span>A.<span style="color: #007788;">x2</span><span style="color: #000080;">=</span>x2<span style="color: #008080;">;</span>A.<span style="color: #007788;">y2</span><span style="color: #000080;">=</span>y2<span style="color: #008080;">;</span>A.<span style="color: #007788;">z2</span><span style="color: #000080;">=</span>z2<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> A<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> devide<span style="color: #008000;">&#40;</span>cube A,<span style="color: #0000ff;">int</span> pos<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	cube B<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> volume<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>pos<span style="color: #000080;">&lt;=</span>N <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span>cross<span style="color: #008000;">&#40;</span>A,B<span style="color: #000080;">=</span>Cubes<span style="color: #008000;">&#91;</span>pos<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> pos<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>pos<span style="color: #000080;">&gt;</span>N<span style="color: #008000;">&#41;</span>
		volume<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">x2</span><span style="color: #000040;">-</span>A.<span style="color: #007788;">x1</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">y2</span><span style="color: #000040;">-</span>A.<span style="color: #007788;">y1</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">z2</span><span style="color: #000040;">-</span>A.<span style="color: #007788;">z1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</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>A.<span style="color: #007788;">x1</span> <span style="color: #000080;">&lt;</span> B.<span style="color: #007788;">x1</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			volume<span style="color: #000040;">+</span><span style="color: #000080;">=</span>devide<span style="color: #008000;">&#40;</span>mcube<span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">x1</span>,A.<span style="color: #007788;">y1</span>,A.<span style="color: #007788;">z1</span>,B.<span style="color: #007788;">x1</span>,A.<span style="color: #007788;">y2</span>,A.<span style="color: #007788;">z2</span><span style="color: #008000;">&#41;</span>,pos<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			A.<span style="color: #007788;">x1</span><span style="color: #000080;">=</span>B.<span style="color: #007788;">x1</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">x2</span> <span style="color: #000080;">&gt;</span> B.<span style="color: #007788;">x2</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			volume<span style="color: #000040;">+</span><span style="color: #000080;">=</span>devide<span style="color: #008000;">&#40;</span>mcube<span style="color: #008000;">&#40;</span>B.<span style="color: #007788;">x2</span>,A.<span style="color: #007788;">y1</span>,A.<span style="color: #007788;">z1</span>,A.<span style="color: #007788;">x2</span>,A.<span style="color: #007788;">y2</span>,A.<span style="color: #007788;">z2</span><span style="color: #008000;">&#41;</span>,pos<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			A.<span style="color: #007788;">x2</span><span style="color: #000080;">=</span>B.<span style="color: #007788;">x2</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">y1</span> <span style="color: #000080;">&lt;</span> B.<span style="color: #007788;">y1</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			volume<span style="color: #000040;">+</span><span style="color: #000080;">=</span>devide<span style="color: #008000;">&#40;</span>mcube<span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">x1</span>,A.<span style="color: #007788;">y1</span>,A.<span style="color: #007788;">z1</span>,A.<span style="color: #007788;">x2</span>,B.<span style="color: #007788;">y1</span>,A.<span style="color: #007788;">z2</span><span style="color: #008000;">&#41;</span>,pos<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			A.<span style="color: #007788;">y1</span><span style="color: #000080;">=</span>B.<span style="color: #007788;">y1</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">y2</span> <span style="color: #000080;">&gt;</span> B.<span style="color: #007788;">y2</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			volume<span style="color: #000040;">+</span><span style="color: #000080;">=</span>devide<span style="color: #008000;">&#40;</span>mcube<span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">x1</span>,B.<span style="color: #007788;">y2</span>,A.<span style="color: #007788;">z1</span>,A.<span style="color: #007788;">x2</span>,A.<span style="color: #007788;">y2</span>,A.<span style="color: #007788;">z2</span><span style="color: #008000;">&#41;</span>,pos<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			A.<span style="color: #007788;">y2</span><span style="color: #000080;">=</span>B.<span style="color: #007788;">y2</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">z1</span> <span style="color: #000080;">&lt;</span> B.<span style="color: #007788;">z1</span><span style="color: #008000;">&#41;</span>
			volume<span style="color: #000040;">+</span><span style="color: #000080;">=</span>devide<span style="color: #008000;">&#40;</span>mcube<span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">x1</span>,A.<span style="color: #007788;">y1</span>,A.<span style="color: #007788;">z1</span>,A.<span style="color: #007788;">x2</span>,A.<span style="color: #007788;">y2</span>,B.<span style="color: #007788;">z1</span><span style="color: #008000;">&#41;</span>,pos<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;">if</span> <span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">z2</span> <span style="color: #000080;">&gt;</span> B.<span style="color: #007788;">z2</span><span style="color: #008000;">&#41;</span>
			volume<span style="color: #000040;">+</span><span style="color: #000080;">=</span>devide<span style="color: #008000;">&#40;</span>mcube<span style="color: #008000;">&#40;</span>A.<span style="color: #007788;">x1</span>,A.<span style="color: #007788;">y1</span>,B.<span style="color: #007788;">z2</span>,A.<span style="color: #007788;">x2</span>,A.<span style="color: #007788;">y2</span>,A.<span style="color: #007788;">z2</span><span style="color: #008000;">&#41;</span>,pos<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;">return</span> volume<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,totalvolume<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><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>N<span style="color: #008080;">;</span>i<span style="color: #000080;">&gt;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span>
		totalvolume<span style="color: #000040;">+</span><span style="color: #000080;">=</span>devide<span style="color: #008000;">&#40;</span>Cubes<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</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: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%dn&quot;</span>,totalvolume<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>这是NOI1997中最难的一道题，我在这道题上花费了一天时间才通过了。基本框架就是搜索，搜索出匹配串，对所有文件名按照规则匹配，判断是否可行，算出匹配的数目，更新最优值。</p>
<p>暴力的搜索连样例都过不了，我们需要深入分析，进行优化和剪枝。我的搜索顺序是从匹配串的第一位到最后一位(所有文件名长度最大值)。我们定义正文件为标记&#8217;+'的文件，负文件为标记&#8217;-'的文件。</p>
<p><strong>优化1</strong>.记录下所有用过的字符，顺序存入线性表，以备搜索时使用。</p>
<p><strong>优化2</strong>.去除多余的状态，例如多个*在一起是浪费的，*?和?*是一样的(但是和*不一样)，在产生状态时应避免出现。</p>
<p><strong>优化3</strong>.关于判断文件名是否匹配，在搜索出一位时，不需要把整个串与文件名匹配，如果前面都是匹配的，只需判断最后一位是否 成立，我们需要记录每个文件名已经前缀匹配到了哪一位。但是由于*的存在，使这个判断复杂性大大增加。例如当前的匹配串A*A对A1A2A前缀匹 配，A*A可以匹配到第3位(A1A)，也可以匹配到第5位(A1A2A)。而且由于后面扩展出的状态未知，我们也无法知道究竟匹配到哪一位是合适的，所 以必须都记录下。即对每个文件名开辟一个数组空间，存储该文件名可能匹配到的所有位置。在状态的扩展中，也需要对所有的可能分别扩展。在最终判断时，一个 文件名只要有一种可能使得完全匹配，就算是匹配成功。</p>
<p><strong>优化4</strong>.在搜索完匹配串的每一位，计算完全匹配的数目时，需要判断是否还有必要搜索下一位。对于以下三种情况，</p>
<ol>
<li>如果所有的正文件全部不能严格匹配，则再搜索下一位已经没有意义，剪枝；</li>
<li>如果前缀匹配的正文件的个数小于已有答案，再搜索下一位答案一定不会增加，剪枝；</li>
<li>如果匹配串末字符是*，当前答案小于最优答案，继续搜索一定是不会使答案增加，剪枝。</li>
</ol>
<p><strong>优化5</strong>.在搜索前先对所有的文件排序，使负文件名排在前面，有利于剪枝的提前发生。</p>
<p>上述5个优化，其中优化3是核心，也是算法的重要内容，大量编程的工作都是优化3；而优化4是关键，优化4的三个强力剪枝可以去除许多无用的状态，大大减少运行时间。</p>
<p>这道题虽然写了一天才搞定，收获却是非同一般得大。我个人认为这类题很好，很能考验构造思维能力和编程能力，甚至意志力，但近些年不论在 NOI还是NOIP，却都销声匿迹了。我预测如果今年NOI考这类题，仍然是个难题，能拿到高分的人不会多的。搜索+优化永远是一个万能算法，即使不为了 竞赛，真正掌握它也是很困难，确是很重要的。</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('p866code20'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p86620"><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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
</pre></td><td class="code" id="p866code20"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/* 
 * Problem: NOI1997 wildcard
 * Author: Guo Jiabao
 * Time: 2009.2.15 20:17
 * 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;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;">const</span> <span style="color: #0000ff;">int</span> MAXN<span style="color: #000080;">=</span><span style="color: #0000dd;">251</span>,MAXS<span style="color: #000080;">=</span><span style="color: #0000dd;">62</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> CharSet<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #FF0000;">&quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&quot;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">struct</span> File<span style="color: #008000;">&#123;</span><span style="color: #0000ff;">int</span> name<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">10</span><span style="color: #008000;">&#93;</span>,len,matchpre<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">10</span><span style="color: #008000;">&#93;</span>,precnt<span style="color: #008080;">;</span><span style="color: #0000ff;">bool</span> permission<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> N,N_p,pattern<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">10</span><span style="color: #008000;">&#93;</span>,Apt<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">10</span><span style="color: #008000;">&#93;</span>,Max_Length,Ans,Nowlen,Al,ccnt<span style="color: #008080;">;</span>
File F<span style="color: #008000;">&#91;</span>MAXN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> used<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">200</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> chas<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">62</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">void</span> dfs<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> len<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">int</span> CharToID<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span> c<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>c<span style="color: #000080;">&gt;=</span><span style="color: #FF0000;">'0'</span> <span style="color: #000040;">&amp;&amp;</span> c<span style="color: #000080;">&lt;=</span><span style="color: #FF0000;">'9'</span><span style="color: #008000;">&#41;</span><span style="color: #0000ff;">return</span> c<span style="color: #000040;">-</span><span style="color: #FF0000;">'0'</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span>c<span style="color: #000080;">&gt;=</span><span style="color: #FF0000;">'A'</span> <span style="color: #000040;">&amp;&amp;</span> c<span style="color: #000080;">&lt;=</span><span style="color: #FF0000;">'Z'</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">?</span>c<span style="color: #000040;">-</span><span style="color: #FF0000;">'A'</span><span style="color: #000040;">+</span><span style="color: #0000dd;">10</span><span style="color: #008080;">:</span>c<span style="color: #000040;">-</span><span style="color: #FF0000;">'a'</span><span style="color: #000040;">+</span><span style="color: #0000dd;">36</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
<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>File <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>permission<span style="color: #000080;">==</span><span style="color: #0000ff;">false</span><span style="color: #008080;">?</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">:</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</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,k<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">char</span> c,Name<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">10</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;wildcard.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;wildcard.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>
	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: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #0000ff;">EOF</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</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>
		<span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%s&quot;</span>,Name<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		N<span style="color: #000040;">++</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;">0</span><span style="color: #008080;">;</span>Name<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			F<span style="color: #008000;">&#91;</span>N<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">name</span><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: #000080;">=</span>k<span style="color: #000080;">=</span>CharToID<span style="color: #008000;">&#40;</span>Name<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			used<span style="color: #008000;">&#91;</span>k<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: #008000;">&#125;</span>
		F<span style="color: #008000;">&#91;</span>N<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">len</span><span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">&gt;</span>Max_Length<span style="color: #008000;">&#41;</span>
			Max_Length<span style="color: #000080;">=</span>i<span style="color: #008080;">;</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>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;">if</span> <span style="color: #008000;">&#40;</span>c<span style="color: #000080;">==</span><span style="color: #FF0000;">'+'</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			N_p<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
			F<span style="color: #008000;">&#91;</span>N<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">permission</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">else</span>
			F<span style="color: #008000;">&#91;</span>N<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">permission</span><span style="color: #000080;">=</span><span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
		F<span style="color: #008000;">&#91;</span>N<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">precnt</span><span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</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>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: #008000;">&#125;</span>
	<span style="color: #0000dd;">qsort</span><span style="color: #008000;">&#40;</span>F<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,N,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>F<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;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>MAXS<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>
			chas<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>ccnt<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;">bool</span> update<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> k<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> i,j,Newans<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span>,Pans<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">bool</span> np<span style="color: #000080;">=</span><span style="color: #0000ff;">false</span>,tb<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>
		tb<span style="color: #000080;">=</span><span style="color: #0000ff;">false</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>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">precnt</span><span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			tb<span style="color: #000040;">|</span><span style="color: #000080;">=</span>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">matchpre</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">len</span> <span style="color: #000040;">||</span> <span style="color: #008000;">&#40;</span> F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">matchpre</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> pattern<span style="color: #008000;">&#91;</span>k<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: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>tb<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</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: #007788;">permission</span> <span style="color: #008000;">&#41;</span>
				Newans<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">else</span>
				np<span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span> <span style="color: #666666;">//匹配了负串</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: #007788;">permission</span> <span style="color: #000040;">&amp;&amp;</span> F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">precnt</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
			Pans<span style="color: #000040;">++</span><span style="color: #008080;">;</span> <span style="color: #666666;">//记录正串不匹配的个数</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Pans<span style="color: #000080;">==</span>N_p <span style="color: #000040;">||</span> <span style="color: #008000;">&#40;</span>N_p<span style="color: #000040;">-</span>Pans<span style="color: #000080;">&lt;</span>Ans<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #666666;">//若正串全部不匹配 或者 前缀匹配串的个数小于已有答案 剪枝</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>pattern<span style="color: #008000;">&#91;</span>k<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: #000040;">&amp;&amp;</span> Newans<span style="color: #000080;">&lt;</span>Ans<span style="color: #008000;">&#41;</span> <span style="color: #666666;">//如果匹配串末字符是*，当前答案小于最优，继续添加一定是多余的  剪枝</span>
		<span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>np<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Newans<span style="color: #000080;">&gt;</span>Ans<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			Ans<span style="color: #000080;">=</span>Newans<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>k<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
				Apt<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>pattern<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			Al<span style="color: #000080;">=</span>k<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>Newans<span style="color: #000080;">==</span>Ans <span style="color: #000040;">&amp;&amp;</span> k<span style="color: #000080;">&lt;</span>Al<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</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>k<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
				Apt<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>pattern<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
			Al<span style="color: #000080;">=</span>k<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</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>
&nbsp;
<span style="color: #0000ff;">void</span> match<span style="color: #008000;">&#40;</span>File <span style="color: #000040;">&amp;</span>F,<span style="color: #0000ff;">int</span> len<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">bool</span> newpre<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">10</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #008000;">&#123;</span><span style="color: #0000ff;">false</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> k,i<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>pattern<span style="color: #008000;">&#91;</span>len<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">!</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;">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>F.<span style="color: #007788;">precnt</span><span style="color: #008080;">;</span>k<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>F.<span style="color: #007788;">matchpre</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&lt;=</span>F.<span style="color: #007788;">len</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #008000;">&#40;</span>pattern<span style="color: #008000;">&#91;</span>len<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span><span style="color: #000040;">-</span><span style="color: #0000dd;">2</span> <span style="color: #000040;">||</span> F.<span style="color: #007788;">name</span><span style="color: #008000;">&#91;</span>F.<span style="color: #007788;">matchpre</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span>pattern<span style="color: #008000;">&#91;</span>len<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
				newpre<span style="color: #008000;">&#91;</span>F.<span style="color: #007788;">matchpre</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</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: #008000;">&#125;</span>
	<span style="color: #0000ff;">else</span>
	<span style="color: #008000;">&#123;</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>F.<span style="color: #007788;">precnt</span><span style="color: #008080;">;</span>k<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>F.<span style="color: #007788;">matchpre</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>F.<span style="color: #007788;">len</span><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>F.<span style="color: #007788;">name</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span>pattern<span style="color: #008000;">&#91;</span>len<span style="color: #008000;">&#93;</span> <span style="color: #000040;">||</span> pattern<span style="color: #008000;">&#91;</span>len<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span><span style="color: #000040;">-</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span>
					newpre<span style="color: #008000;">&#91;</span>i<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: #008000;">&#125;</span>
	F.<span style="color: #007788;">precnt</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>k<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>k<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">9</span><span style="color: #008080;">;</span>k<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>newpre<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			F.<span style="color: #007788;">matchpre</span><span style="color: #008000;">&#91;</span> <span style="color: #000040;">++</span>F.<span style="color: #007788;">precnt</span> <span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>k<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> goon<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> len,<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;">==</span>N<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;">if</span> <span style="color: #008000;">&#40;</span>update<span style="color: #008000;">&#40;</span>len<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			dfs<span style="color: #008000;">&#40;</span>len<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;">return</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">int</span> i,tprecnt,tmatch<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">10</span><span style="color: #008000;">&#93;</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>p<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">precnt</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
		goon<span style="color: #008000;">&#40;</span>len,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: #0000ff;">else</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #ff0000; font-style: italic;">/*backup*/</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>F<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">precnt</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			tmatch<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>F<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">matchpre</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		tprecnt<span style="color: #000080;">=</span>F<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">precnt</span><span style="color: #008080;">;</span>
		<span style="color: #ff0000; font-style: italic;">/*backup*/</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>pattern<span style="color: #008000;">&#91;</span>len<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><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>
			match<span style="color: #008000;">&#40;</span>F<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span>,len<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			goon<span style="color: #008000;">&#40;</span>len,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;">else</span>
		<span style="color: #008000;">&#123;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>pattern<span style="color: #008000;">&#91;</span>len<span style="color: #008000;">&#93;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
				match<span style="color: #008000;">&#40;</span>F<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span>,len<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			goon<span style="color: #008000;">&#40;</span>len,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: #ff0000; font-style: italic;">/*restore*/</span>
		F<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">precnt</span><span style="color: #000080;">=</span>tprecnt<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>F<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">precnt</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			F<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">matchpre</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>tmatch<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #ff0000; font-style: italic;">/*restore*/</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> dfs<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> len<span style="color: #008000;">&#41;</span> <span style="color: #666666;">//-1:* -2:?</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>len<span style="color: #000080;">&gt;</span>Max_Length<span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> i<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>pattern<span style="color: #008000;">&#91;</span>len<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">!</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: #666666;">//**不连用 但允许?*</span>
	<span style="color: #008000;">&#123;</span>
		pattern<span style="color: #008000;">&#91;</span>len<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>
		goon<span style="color: #008000;">&#40;</span>len,<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;">if</span> <span style="color: #008000;">&#40;</span>pattern<span style="color: #008000;">&#91;</span>len<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">!</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: #666666;">//不允许*?</span>
	<span style="color: #008000;">&#123;</span>
		pattern<span style="color: #008000;">&#91;</span>len<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
		goon<span style="color: #008000;">&#40;</span>len,<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;">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>ccnt<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		pattern<span style="color: #008000;">&#91;</span>len<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>chas<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		goon<span style="color: #008000;">&#40;</span>len,<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>
&nbsp;
<span style="color: #0000ff;">void</span> print<span style="color: #008000;">&#40;</span><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;%dn&quot;</span>,Ans<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: #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>Al<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>Apt<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>
			<span style="color: #0000dd;">putchar</span><span style="color: #008000;">&#40;</span>CharSet<span style="color: #008000;">&#91;</span>Apt<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><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Apt<span style="color: #008000;">&#91;</span>i<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: #0000dd;">putchar</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">'*'</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span>
			<span style="color: #0000dd;">putchar</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">'?'</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">putchar</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">'n'</span><span style="color: #008000;">&#41;</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>
	init<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	dfs<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	print<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>顺便还说下，这道题SpecialJudge很有意思，由于可能没有唯一解，需要自己编写一个评测插件来判断解的正确性。在给 CmYkRgB123 Online Judge System编写评测插件时，我想到了用正则表达式的方法来判断，因为php中就有preg_match函数，但是这道题中的匹配串并不是真正的正则表达 式。可算让我想了一大会，才想到转化的方法。例如题中E*，转化为正则表达式就是/^E[a-zA-Z0-9]{0,8}$/，^表示必须从开头匹 配，$表示匹配到结尾[a-zA-Z0-9]{0,8}代表*，*只能匹配字母和数字，而且长度在[0,8]之间，很显然?就是[a-zA-Z0-9] {1}了。于是我写出了转化函数</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('p866code21'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p86621"><td class="code" id="p866code21"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> getz<span style="color: #009900;">&#40;</span><span style="color: #000088;">$Ab</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$str</span><span style="color: #339933;">=</span><span style="color: #0000ff;">'/^'</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$Ab</span><span style="color: #339933;">=</span><a href="http://www.php.net/str_replace"><span style="color: #990000;">str_replace</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'*'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'[a-zA-Z0-9]{0,8}'</span><span style="color: #339933;">,</span><span style="color: #000088;">$Ab</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$Ab</span><span style="color: #339933;">=</span><a href="http://www.php.net/str_replace"><span style="color: #990000;">str_replace</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'?'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'[a-zA-Z0-9]{1}'</span><span style="color: #339933;">,</span><span style="color: #000088;">$Ab</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$str</span><span style="color: #339933;">.=</span><span style="color: #000088;">$Ab</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'$/'</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #000088;">$str</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>判断函数就是</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('p866code22'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p86622"><td class="code" id="p866code22"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> plugin_compare<span style="color: #009900;">&#40;</span><span style="color: #000088;">$fin</span><span style="color: #339933;">,</span><span style="color: #000088;">$fout</span><span style="color: #339933;">,</span><span style="color: #000088;">$fans</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$score</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
	<a href="http://www.php.net/fscanf"><span style="color: #990000;">fscanf</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fout</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;<span style="color: #009933; font-weight: bold;">%s</span>&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$As</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<a href="http://www.php.net/fscanf"><span style="color: #990000;">fscanf</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fout</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;<span style="color: #009933; font-weight: bold;">%s</span>&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$Ab</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<a href="http://www.php.net/fscanf"><span style="color: #990000;">fscanf</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fans</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;<span style="color: #009933; font-weight: bold;">%s</span>&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$Bs</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<a href="http://www.php.net/fscanf"><span style="color: #990000;">fscanf</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fans</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;<span style="color: #009933; font-weight: bold;">%s</span>&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$Bb</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$As</span><span style="color: #339933;">==</span><span style="color: #000088;">$Bs</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$score</span><span style="color: #339933;">=</span><span style="color:#800080;">0.5</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><a href="http://www.php.net/strlen"><span style="color: #990000;">strlen</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$Ab</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">==</span><a href="http://www.php.net/strlen"><span style="color: #990000;">strlen</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$Bb</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$zab</span><span style="color: #339933;">=</span>getz<span style="color: #009900;">&#40;</span><span style="color: #000088;">$Ab</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$score</span><span style="color: #339933;">=</span><span style="color:#800080;">0.6</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$pcnt</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><span style="color: #000088;">$wrong</span><span style="color: #339933;">=</span><span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><a href="http://www.php.net/feof"><span style="color: #990000;">feof</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fin</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
			<span style="color: #009900;">&#123;</span>
				<a href="http://www.php.net/fscanf"><span style="color: #990000;">fscanf</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fin</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;<span style="color: #009933; font-weight: bold;">%s</span> <span style="color: #009933; font-weight: bold;">%s</span>n&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$subject</span><span style="color: #339933;">,</span><span style="color: #000088;">$method</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$r</span><span style="color: #339933;">=</span><a href="http://www.php.net/preg_match"><span style="color: #990000;">preg_match</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$zab</span><span style="color: #339933;">,</span><span style="color: #000088;">$subject</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$r</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$method</span><span style="color: #339933;">==</span><span style="color: #0000ff;">'+'</span><span style="color: #009900;">&#41;</span>
					<span style="color: #000088;">$pcnt</span><span style="color: #339933;">++;</span>
				<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$r</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$method</span><span style="color: #339933;">==</span><span style="color: #0000ff;">'-'</span><span style="color: #009900;">&#41;</span>
					<span style="color: #000088;">$wrong</span><span style="color: #339933;">=</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$As</span><span style="color: #339933;">==</span><span style="color: #000088;">$pcnt</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><span style="color: #000088;">$wrong</span><span style="color: #009900;">&#41;</span>
				<span style="color: #000088;">$score</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #000088;">$score</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>附上原题</p>
<blockquote>
<h2><span class="mw-headline">最佳游览</span></h2>
<p>有一座旅游城，它的街道成网格状．其中东西向的街道是“风景线、两旁分布着许多景观：南北向的街道都是林荫道，两旁没有任何建筑物。由于游客众多，风最线被规定为单行道，游客在风景线上只能从西走到东，林荫道上则可以任意行走。</p>
<p>一名游客将到这座旅游城旅游。他根据自己对景观的喜好给所有的风景线打了分，分值是从-100到+100的整数，分值越大表示我们的旅游者越喜欢这条风最线上的景致。显然这位游客不可能给这座旅游城的所有风景线都打负分。</p>
<pre>-50	–47	–36	–30	–23
17	–19	34	–13	–8
-42	–3	43	34	-45</pre>
<p>游客可以从旅游城的任一个十字路口开始游览，在任一个十字路口结束游览。我们的旅游者希望一路上游览的所有风最线的分值之和能够尽可能地大。请你写一个程序，帮助这位游客寻找一条最佳的游览路线。</p>
<p>输入输出</p>
<p>输入文件是INPUT.TXT。文件的第一行是两个整数M和N，之间用一个空格符隔开，M表示旅游城南北向林荫道的段数，N表示东西向风景 线的段数，1&lt;=M&lt;=100，1&lt;=N&lt;=20000。接下来的M行依次给出了由北向南各条风景线的分值信息。每行有N个整 数，依次表示了自西向东每段风景线的分值。同一行相邻两个数之间用一个空格隔开。</p>
<p>输出文件是OUTPUT.TXT。文件只有一行，含一个整数，表示你的程序所找到的最佳游览路线的总分值。</p>
<p>样例</p>
<p>INPUT.TXT</p>
<pre>3 6
50 -47 -36 -30 -23
17 -19 34 -13 -8
-42 -3 43 34 -45</pre>
<p>OUTPUT.TXT</p>
<pre>124</pre>
</blockquote>
<blockquote>
<h2><span class="mw-headline">竞赛排名 </span></h2>
<p>某市组织了一次中学生科技全能竞赛，每个选手要参加数学、物理、化学、天文、地理、生物、计算机和英语共八项竞赛,最后综合八项竞赛的成绩排出总名次。选手编号依次为：1,2&#8230;N（N为参赛总人数）。</p>
<p>设<a class="image" title="Image:Competitionsort 1.gif" href="http://www.ruvtex.cn/wiki/Image:Competitionsort_1.gif"><img longdesc="/wiki/Image:Competitionsort_1.gif" src="http://www.ruvtex.cn/mw/images/8/82/Competitionsort_1.gif" alt="Image:Competitionsort 1.gif" width="19" height="25" /></a>分别表示编号为i的选手第j项竞赛的成绩<a class="image" title="Image:Competitionsort 2.gif" href="http://www.ruvtex.cn/wiki/Image:Competitionsort_2.gif"><img longdesc="/wiki/Image:Competitionsort_2.gif" src="http://www.ruvtex.cn/mw/images/f/fd/Competitionsort_2.gif" alt="Image:Competitionsort 2.gif" width="137" height="21" /></a>。其它指标如下：</p>
<ul>
<li>第j项竞赛的平均分 <a class="image" title="Image:Competitionsort 3.gif" href="http://www.ruvtex.cn/wiki/Image:Competitionsort_3.gif"><img longdesc="/wiki/Image:Competitionsort_3.gif" src="http://www.ruvtex.cn/mw/images/d/df/Competitionsort_3.gif" alt="Image:Competitionsort 3.gif" width="177" height="45" /></a></li>
<li>选手i的总分 <a class="image" title="Image:Competitionsort 4.gif" href="http://www.ruvtex.cn/wiki/Image:Competitionsort_4.gif"><img longdesc="/wiki/Image:Competitionsort_4.gif" src="http://www.ruvtex.cn/mw/images/c/c2/Competitionsort_4.gif" alt="Image:Competitionsort 4.gif" width="168" height="47" /></a></li>
<li>选手i第j项竞赛的位置分 <a class="image" title="Image:Competitionsort 5.gif" href="http://www.ruvtex.cn/wiki/Image:Competitionsort_5.gif"><img longdesc="/wiki/Image:Competitionsort_5.gif" src="http://www.ruvtex.cn/mw/images/7/7c/Competitionsort_5.gif" alt="Image:Competitionsort 5.gif" width="439" height="117" /></a></li>
<li>选手i的总位置分 <a class="image" title="Image:Competitionsort 6.gif" href="http://www.ruvtex.cn/wiki/Image:Competitionsort_6.gif"><img longdesc="/wiki/Image:Competitionsort_6.gif" src="http://www.ruvtex.cn/mw/images/e/eb/Competitionsort_6.gif" alt="Image:Competitionsort 6.gif" width="245" height="45" /></a></li>
</ul>
<p>排名规则如下:</p>
<ol>
<li>总位置分高的选手名次在前：</li>
<li>若两个或两个以上的选手总位置分相同，则总分高的选手名次在前：</li>
<li>若两个或两个以上的选手总位置分和总分均相同，则编号在前的选手名次在前。</li>
</ol>
<p>请你为竞赛组委会编一程序，计算本次全能竞赛的总排名情况。</p>
<p>输入输出</p>
<p>输入文件为INPUT.TXT。文件的第一行为参赛总人数N<a class="image" title="Image:Competitionsort 7.gif" href="http://www.ruvtex.cn/wiki/Image:Competitionsort_7.gif"><img longdesc="/wiki/Image:Competitionsort_7.gif" src="http://www.ruvtex.cn/mw/images/c/c2/Competitionsort_7.gif" alt="Image:Competitionsort 7.gif" width="105" height="21" /></a>，从第二行到第N行依次为编号为1到编号为N的选手的成绩，每行有8个0～100之间的整数，代表该选手的8项竞赛成绩<a class="image" title="Image:Competitionsort 8.gif" href="http://www.ruvtex.cn/wiki/Image:Competitionsort_8.gif"><img longdesc="/wiki/Image:Competitionsort_8.gif" src="http://www.ruvtex.cn/mw/images/0/00/Competitionsort_8.gif" alt="Image:Competitionsort 8.gif" width="81" height="24" /></a>。同一行相邻两个数之间用一个空格符隔开。</p>
<p>输出文件为OUTPUT.TXT.  文件有N行，从第1行到第N行依次为排名第1的选手的编号，排名第2的选手的编号，…，排名第N的选手的编号。</p>
<p>样例</p>
<p>INPUT.TXT</p>
<pre>3
72 82 73 68 95 86 82 90
72 90 50 60 80 70 65 80
72 82 73 68 95 86 82 90</pre>
<p>OUTPUT.TXT</p>
<pre>1
3
2</pre>
</blockquote>
<blockquote>
<h2><span class="mw-headline">积木游戏 </span></h2>
<p>SERCOI 最近设计了一种积木游戏。每个游戏者有N块编号依次为1 ，2，…，N的长方体积木。对于每块积木,它的三条不同的边分别称为”a边”、“b边”和”c边”，如下图所示：</p>
<p><a class="image" title="Image:Buildinggame.PNG" href="http://www.ruvtex.cn/wiki/Image:Buildinggame.PNG"><img longdesc="/wiki/Image:Buildinggame.PNG" src="http://www.ruvtex.cn/mw/images/b/b8/Buildinggame.PNG" alt="Image:Buildinggame.PNG" width="229" height="160" /></a></p>
<p>游戏规则如下：</p>
<p>1.从N块积木中选出若干块，并将它们分成M（l&lt;=M&lt;=N） 堆，称为第1堆，第2 堆…，第M堆。每堆至少有1块积木，并且第K堆中任意一块积木的编号要大于第K+1堆中任意一块积木的编号(2&lt;=K&lt;=M)。</p>
<p>2.对于每一堆积木,游戏者要将它们垂直摞成一根柱子,并要求满足下面两个条件：</p>
<p>(1)除最顶上的一块积木外，任意一块积木的上表面同且仅同另一块积木的下表面接触，并且要求下面的积木的上表面能包含上面的积木的下表面，也就是说，要求下面的积木的上表面的两对边的长度分别大于等于上面的积木的两对边的长度。</p>
<p>(2)对于任意两块上下表面相接触的积木，下面的积木的编号要小于上面的积木的编号。</p>
<p>最后，根据每人所摞成的M根柱子的高度之和来决出胜负。</p>
<p>请你编一程序，寻找一种摞积木的方案，使得你所摞成的M根柱子的高度之和最大。</p>
<p>输入输出</p>
<p>输入文件是INPUT.TXT。文件的第一行有两个正整数N和M（1&lt;=M&lt;=N&lt;=100），分别表示积木总数和要求 摞成的柱子数。这两个数之间用一个空格符隔开。接下来N行依次是编号从1到N的N个积木的尺寸，每行有三个1至1000之间的整数，分别表示该积木a 边,b边和c边的长度。同一行相邻两个数之间用一个空格符隔开。</p>
<p>输出文件是OUTPUT.TXT。文件只有一行，为一个整数，表示M根柱子的高度之和。</p>
<p>样例</p>
<p>INPUT.TXT</p>
<pre>4 2
10 5 5
8 7 7
2 2 2
6 6 6</pre>
<p>OUTPUT.TXT</p>
<pre>24</pre>
</blockquote>
<blockquote>
<h2><span class="mw-headline">最优乘车 </span></h2>
<p>H城是一个旅游胜地，每年都有成千上万的人前来观光。为方便游客，巴士公司在各个旅游景点及宾馆，饭店等地都设置了巴士站并开通了一些单程巴上线路。每条单程巴士线路从某个巴士站出发，依次途经若干个巴士站，最终到达终点巴士站。</p>
<p>一名旅客最近到H城旅游，他很想去S公园游玩，但如果从他所在的饭店没有一路巴士可以直接到达S公园，则他可能要先乘某一路巴士坐几站，再下来换乘同一站台的另一路巴士, 这样换乘几次后到达S公园。</p>
<p>现在用整数1,2,…N 给H城的所有的巴士站编号，约定这名旅客所在饭店的巴士站编号为1,S公园巴士站的编号为N。</p>
<p>写一个程序，帮助这名旅客寻找一个最优乘车方案,使他在从饭店乘车到S公园的过程 中换车的次数最少。</p>
<p>输入输出</p>
<p>输入文件是INPUT.TXT。文件的第一行有两个数字M和N(1&lt;=M&lt;=100 1&lt;N&lt;=500），表示开通了M条单程巴士线路，总共有N个车站。从第二行到第M+1行依次给出了第1条到第M条巴士线路的信息。其中第 i+1行给出的是第i条巴士线路的信息，从左至右按运行顺序依次给出了该线路上的所有站号相邻两个站号之间用一个空格隔开。</p>
<p>输出文件是OUTPUT.TXT，文件只有一行。如果无法乘巴士从饭店到达S公园，则输出&#8221;N0&#8243;，否则输出你的程序所找到的最少换车次数，换车次数为0表示不需换车即可到达</p>
<p>样例</p>
<p>INPUT.TXT</p>
<pre>3 7
6 7
4 7 3 6
2 1 3 5</pre>
<p>OUTPUT.TXT</p>
<pre>2</pre>
</blockquote>
<blockquote>
<h2><span class="mw-headline">卫星覆盖 </span></h2>
<p>Cover</p>
<p>SERCOI（Space-Earth Resource Cover-Observe lnstitute）是一个致力于利用卫星技术对空间和地球资源进行覆盖观测的组织。现在他们研制成功一种新型资源观测卫星-SERCOI-308。这种 卫星可以覆盖空间直角坐标系中一定大小的立方体空间，卫星处于该立方体的中心。</p>
<p>其中（x,y,z）为立方体的中心点坐标，r为此中心点到立方体各个面的距离（即r为立方体高的一半）．立方体的各条边均平行于相应的坐标轴。我们可以用一个四元组(x,y,z,r)描述一颗卫星的状态，它所能覆盖的空间体积 。 由于一颗卫星所能覆盖的空间体积是有限的，因此空间中可能有若干颗卫星协同工作。它们所覆盖的空间区域可能有重叠的地方，如下图所示（阴影部分表示重叠的区域）。</p>
<p><a class="image" title="Image:Satellitecover.png" href="http://www.ruvtex.cn/wiki/Image:Satellitecover.png"><img longdesc="/wiki/Image:Satellitecover.png" src="http://www.ruvtex.cn/mw/images/5/58/Satellitecover.png" alt="Image:Satellitecover.png" width="197" height="200" /></a></p>
<p>写一个程序，根据给定的卫星分布情况，计算它们所覆盖的总体积。</p>
<p>输入输出</p>
<p>输入文件是INPU.TXT。文件的第一行是一个正整数N（1&lt;=N&lt;=100）：表示空间中的卫星总数。接下来的N行每行给 出了一颗卫星的状态，用空格隔开的四个正整数x,y,z,r依次表示了该卫星所能覆盖的立方体空间的中心点坐标和半高，其中 -1000&lt;=x,y,z&lt;=1000, 1&lt;=r&lt;=200。</p>
<p>输出文件是OUTPUT.TXT。文件只有一行,包括一个正整数，表示所有这些卫星所覆盖的空间总体积。</p>
<p>样例</p>
<p>INPUT.TXT</p>
<pre>3
0 0 0 3
1 -1 0 1
19 3 5 6</pre>
<p>OUTPUT.TXT</p>
<pre>1944</pre>
</blockquote>
<blockquote>
<h2><span class="mw-headline">文件匹配 </span></h2>
<p>在计算机的日常操作中，经常需要对当前回录下的所有文件中的一部分文件进行操作。例如，将当前目录下的所有文本文件复制至另一个目录下：将当前目录下所有以a 打头的文件删除; 等等。</p>
<p>很多操作系统都采用正则表达式来实现文件匹配功能。一种简单的正则表达式由英文字母（区分大小写）。数字及通配符”*”和”?”组成，”?”代表任意一个字符，”*””则可以代表零个或任意多个字符。</p>
<p>例如：</p>
<ul>
<li>a*b可以匹配acb(*代表c)
<ul>
<li>可以匹配aabb (*代表ab）</li>
<li>可以匹配asdsfdfdb (*代表sdsfdfd)</li>
<li>可以匹配ab (*不代表任何字符)</li>
</ul>
</li>
<li>a*b不可以匹配ac（缺少最右边的字母b)
<ul>
<li>不可以匹配bb（缺少最左边的字母a )</li>
<li>不可以匹配 abbc（最右边的字母不是b)</li>
</ul>
</li>
<li>a?b可以匹配acb（？代表c)
<ul>
<li>不可以匹配ab（缺少中间的一个字符）</li>
<li>不可以匹配accb（？只能代表一个字符）</li>
</ul>
</li>
</ul>
<p>现要对某目录下的部分文件进行操作。写一个程序,寻找一个正则表达式，使其能匹配的待操作文件最多，但不能匹配任何不进行操作的文件。注意你所找到的最优正则表达式的长度应当是最短的。如果有多个长度最短的最优正则表达式，则其中任意一个都是允许的。</p>
<p>输入输出</p>
<p>输入文件是INPUT.TXT.文件由N（1&lt;=N&lt;=250）行组成。每行给出了一个文件名（由英文字母和数字组成：英文字 符要区分大小写，文件名长度不超过8个字符），其后是一个空格符和一个字符（“+”或&#8221;-&#8221;）.“+”表示要对该行给出的文件进行操作，&#8221;-”表示不进行 操作。</p>
<p>输出文件是OUTPUT.TXT ，文件由两行组成。第一行是一个整数，给出了你的程序所找到的最优正则表达式所能匹配的文件数目．在第二行给出你的程序所找到的最优正则表达式。</p>
<p>样例</p>
<p>INPUT.TXT</p>
<pre>EXCHANGE +
EXT +
HARDWARE +
MOUSE -
NETWORK -</pre>
<p>OUTPUT.TXT</p>
<pre>2
E*</pre>
</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-1998-solution/" title="NOI 1998 解题报告">NOI 1998 解题报告</a></li><li><a href="http://www.byvoid.com/blog/wc2010-efield/" title="WC2010 能量场">WC2010 能量场</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/usaco-531-milk-measuring/" title="USACO 5.3.1 Milk Measuring 量取牛奶 milk4">USACO 5.3.1 Milk Measuring 量取牛奶 milk4</a></li><li><a href="http://www.byvoid.com/blog/usaco-314-shaping-regions/" title="USACO 3.1.4 Shaping Regions 形成的区域">USACO 3.1.4 Shaping Regions 形成的区域</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/noi-1997-solution/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
