<?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/%e4%bd%8d%e8%bf%90%e7%ae%97/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>POI 1997 基因串 Genotypes</title>
		<link>http://www.byvoid.com/blog/poi-1997-gen/</link>
		<comments>http://www.byvoid.com/blog/poi-1997-gen/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 14:04:55 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[POI]]></category>
		<category><![CDATA[1997]]></category>
		<category><![CDATA[gen]]></category>
		<category><![CDATA[位运算]]></category>
		<category><![CDATA[动态规划]]></category>
		<category><![CDATA[基因]]></category>
		<category><![CDATA[思路]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=581</guid>
		<description><![CDATA[这是一个思路新颖的动态规划问题，一看道题的时候看起来像搜索，一时没有想出动态规划。但是只要把思路变一下，要求给定的字串最少由几个S变换而成，每个自串能合成什么。 假设我们已... ]]></description>
			<content:encoded><![CDATA[<p>这是一个思路新颖的动态规划问题，一看道题的时候看起来像搜索，一时没有想出动态规划。但是只要把思路变一下，要求给定的字串最少由几个S变换而成，每个自串能合成什么。</p>
<p>假设我们已经知道了，给定的串S，从第i位到第j位，能够合成的单个字母的集合，用G[i,j]表示，那么我们可以定义</p>
<p>F[i,j](1<=i,j<=L L为S长度)表示串S从第i位到第j位能够合成的S的最小个数</p>
<p>状态转移方程</p>
<p>F[i,j]=Min<br />
{<br />
F[i,k]+F[k+1,j] | i<=k<=j-1,<br />
1 | 'S' 属于 G[i,j]<br />
}</p>
<p>边界条件</p>
<p>F[i,j]=∞</p>
<p>结果就是 F[1,L]</p>
<p>现在只需求出G[i,j]即可。我们定义H[A,B]为字母A,B能够合成的字母的集合，对于样例<br />
SAB<br />
SBC<br />
SAA<br />
ACA<br />
BCC<br />
CBC<br />
有<br />
H['A','B']={'S'}<br />
H['B','C']={'S','C'}<br />
H['A','A']={'S'}<br />
H['C','A']={'A'}<br />
H['C','C']={'B'}</p>
<p>然后G[i,j]依然可以用动态规划求出。</p>
<p>状态转移方程</p>
<p>G[i,j]=Union{H[A,B] | A 属于 G[i,k] 且 B 属于 G[k+1,j] 且 i<=k<=j-1}</p>
<p>上式表示从G[i,k]和G[k+1,j]两个集合中，我们各取一个元素A，B，代表S[i,k]变换而成的A和S[k+1,j]变换而成的B，将A,B合成G[i,j]的一个元素。</p>
<p>边界条件<br />
G[i,j]=Ø (1<=i,j<=L , i!=j)<br />
G[i,i]={S[i]}</p>
<p>以上的动态规划的方法是我第一次使用的，编程的时候要格外注意细节。关于集合的运算，我们可以用两个32位整型数保存每个字母的状态，用位运算的方法求是否包含每个元素，按位求或就是并集。<br />
<span id="more-581"></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('p581code2'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p5812"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
</pre></td><td class="code" id="p581code2"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;iostream&gt;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">class</span> tSet
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
		<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> P<span style="color: #008080;">;</span>
		tSet<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span>P<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">bool</span> Contain<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;">return</span> <span style="color: #008000;">&#40;</span>P <span style="color: #000080;">&gt;&gt;</span> <span style="color: #008000;">&#40;</span>k<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">&amp;</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">void</span> Union<span style="color: #008000;">&#40;</span>tSet <span style="color: #000040;">&amp;</span>k<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			P <span style="color: #000040;">|</span><span style="color: #000080;">=</span>k.<span style="color: #007788;">P</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">void</span> Union<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>
			P <span style="color: #000040;">|</span><span style="color: #000080;">=</span><span style="color: #0000dd;">1</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #008000;">&#40;</span>k<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> Target<span style="color: #000080;">=</span><span style="color: #FF0000;">'S'</span><span style="color: #000040;">-</span><span style="color: #FF0000;">'A'</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> MAX_L<span style="color: #000080;">=</span><span style="color: #0000dd;">101</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> INF<span style="color: #000080;">=</span><span style="color: #208080;">0x7FFFFFF</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> N,M,L,Ans<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">char</span> S<span style="color: #008000;">&#91;</span>MAX_L<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
tSet H<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">26</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">26</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
tSet G<span style="color: #008000;">&#91;</span>MAX_L<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAX_L<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_L<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>MAX_L<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,c,a,b<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">freopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;gen.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;gen.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;%dn&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;">gets</span><span style="color: #008000;">&#40;</span>S<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		c<span style="color: #000080;">=</span>S<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: #FF0000;">'A'</span><span style="color: #008080;">;</span>
		a<span style="color: #000080;">=</span>S<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: #FF0000;">'A'</span><span style="color: #008080;">;</span>
		b<span style="color: #000080;">=</span>S<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #FF0000;">'A'</span><span style="color: #008080;">;</span>
		H<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">Union</span><span style="color: #008000;">&#40;</span>c<span style="color: #008000;">&#41;</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;%dn&quot;</span>,<span style="color: #000040;">&amp;</span>N<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>
	<span style="color: #0000ff;">int</span> i,j,k,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>L<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>L<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			G<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: #007788;">P</span><span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		G<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">Union</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span>S<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: #008000;">&#125;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>L<span style="color: #008080;">;</span>i<span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span>i<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>L<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>k<span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>k<span style="color: #000080;">&lt;=</span>j<span style="color: #000040;">-</span><span style="color: #0000dd;">1</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><span style="color: #0000dd;">26</span><span style="color: #008080;">;</span>a<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>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;">26</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>G<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: #007788;">Contain</span><span style="color: #008000;">&#40;</span>a<span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;&amp;</span> G<span style="color: #008000;">&#91;</span>k<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">Contain</span><span style="color: #008000;">&#40;</span>b<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
						<span style="color: #008000;">&#123;</span>
							G<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: #007788;">Union</span><span style="color: #008000;">&#40;</span>H<span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>b<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
						<span style="color: #008000;">&#125;</span>
					<span style="color: #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;">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>L<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>L<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</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: #000080;">=</span>INF<span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>L<span style="color: #008080;">;</span>i<span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>L<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>G<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: #007788;">Contain</span><span style="color: #008000;">&#40;</span>Target<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</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: #000080;">=</span><span style="color: #0000dd;">1</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>i<span style="color: #008080;">;</span>k<span style="color: #000080;">&lt;=</span>j<span style="color: #000040;">-</span><span style="color: #0000dd;">1</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;">if</span> <span style="color: #008000;">&#40;</span>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span>F<span style="color: #008000;">&#91;</span>k<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">&lt;</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;">&#41;</span>
					<span style="color: #008000;">&#123;</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: #000080;">=</span>F<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span>F<span style="color: #008000;">&#91;</span>k<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><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>
				<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;
	Ans<span style="color: #000080;">=</span>F<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>L<span style="color: #008000;">&#93;</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>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>N<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000dd;">gets</span><span style="color: #008000;">&#40;</span>S<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>L<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>S<span style="color: #008000;">&#91;</span>L<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>L<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			S<span style="color: #008000;">&#91;</span>L<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #000080;">=</span><span style="color: #FF0000;">'A'</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		solve<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Ans<span style="color: #000080;">==</span>INF<span style="color: #008000;">&#41;</span>
			<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;NIEn&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">else</span>
			<span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%dn&quot;</span>,Ans<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<blockquote><p>基因串</p>
<p>基因串是由一串有限长度的基因所组成的，其中每一个基因都可以用26个英文大写字母中的一个来表示，不同的字母表示不同的基因类型。一个单独的基因可以生长成为一对新的基因，而可能成长的规则是通过一个有限的成长规则集所决定的。每一个成长的规则可以用三个大写英文字母A1A2A3来描述，这个规则的意思是基因A1可以成长为一对基因A2A3。</p>
<p>我们用大写字母S来表示一类被称作超级基因的基因。因为每一个基因串都是由一串超级基因根据给出的规则所成长出来的。</p>
<p>任务：</p>
<p>请写一个程序：</p>
<p>    * 从文本文件中读入有限条成长的规则和一些我们想要得到的基因串；<br />
    * 对于每个基因串，试判断它是否可以由一个有限长度的超级基因串成长得出。如果可以，那么请给出可成长为该基因串的最短超级基因串的长度；<br />
    * 把结果输出到文本文件中。 </p>
<p>输入格式：</p>
<p>在文本文件GEN.IN的第一行包括一个整数n，1 <= n <= 10000。以下的n行中每行都包括一个成长的规则，每个规则由三个大写英文字母组成。</p>
<p>在该文件的第n+1行包括一个整数k，1 <= k <= 10000。以下的k行中每行都有一个基因串。每个基因串都是一个长度不超过100的大写字符串。</p>
<p>输出格式：</p>
<p>在文件的第i（应共k行）行中你应该输出入下内容：</p>
<p>一个正整数，表示成长为改基因串所需的最短的超级基因串的长度；</p>
<p>或一个单词NIE（波兰语的“否”），如果说无法由超级基因串成长成为该基因串。</p>
<p>样例：</p>
<p>输入</p>
<p>6<br />
SAB<br />
SBC<br />
SAA<br />
ACA<br />
BCC<br />
CBC<br />
3<br />
ABBCAAABCA<br />
CCC<br />
BA</p>
<p>输出</p>
<p>3<br />
1<br />
NIE
</p></blockquote>
<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/poi-1997-rez/" title="POI 1997 阶梯教室设备利用 Lecture halls reservation">POI 1997 阶梯教室设备利用 Lecture halls reservation</a></li><li><a href="http://www.byvoid.com/blog/poi-1997-tan/" title="POI 1997 最优旅行计划 Cheap travels">POI 1997 最优旅行计划 Cheap travels</a></li><li><a href="http://www.byvoid.com/blog/noi-1997-solution/" title="NOI 1997 解题报告">NOI 1997 解题报告</a></li><li><a href="http://www.byvoid.com/blog/poi-2001-map/" title="POI 2001 Density Map 密度图">POI 2001 Density Map 密度图</a></li><li><a href="http://www.byvoid.com/blog/poi-1999-map/" title="POI 1999 地图着色 Map">POI 1999 地图着色 Map</a></li><li><a href="http://www.byvoid.com/blog/poi-1999-tro/" title="POI 1999 三色二叉树 Three−coloring of binary trees">POI 1999 三色二叉树 Three−coloring of binary trees</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/poi-1997-gen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>USACO 3.4.4 Raucous Rockers 破锣摇滚乐队</title>
		<link>http://www.byvoid.com/blog/usaco-344-raucous-rockers/</link>
		<comments>http://www.byvoid.com/blog/usaco-344-raucous-rockers/#comments</comments>
		<pubDate>Sun, 20 Apr 2008 07:22:36 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[USACO]]></category>
		<category><![CDATA[位运算]]></category>
		<category><![CDATA[动态规划]]></category>
		<category><![CDATA[搜索]]></category>
		<category><![CDATA[穷举]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=131</guid>
		<description><![CDATA[一道动态规划题，但观察数据规模，穷举就行了。 穷举每首歌是否选取所有的组合可能(2^20种)，算出每种情况所有光盘上一共能存的歌曲数目，保留最大值即可。 对于穷举每首歌是否选取所有... ]]></description>
			<content:encoded><![CDATA[<p><span id="more-131"></span><br />
一道动态规划题，但观察数据规模，穷举就行了。<br />
穷举每首歌是否选取所有的组合可能(2^20种)，算出每种情况所有光盘上一共能存的歌曲数目，保留最大值即可。</p>
<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('p131code5'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1315"><td class="code" id="p131code5"><pre class="cpp" style="font-family:monospace;">limit<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #000080;">&lt;&lt;</span> N<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>limit<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span></pre></td></tr></table></div>

<p>然后i对应的每种状况计算能装进光盘中的最大的歌曲数目即可。</p>
<p>USER: CmYkRgB CmYkRgB [cmykrgb1]<br />
TASK: rockers<br />
LANG: C++</p>
<p>Compiling&#8230;<br />
Compile: OK</p>
<p>Executing&#8230;<br />
   Test 1: TEST OK [0.000 secs, 2844 KB]<br />
   Test 2: TEST OK [0.000 secs, 2840 KB]<br />
   Test 3: TEST OK [0.011 secs, 2840 KB]<br />
   Test 4: TEST OK [0.000 secs, 2844 KB]<br />
   Test 5: TEST OK [0.011 secs, 2844 KB]<br />
   Test 6: TEST OK [0.011 secs, 2840 KB]<br />
   Test 7: TEST OK [0.410 secs, 2840 KB]<br />
   Test 8: TEST OK [0.454 secs, 2840 KB]<br />
   Test 9: TEST OK [0.097 secs, 2844 KB]<br />
   Test 10: TEST OK [0.000 secs, 2840 KB]<br />
   Test 11: TEST OK [0.421 secs, 2844 KB]<br />
   Test 12: TEST OK [0.454 secs, 2840 KB]</p>
<p>All tests OK.</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('p131code6'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1316"><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
</pre></td><td class="code" id="p131code6"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/*
ID: cmykrgb1
PROG: rockers
LANG: C++
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;fstream&gt;</span>
<span style="color: #339900;">#define MAX 21</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
ifstream fi<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;rockers.in&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
ofstream fo<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;rockers.out&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">long</span> N,T,M,maxr<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">long</span> len<span style="color: #008000;">&#91;</span>MAX<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;">long</span> i<span style="color: #008080;">;</span>
	fi <span style="color: #000080;">&gt;&gt;</span> N <span style="color: #000080;">&gt;&gt;</span> T <span style="color: #000080;">&gt;&gt;</span> M<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>
		fi <span style="color: #000080;">&gt;&gt;</span> len<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> comser<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">long</span> limit,i<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">long</span> j,k,rec,st<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">bool</span> A<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">long</span> use<span style="color: #008000;">&#91;</span>MAX<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	limit<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #000080;">&lt;&lt;</span> N<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>limit<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;">memset</span><span style="color: #008000;">&#40;</span>use,<span style="color: #0000dd;">0</span>,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>use<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		rec<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>st<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>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>
			A<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>i <span style="color: #000040;">&amp;</span> <span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&gt;&gt;</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>A<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">=</span>st<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: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>use<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span>len<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">&lt;=</span>T<span style="color: #008000;">&#41;</span>
					<span style="color: #008000;">&#123;</span>
						use<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span><span style="color: #000080;">=</span>len<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
						rec<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
						st<span style="color: #000080;">=</span>k<span style="color: #008080;">;</span>
						<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
					<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>rec<span style="color: #000080;">&gt;</span>maxr<span style="color: #008000;">&#41;</span> maxr<span style="color: #000080;">=</span>rec<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>
	fo <span style="color: #000080;">&lt;&lt;</span> maxr <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
	fi.<span style="color: #007788;">close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	fo.<span style="color: #007788;">close</span><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>
	comser<span style="color: #008000;">&#40;</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>

<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/usaco-feb08-silver-meteor-shower/" title="USACO FEB08 Silver Meteor Shower 流星雨">USACO FEB08 Silver Meteor Shower 流星雨</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-154-checker/" title="USACO 1.5.4 Checker Challenge （N皇后问题） 位运算解法">USACO 1.5.4 Checker Challenge （N皇后问题） 位运算解法</a></li><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/noi-1997-solution/" title="NOI 1997 解题报告">NOI 1997 解题报告</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/usaco-344-raucous-rockers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>USACO 3.2.5 Magic Squares 魔板 msquare</title>
		<link>http://www.byvoid.com/blog/usaco-325-magic-squares/</link>
		<comments>http://www.byvoid.com/blog/usaco-325-magic-squares/#comments</comments>
		<pubDate>Thu, 17 Apr 2008 05:28:26 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[USACO]]></category>
		<category><![CDATA[位运算]]></category>
		<category><![CDATA[康托展开]]></category>
		<category><![CDATA[高效]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=122</guid>
		<description><![CDATA[这道题类似于八数码难题，基本思想是宽搜，使用Hash判重。如果使用一般的八维数组空间可以达到8^8=16777216，会超过USACO的16MB空间限制。所以我们应该对状态进行散列存储，观察发现每位的数... ]]></description>
			<content:encoded><![CDATA[<p><span id="more-122"></span><br />
这道题类似于八数码难题，基本思想是宽搜，使用Hash判重。如果使用一般的八维数组空间可以达到8^8=16777216，会超过USACO的16MB空间限制。所以我们应该对状态进行散列存储，观察发现每位的数字不能重复，存在空间冗余。我们可以对于每个状态建立一个映射，采用康托展开算法。(参见<a target="_blank" href="http://www.nocow.cn/index.php/%E5%BA%B7%E6%89%98%E5%B1%95%E5%BC%80">Nocow</a>)<br />
定义cantor(s)为s串大大小顺序。可样将哈希容量缩减到8!=40320。</p>
<p>另外发现，对于魔板当前状态可以由一个8位的8进制数来表示，即无符号32位长整型 unsigned long 表示。<br />
对于魔板的变换可以转化为对一个数字的位运算。这样可以大大提高程序效率。</p>
<p>程序有些长，但是效率很高。</p>
<blockquote><p>USER: CmYkRgB CmYkRgB [cmykrgb1]<br />
TASK: msquare<br />
LANG: C++</p>
<p>Compiling&#8230;<br />
Compile: OK</p>
<p>Executing&#8230;<br />
   Test 1: TEST OK [0.011 secs, 3476 KB]<br />
   Test 2: TEST OK [0.054 secs, 3444 KB]<br />
   Test 3: TEST OK [0.011 secs, 3476 KB]<br />
   Test 4: TEST OK [0.011 secs, 3472 KB]<br />
   Test 5: TEST OK [0.011 secs, 3480 KB]<br />
   Test 6: TEST OK [0.022 secs, 3476 KB]<br />
   Test 7: TEST OK [0.022 secs, 3476 KB]<br />
   Test 8: TEST OK [0.023 secs, 3484 KB]</p>
<p>All tests OK.</p></blockquote>

<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('p122code8'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1228"><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
</pre></td><td class="code" id="p122code8"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/*
ID: cmykrgb1
PROG: msquare
LANG: C++
*/</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;fstream&gt;</span>
<span style="color: #339900;">#define MAX 40320</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">class</span> state
<span style="color: #008000;">&#123;</span>
<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
	state<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		comefrom<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>cur<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>cont<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	state <span style="color: #000040;">*</span>comefrom<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">long</span> cur<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">short</span> cont<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
state O<span style="color: #008080;">;</span>
state S<span style="color: #008000;">&#91;</span>MAX<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">class</span> queue
<span style="color: #008000;">&#123;</span>
<span style="color: #0000ff;">private</span><span style="color: #008080;">:</span>
	<span style="color: #0000ff;">long</span> first,last<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">long</span> list<span style="color: #008000;">&#91;</span>MAX<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
	<span style="color: #0000ff;">long</span> size<span style="color: #008080;">;</span>
&nbsp;
	queue<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		reset<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;">void</span> reset<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		first<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		size<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
		last<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>
&nbsp;
	<span style="color: #0000ff;">void</span> ins<span style="color: #008000;">&#40;</span>state <span style="color: #000040;">*</span>comefrom,<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">long</span> cur,<span style="color: #0000ff;">long</span> cont<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		size<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
		last<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
		list<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>last<span style="color: #008080;">;</span>
		S<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">comefrom</span><span style="color: #000080;">=</span>comefrom<span style="color: #008080;">;</span>
		S<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">cur</span><span style="color: #000080;">=</span>cur<span style="color: #008080;">;</span>
		S<span style="color: #008000;">&#91;</span>last<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">cont</span><span style="color: #000080;">=</span>cont<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">long</span> del<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		size<span style="color: #000040;">--</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> list<span style="color: #008000;">&#91;</span>first<span style="color: #000040;">++</span><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: #008080;">;</span>
&nbsp;
ifstream fi<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;msquare.in&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
ofstream fo<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;msquare.out&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">bool</span> hash<span style="color: #008000;">&#91;</span>MAX<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">char</span> B<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #008000;">&#123;</span><span style="color: #0000dd;">0</span>,<span style="color: #FF0000;">'A'</span>,<span style="color: #FF0000;">'B'</span>,<span style="color: #FF0000;">'C'</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">long</span> fac<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">8</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #008000;">&#123;</span><span style="color: #0000dd;">1</span>,<span style="color: #0000dd;">1</span>,<span style="color: #0000dd;">2</span>,<span style="color: #0000dd;">6</span>,<span style="color: #0000dd;">24</span>,<span style="color: #0000dd;">120</span>,<span style="color: #0000dd;">720</span>,<span style="color: #0000dd;">5040</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">long</span> Finish<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">long</span> cantor<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">long</span> S<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">long</span> x<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span>,i,p,k,j<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">bool</span> hash<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">8</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;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #0000dd;">8</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&gt;=</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>
		k<span style="color: #000080;">=</span>S<span style="color: #000080;">&gt;&gt;</span> <span style="color: #0000dd;">3</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		S<span style="color: #000040;">-</span><span style="color: #000080;">=</span>k<span style="color: #000080;">&lt;&lt;</span><span style="color: #0000dd;">3</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		hash<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>
		p<span style="color: #000080;">=</span>k<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>j<span style="color: #000080;">&lt;=</span>k<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: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>hash<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
				p<span style="color: #000040;">--</span><span style="color: #008080;">;</span>
		x<span style="color: #000040;">+</span><span style="color: #000080;">=</span>fac<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span>p<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">return</span> x<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;">long</span> i,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;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">8</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		fi<span style="color: #000080;">&gt;&gt;</span>t<span style="color: #008080;">;</span>
		t<span style="color: #000040;">--</span><span style="color: #008080;">;</span>
		O.<span style="color: #007788;">cur</span><span style="color: #000040;">*</span><span style="color: #000080;">=</span><span style="color: #0000dd;">8</span><span style="color: #008080;">;</span>
		O.<span style="color: #007788;">cur</span><span style="color: #000040;">+</span><span style="color: #000080;">=</span>t<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	Finish<span style="color: #000080;">=</span>cantor<span style="color: #008000;">&#40;</span>O.<span style="color: #007788;">cur</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	hash<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: #0000ff;">true</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">long</span> turn<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">long</span> S,<span style="color: #0000ff;">int</span> f<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">long</span> i<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">long</span> P<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">switch</span> <span style="color: #008000;">&#40;</span>f<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">case</span> <span style="color: #0000dd;">1</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><span style="color: #0000dd;">8</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
			P<span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>S <span style="color: #000040;">&amp;</span> <span style="color: #008000;">&#40;</span><span style="color: #0000dd;">7</span><span style="color: #000080;">&lt;&lt;</span> <span style="color: #008000;">&#40;</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span><span style="color: #000080;">&gt;&gt;</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #0000dd;">3</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">8</span><span style="color: #000040;">-</span>i<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> P<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">case</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">:</span>
		P<span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>S <span style="color: #000040;">&amp;</span> <span style="color: #208080;">07000</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">&gt;&gt;</span><span style="color: #0000dd;">3</span><span style="color: #000040;">*</span><span style="color: #0000dd;">3</span><span style="color: #008080;">;</span>
		P<span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>S <span style="color: #000040;">&amp;</span> <span style="color: #208080;">00777</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">&lt;&lt;</span><span style="color: #0000dd;">3</span><span style="color: #008080;">;</span>
		P<span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>S <span style="color: #000040;">&amp;</span> <span style="color: #208080;">070000</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">&lt;&lt;</span><span style="color: #0000dd;">3</span><span style="color: #000040;">*</span><span style="color: #0000dd;">3</span><span style="color: #008080;">;</span>
		P<span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>S <span style="color: #000040;">&amp;</span> <span style="color: #208080;">077700000</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">&gt;&gt;</span><span style="color: #0000dd;">3</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> P<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">case</span> <span style="color: #0000dd;">3</span><span style="color: #008080;">:</span>
		P<span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>S <span style="color: #000040;">&amp;</span> <span style="color: #208080;">070077007</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		P<span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>S <span style="color: #000040;">&amp;</span> <span style="color: #208080;">070</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">&lt;&lt;</span><span style="color: #0000dd;">5</span><span style="color: #000040;">*</span><span style="color: #0000dd;">3</span><span style="color: #008080;">;</span>
		P<span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>S <span style="color: #000040;">&amp;</span> <span style="color: #208080;">0700</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">&gt;&gt;</span><span style="color: #0000dd;">1</span><span style="color: #000040;">*</span><span style="color: #0000dd;">3</span><span style="color: #008080;">;</span>
		P<span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>S <span style="color: #000040;">&amp;</span> <span style="color: #208080;">0700000</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">&gt;&gt;</span><span style="color: #0000dd;">3</span><span style="color: #000040;">*</span><span style="color: #0000dd;">3</span><span style="color: #008080;">;</span>
		P<span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>S <span style="color: #000040;">&amp;</span> <span style="color: #208080;">07000000</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">&gt;&gt;</span><span style="color: #0000dd;">1</span><span style="color: #000040;">*</span><span style="color: #0000dd;">3</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">return</span> P<span style="color: #008080;">;</span>
		<span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> print<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">long</span> ed,<span style="color: #0000ff;">long</span> f<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	string O<span style="color: #008080;">;</span>
	state <span style="color: #000040;">*</span>P<span style="color: #000080;">=</span><span style="color: #000040;">&amp;</span>S<span style="color: #008000;">&#91;</span>ed<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">char</span> OUT<span style="color: #008000;">&#91;</span>MAX<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">long</span> cnt<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span>,i<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>P<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>cont<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		cnt<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
		OUT<span style="color: #008000;">&#91;</span>cnt<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>B<span style="color: #008000;">&#91;</span>P<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>cont<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		P<span style="color: #000080;">=</span>P<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>comefrom<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	fo <span style="color: #000080;">&lt;&lt;</span> cnt<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&lt;&lt;</span>endl<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>cnt<span style="color: #008080;">;</span>i<span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span>
		fo <span style="color: #000080;">&lt;&lt;</span> OUT<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	fo <span style="color: #000080;">&lt;&lt;</span> B<span style="color: #008000;">&#91;</span>f<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
&nbsp;
	fi.<span style="color: #007788;">close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	fo.<span style="color: #007788;">close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">exit</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> bfs<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">long</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span>,j<span style="color: #008080;">;</span>
	queue Q<span style="color: #008080;">;</span>
	Q.<span style="color: #007788;">ins</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>O,<span style="color: #208080;">001234567</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>Q.<span style="color: #007788;">size</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">long</span> p,ct<span style="color: #008080;">;</span>
		i<span style="color: #000080;">=</span>Q.<span style="color: #007788;">del</span><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>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>
		<span style="color: #008000;">&#123;</span>
			p<span style="color: #000080;">=</span>turn<span style="color: #008000;">&#40;</span>S<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">cur</span>,j<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			ct<span style="color: #000080;">=</span>cantor<span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>hash<span style="color: #008000;">&#91;</span>ct<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				hash<span style="color: #008000;">&#91;</span>ct<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
				<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ct<span style="color: #000080;">==</span>Finish<span style="color: #008000;">&#41;</span>
					print<span style="color: #008000;">&#40;</span>i,j<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
				Q.<span style="color: #007788;">ins</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>S<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>,p,j<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&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>
	bfs<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	fo <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">'0'</span> <span style="color: #000080;">&lt;&lt;</span><span style="color: #FF0000;">'n'</span><span style="color: #000080;">&lt;&lt;</span><span style="color: #FF0000;">'n'</span><span style="color: #008080;">;</span>
	fi.<span style="color: #007788;">close</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	fo.<span style="color: #007788;">close</span><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>

<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/usaco-344-raucous-rockers/" title="USACO 3.4.4 Raucous Rockers 破锣摇滚乐队">USACO 3.4.4 Raucous Rockers 破锣摇滚乐队</a></li><li><a href="http://www.byvoid.com/blog/usaco-315-contact/" title="USACO 3.1.5 Contact 联系">USACO 3.1.5 Contact 联系</a></li><li><a href="http://www.byvoid.com/blog/usaco-224-party-lamps/" title="USACO 2.2.4 Party Lamps 派对灯">USACO 2.2.4 Party Lamps 派对灯</a></li><li><a href="http://www.byvoid.com/blog/usaco-154-checker/" title="USACO 1.5.4 Checker Challenge （N皇后问题） 位运算解法">USACO 1.5.4 Checker Challenge （N皇后问题） 位运算解法</a></li><li><a href="http://www.byvoid.com/blog/pku-3255/" title="pku 3255 Roadblocks">pku 3255 Roadblocks</a></li><li><a href="http://www.byvoid.com/blog/poi-1997-gen/" title="POI 1997 基因串 Genotypes">POI 1997 基因串 Genotypes</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/usaco-325-magic-squares/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>USACO 3.1.5 Contact 联系</title>
		<link>http://www.byvoid.com/blog/usaco-315-contact/</link>
		<comments>http://www.byvoid.com/blog/usaco-315-contact/#comments</comments>
		<pubDate>Tue, 15 Apr 2008 13:50:08 +0000</pubDate>
		<dc:creator>BYVoid</dc:creator>
				<category><![CDATA[USACO]]></category>
		<category><![CDATA[位运算]]></category>
		<category><![CDATA[扫描]]></category>
		<category><![CDATA[掩码]]></category>

		<guid isPermaLink="false">http://www.byvoid.com/blog/?p=119</guid>
		<description><![CDATA[经典的位运算解题，边读入边计算。 设置极限掩码为limit=(... ]]></description>
			<content:encoded><![CDATA[<p><span id="more-119"></span><br />
经典的位运算解题，边读入边计算。<br />
设置极限掩码为limit=(1<<(B))-1; //2的B此次方-1<br />
每读入一个二进制数0或1，令unsigned int数字串str=((str<<1)+c) & limit;<br />
然后扫描str，从末尾向前扫描i=(A到B)位，把所得的数字串t最高位添加1，以区别有前导0的串，例如001和01，添加后变为1001和101</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('p119code11'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p11911"><td class="code" id="p119code11"><pre class="cpp" style="font-family:monospace;">mask<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&lt;&lt;</span>i<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
mask2<span style="color: #000080;">=</span>mask<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
t<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>S <span style="color: #000040;">&amp;</span> mask<span style="color: #008000;">&#41;</span> <span style="color: #000040;">|</span> mask2<span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>用哈希表记录t的频率 hash[t]++;</p>
<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('p119code12'); return false;">View Code</a> CPP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p11912"><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
</pre></td><td class="code" id="p119code12"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/*
ID: cmykrgb1
PROG: contact
LANG: C++
*/</span>
<span style="color: #339900;">#include &lt;stdio.h&gt;</span>
<span style="color: #339900;">#include &lt;stdlib.h&gt;</span>
<span style="color: #0000ff;">typedef</span> <span style="color: #0000ff;">struct</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">long</span> value,cnt<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span> bins<span style="color: #008080;">;</span>
<span style="color: #0000ff;">FILE</span> <span style="color: #000040;">*</span>fi,<span style="color: #000040;">*</span>fo<span style="color: #008080;">;</span>
<span style="color: #0000ff;">long</span> A,B,n<span style="color: #008080;">;</span>
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> limit<span style="color: #008080;">;</span>
<span style="color: #0000ff;">long</span> hash<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">10000</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">long</span> cnt<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
bins R<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">10000</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">void</span> print_bin<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> t<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> tmp<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">13</span><span style="color: #008000;">&#93;</span>,cnt<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">do</span><span style="color: #008000;">&#123;</span>
		tmp<span style="color: #008000;">&#91;</span><span style="color: #000040;">++</span>cnt<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>t <span style="color: #000040;">&amp;</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">+</span><span style="color: #0000dd;">48</span><span style="color: #008080;">;</span>
		t<span style="color: #000080;">&gt;&gt;=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span><span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>t<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>cnt<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>i<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span> <span style="color: #0000dd;">putc</span><span style="color: #008000;">&#40;</span>tmp<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>,fo<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> vote<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> S,<span style="color: #0000ff;">int</span> cy<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;">unsigned</span> <span style="color: #0000ff;">int</span> mask,mask2,t<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>A<span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>B <span style="color: #000040;">&amp;&amp;</span> i<span style="color: #000080;">&lt;=</span>cy<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		mask<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&lt;&lt;</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>mask2<span style="color: #000080;">=</span>mask<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
		t<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>S <span style="color: #000040;">&amp;</span> mask<span style="color: #008000;">&#41;</span> <span style="color: #000040;">|</span> mask2<span style="color: #008080;">;</span>
		hash<span style="color: #008000;">&#91;</span>t<span style="color: #008000;">&#93;</span><span style="color: #000040;">++</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> count<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">char</span> c<span style="color: #008080;">;</span>	<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> str<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span>,cy<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	fi<span style="color: #000080;">=</span><span style="color: #0000dd;">fopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;contact.in&quot;</span>,<span style="color: #FF0000;">&quot;r&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	fo<span style="color: #000080;">=</span><span style="color: #0000dd;">fopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;contact.out&quot;</span>,<span style="color: #FF0000;">&quot;w&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fscanf</span><span style="color: #008000;">&#40;</span>fi,<span style="color: #FF0000;">&quot;%ld%ld%ldn&quot;</span>,<span style="color: #000040;">&amp;</span>A,<span style="color: #000040;">&amp;</span>B,<span style="color: #000040;">&amp;</span>n<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	limit<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&lt;&lt;</span><span style="color: #008000;">&#40;</span>B<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> <span style="color: #666666;">//2的B此次方-1</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>c<span style="color: #000080;">=</span><span style="color: #0000dd;">getc</span><span style="color: #008000;">&#40;</span>fi<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><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: #0000ff;">if</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: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			cy<span style="color: #000040;">++</span><span style="color: #008080;">;</span>c<span style="color: #000040;">-</span><span style="color: #000080;">=</span><span style="color: #0000dd;">48</span><span style="color: #008080;">;</span>
			str<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>str<span style="color: #000080;">&lt;&lt;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">+</span>c<span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;</span> limit<span style="color: #008080;">;</span>
			vote<span style="color: #008000;">&#40;</span>str,cy<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> 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>
	bins ta<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>bins <span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>a<span style="color: #008000;">&#41;</span>,tb<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>bins <span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ta.<span style="color: #007788;">cnt</span><span style="color: #000080;">&gt;</span>tb.<span style="color: #007788;">cnt</span><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>ta.<span style="color: #007788;">cnt</span><span style="color: #000080;">&lt;</span>tb.<span style="color: #007788;">cnt</span><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;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ta.<span style="color: #007788;">cnt</span><span style="color: #000080;">==</span>tb.<span style="color: #007788;">cnt</span><span style="color: #008000;">&#41;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ta.<span style="color: #007788;">value</span><span style="color: #000080;">&lt;</span>tb.<span style="color: #007788;">value</span><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;">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> print<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> lt<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #000080;">&lt;&lt;</span><span style="color: #008000;">&#40;</span>B<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> i<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> now<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span>,pc<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span>,linecnt<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">bool</span> flag,first<span style="color: #000080;">=</span><span style="color: #0000ff;">true</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>lt<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>hash<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			cnt<span style="color: #000040;">++</span><span style="color: #008080;">;</span>R<span style="color: #008000;">&#91;</span>cnt<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">value</span><span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>
			R<span style="color: #008000;">&#91;</span>cnt<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">cnt</span><span style="color: #000080;">=</span>hash<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #0000dd;">qsort</span><span style="color: #008000;">&#40;</span>R<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span>,cnt,<span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>bins<span style="color: #008000;">&#41;</span>,cmp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<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>cnt<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>R<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">cnt</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>now<span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			now<span style="color: #000080;">=</span>R<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">cnt</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>pc<span style="color: #000080;">==</span>n<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>first<span style="color: #008000;">&#41;</span> <span style="color: #0000dd;">fprintf</span><span style="color: #008000;">&#40;</span>fo,<span style="color: #FF0000;">&quot;n&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">else</span> first<span style="color: #000080;">=</span><span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
			<span style="color: #0000dd;">fprintf</span><span style="color: #008000;">&#40;</span>fo,<span style="color: #FF0000;">&quot;%ldn&quot;</span>,now<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
			pc<span style="color: #000040;">++</span><span style="color: #008080;">;</span>linecnt<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;">else</span>
		<span style="color: #008000;">&#123;</span>
			linecnt<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>linecnt<span style="color: #000080;">==</span><span style="color: #0000dd;">6</span><span style="color: #008000;">&#41;</span>
			<span style="color: #008000;">&#123;</span>
				<span style="color: #0000dd;">putc</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">'n'</span>,fo<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>linecnt<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
			<span style="color: #008000;">&#125;</span>
			elsefprintf<span style="color: #008000;">&#40;</span>fo,<span style="color: #FF0000;">&quot; &quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span>
		print_bin<span style="color: #008000;">&#40;</span>R<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">value</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
	<span style="color: #0000dd;">putc</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">'n'</span>,fo<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fclose</span><span style="color: #008000;">&#40;</span>fi<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">fclose</span><span style="color: #008000;">&#40;</span>fo<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>
	count<span style="color: #008000;">&#40;</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>

<h3  class="related_post_title">Maybe you like</h3><ul class="related_post"><li><a href="http://www.byvoid.com/blog/usaco-551-picture/" title="USACO 5.5.1 Picture 矩形周长 picture">USACO 5.5.1 Picture 矩形周长 picture</a></li><li><a href="http://www.byvoid.com/blog/usaco-344-raucous-rockers/" title="USACO 3.4.4 Raucous Rockers 破锣摇滚乐队">USACO 3.4.4 Raucous Rockers 破锣摇滚乐队</a></li><li><a href="http://www.byvoid.com/blog/usaco-325-magic-squares/" title="USACO 3.2.5 Magic Squares 魔板 msquare">USACO 3.2.5 Magic Squares 魔板 msquare</a></li><li><a href="http://www.byvoid.com/blog/usaco-224-party-lamps/" title="USACO 2.2.4 Party Lamps 派对灯">USACO 2.2.4 Party Lamps 派对灯</a></li><li><a href="http://www.byvoid.com/blog/usaco-154-checker/" title="USACO 1.5.4 Checker Challenge （N皇后问题） 位运算解法">USACO 1.5.4 Checker Challenge （N皇后问题） 位运算解法</a></li><li><a href="http://www.byvoid.com/blog/pku-3255/" title="pku 3255 Roadblocks">pku 3255 Roadblocks</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.byvoid.com/blog/usaco-315-contact/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
