﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-y @ The Angry Teletubbies-文章分类-String</title><link>http://www.cppblog.com/y346491470/category/17805.html</link><description>为梦想而奋斗！</description><language>zh-cn</language><lastBuildDate>Fri, 18 May 2012 03:47:34 GMT</lastBuildDate><pubDate>Fri, 18 May 2012 03:47:34 GMT</pubDate><ttl>60</ttl><item><title>poj 1743 Musical Theme - 求不可重叠最长重复子串 + height数组分组 + 二分</title><link>http://www.cppblog.com/y346491470/articles/174840.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Mon, 14 May 2012 04:31:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/174840.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/174840.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/174840.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/174840.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/174840.html</trackback:ping><description><![CDATA[【题意】：求一个字符串的不可重叠最长重复子串。<br /><br />【题解】：后缀数组经典题目。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;先二分答案，把题目变成判定性问题：判断是否存在两个长度为k 的子串是相同的，且不重叠。解决这个问题的关键是利用height 数组，把排序后的后缀分成若干组，其中每组的后缀之间的height值都不小于k。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;容易看出，有希望成为最长公共前缀不小于k 的两个后缀一定在同一组。然后对于每组后缀，只须判断每个后缀的sa 值的最大值和最小值之差是否不小于k。如果有一组满足，则说明存在，否则不存在。时间复杂度为O(nlogn)。<br /><br />【代码】：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp; 1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">&nbsp;10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">&nbsp;11</span>&nbsp;#include&nbsp;"iomanip"<br /><span style="color: #008080; ">&nbsp;12</span>&nbsp;#include&nbsp;"set"<br /><span style="color: #008080; ">&nbsp;13</span>&nbsp;#include&nbsp;"utility"<br /><span style="color: #008080; ">&nbsp;14</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">&nbsp;15</span>&nbsp;typedef&nbsp;pair&lt;<span style="color: #0000FF; ">int</span>,&nbsp;<span style="color: #0000FF; ">int</span>&gt;&nbsp;pii;<br /><span style="color: #008080; ">&nbsp;16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">&nbsp;17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;mp&nbsp;make_pair<br /><span style="color: #008080; ">&nbsp;18</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;fi&nbsp;first<br /><span style="color: #008080; ">&nbsp;19</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;se&nbsp;second<br /><span style="color: #008080; ">&nbsp;20</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;sof(x)&nbsp;sizeof(x)<br /><span style="color: #008080; ">&nbsp;21</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">&nbsp;22</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">&nbsp;23</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">&nbsp;24</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">&nbsp;25</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;20050<br /><span style="color: #008080; ">&nbsp;26</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;wa[maxn],&nbsp;wb[maxn],&nbsp;wv[maxn],&nbsp;wc[maxn];<br /><span style="color: #008080; ">&nbsp;27</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;r[maxn],&nbsp;sa[maxn],&nbsp;rank[maxn],&nbsp;height[maxn];<br /><span style="color: #008080; ">&nbsp;28</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n;<br /><span style="color: #008080; ">&nbsp;29</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;30</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cmp(<span style="color: #0000FF; ">int</span>&nbsp;*r,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;a,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;b,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;l)&nbsp;{<br /><span style="color: #008080; ">&nbsp;31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;r[a]&nbsp;==&nbsp;r[b]&nbsp;&amp;&amp;&nbsp;r[a+l]&nbsp;==&nbsp;r[b+l];<br /><span style="color: #008080; ">&nbsp;32</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;33</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;34</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;da()&nbsp;{<br /><span style="color: #008080; ">&nbsp;35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">m为最大字符</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;36</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i,&nbsp;j,&nbsp;p,&nbsp;*x&nbsp;=&nbsp;wa,&nbsp;*y&nbsp;=&nbsp;wb,&nbsp;*t,&nbsp;m&nbsp;=&nbsp;256;<br /><span style="color: #008080; ">&nbsp;37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;m;&nbsp;i++)&nbsp;wc[i]&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;wc[x[i]&nbsp;=&nbsp;r[i]]++;<br /><span style="color: #008080; ">&nbsp;39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;&nbsp;m;&nbsp;i++)&nbsp;wc[i]&nbsp;+=&nbsp;wc[i-1];<br /><span style="color: #008080; ">&nbsp;40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(i&nbsp;=&nbsp;n;&nbsp;i&nbsp;&gt;=&nbsp;0;&nbsp;i--)&nbsp;sa[--wc[x[i]]]&nbsp;=&nbsp;i;<br /><span style="color: #008080; ">&nbsp;41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(j&nbsp;=&nbsp;1,&nbsp;p&nbsp;=&nbsp;1;&nbsp;p&nbsp;&lt;&nbsp;n;&nbsp;j&nbsp;*=&nbsp;2,&nbsp;m&nbsp;=&nbsp;p)&nbsp;{<br /><span style="color: #008080; ">&nbsp;42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(p&nbsp;=&nbsp;0,&nbsp;i&nbsp;=&nbsp;n&nbsp;-&nbsp;j&nbsp;+&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;y[p++]&nbsp;=&nbsp;i;<br /><span style="color: #008080; ">&nbsp;43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;<span style="color: #0000FF; ">if</span>(sa[i]&nbsp;&gt;=&nbsp;j)&nbsp;y[p++]&nbsp;=&nbsp;sa[i]&nbsp;-&nbsp;j;<br /><span style="color: #008080; ">&nbsp;44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;wv[i]&nbsp;=&nbsp;x[y[i]];<br /><span style="color: #008080; ">&nbsp;45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;m;&nbsp;i++)&nbsp;wc[i]&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;wc[wv[i]]++;<br /><span style="color: #008080; ">&nbsp;47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;&nbsp;m;&nbsp;i++)&nbsp;wc[i]&nbsp;+=&nbsp;wc[i-1];<br /><span style="color: #008080; ">&nbsp;48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(i&nbsp;=&nbsp;n;&nbsp;i&nbsp;&gt;=&nbsp;0;&nbsp;i--)&nbsp;sa[--wc[wv[i]]]&nbsp;=&nbsp;y[i];<br /><span style="color: #008080; ">&nbsp;49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(t&nbsp;=&nbsp;x,&nbsp;x&nbsp;=&nbsp;y,&nbsp;y&nbsp;=&nbsp;t,&nbsp;p&nbsp;=&nbsp;1,&nbsp;x[sa[0]]&nbsp;=&nbsp;0,&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)<br /><span style="color: #008080; ">&nbsp;50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x[sa[i]]&nbsp;=&nbsp;cmp(y,&nbsp;sa[i-1],&nbsp;sa[i],&nbsp;j)&nbsp;?&nbsp;p&nbsp;-&nbsp;1&nbsp;:&nbsp;p++;<br /><span style="color: #008080; ">&nbsp;51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;52</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;53</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;54</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;calheight()&nbsp;{<br /><span style="color: #008080; ">&nbsp;55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i,&nbsp;j,&nbsp;k&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;rank[sa[i]]&nbsp;=&nbsp;i;<br /><span style="color: #008080; ">&nbsp;57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;height[rank[i++]]&nbsp;=&nbsp;k)<br /><span style="color: #008080; ">&nbsp;58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(k&nbsp;?&nbsp;k--&nbsp;:&nbsp;0,&nbsp;j&nbsp;=&nbsp;sa[rank[i]-1];&nbsp;r[i+k]&nbsp;==&nbsp;r[j+k];&nbsp;k++);<br /><span style="color: #008080; ">&nbsp;59</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;60</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;61</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;check(<span style="color: #0000FF; ">int</span>&nbsp;mid)&nbsp;{<br /><span style="color: #008080; ">&nbsp;62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;minn&nbsp;=&nbsp;sa[1],&nbsp;maxx&nbsp;=&nbsp;sa[1];<br /><span style="color: #008080; ">&nbsp;63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;2;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">&nbsp;64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(height[i]&nbsp;&gt;=&nbsp;mid)&nbsp;{<br /><span style="color: #008080; ">&nbsp;65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minn&nbsp;=&nbsp;min(minn,&nbsp;sa[i]);<br /><span style="color: #008080; ">&nbsp;66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxx&nbsp;=&nbsp;max(maxx,&nbsp;sa[i]);<br /><span style="color: #008080; ">&nbsp;67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(maxx&nbsp;-&nbsp;minn&nbsp;&gt;=&nbsp;mid)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;1;<br /><span style="color: #008080; ">&nbsp;68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;minn&nbsp;=&nbsp;maxx&nbsp;=&nbsp;sa[i];<br /><span style="color: #008080; ">&nbsp;69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">&nbsp;71</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;72</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;73</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;solve()&nbsp;{<br /><span style="color: #008080; ">&nbsp;74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;da();<span style="color: #008000; ">//</span><span style="color: #008000; ">求sa数组</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;75</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;calheight();<span style="color: #008000; ">//</span><span style="color: #008000; ">求rank数组和height数组</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;76</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;l&nbsp;=&nbsp;1,&nbsp;r&nbsp;=&nbsp;n,&nbsp;ans&nbsp;=&nbsp;-1;<br /><span style="color: #008080; ">&nbsp;77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(l&nbsp;&lt;=&nbsp;r)&nbsp;{<br /><span style="color: #008080; ">&nbsp;78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;mid&nbsp;=&nbsp;(l&nbsp;+&nbsp;r)&nbsp;&gt;&gt;&nbsp;1;<br /><span style="color: #008080; ">&nbsp;79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(check(mid))&nbsp;ans&nbsp;=&nbsp;mid,&nbsp;l&nbsp;=&nbsp;mid&nbsp;+&nbsp;1;<br /><span style="color: #008080; ">&nbsp;80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;r&nbsp;=&nbsp;mid&nbsp;-&nbsp;1;<br /><span style="color: #008080; ">&nbsp;81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(ans&nbsp;&gt;=&nbsp;4)&nbsp;printf("%d\n",&nbsp;ans&nbsp;+&nbsp;1);<br /><span style="color: #008080; ">&nbsp;83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;printf("0\n");<br /><span style="color: #008080; ">&nbsp;84</span>&nbsp;}<br /><span style="color: #008080; ">&nbsp;85</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;86</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">&nbsp;87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;a,&nbsp;b;<br /><span style="color: #008080; ">&nbsp;88</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(~scanf("%d",&nbsp;&amp;n))&nbsp;{<br /><span style="color: #008080; ">&nbsp;89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!n)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">&nbsp;90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n--;<br /><span style="color: #008080; ">&nbsp;91</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;b);<br /><span style="color: #008080; ">&nbsp;92</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;{<br /><span style="color: #008080; ">&nbsp;93</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;a);<br /><span style="color: #008080; ">&nbsp;94</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r[i]&nbsp;=&nbsp;a&nbsp;-&nbsp;b&nbsp;+&nbsp;100;<br /><span style="color: #008080; ">&nbsp;95</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;=&nbsp;a;<br /><span style="color: #008080; ">&nbsp;96</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;97</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r[n]&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;98</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solve();<br /><span style="color: #008080; ">&nbsp;99</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">100</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">101</span>&nbsp;}<br /><span style="color: #008080; ">102</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/174840.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-05-14 12:31 <a href="http://www.cppblog.com/y346491470/articles/174840.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 2406 Power Strings - kmp + 求重复子串的长度</title><link>http://www.cppblog.com/y346491470/articles/166080.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Mon, 20 Feb 2012 10:28:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/166080.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/166080.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/166080.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/166080.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/166080.html</trackback:ping><description><![CDATA[【题意】：给出一个串，求出它重复子串的长度<br /><br />【题解】：kmp，求出原串的next[]。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;如果len % (len - next[len]) == 0，说明原串是由一个子串连续拼接而成的，且重复子串的长度为 (len / (len - next[len]));<br /><br />【代码】：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">11</span>&nbsp;#include&nbsp;"iomanip"<br /><span style="color: #008080; ">12</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">13</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">14</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">15</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">18</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;1000050<br /><span style="color: #008080; ">19</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;s[maxn];<br /><span style="color: #008080; ">20</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;next[maxn];<br /><span style="color: #008080; ">21</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;getnext()&nbsp;{<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0,&nbsp;j&nbsp;=&nbsp;-1;<br /><span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next[i]&nbsp;=&nbsp;j;<br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;len&nbsp;=&nbsp;strlen(s);<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(i&nbsp;&lt;&nbsp;len)&nbsp;{<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(j&nbsp;==&nbsp;-1&nbsp;||&nbsp;s[i]&nbsp;==&nbsp;s[j])&nbsp;i++,&nbsp;j++,&nbsp;next[i]&nbsp;=&nbsp;j;<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;j&nbsp;=&nbsp;next[j];<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">29</span>&nbsp;}<br /><span style="color: #008080; ">30</span>&nbsp;<br /><span style="color: #008080; ">31</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(~scanf("%s",&nbsp;s))&nbsp;{<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(strcmp(s,&nbsp;".")&nbsp;==&nbsp;0)&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getnext();<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;len&nbsp;=&nbsp;strlen(s);<br /><span style="color: #008080; ">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(len&nbsp;%&nbsp;(len&nbsp;-&nbsp;next[len])&nbsp;==&nbsp;0)&nbsp;printf("%d\n",&nbsp;len&nbsp;/&nbsp;(len&nbsp;-&nbsp;next[len]));<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;printf("1\n");<br /><span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">40</span>&nbsp;}<br /><span style="color: #008080; ">41</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/166080.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-02-20 18:28 <a href="http://www.cppblog.com/y346491470/articles/166080.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 3461 Oulipo - kmp + 找串a在串b出现的次数</title><link>http://www.cppblog.com/y346491470/articles/165940.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Sat, 18 Feb 2012 15:54:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/165940.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/165940.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/165940.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/165940.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/165940.html</trackback:ping><description><![CDATA[【题意】：求串a在串b出现的次数。<br /><br />【题解】：kmp即可。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;我利用了后缀数组的思想，构造新串A + '$' + B，然后对新串求next[]即可，具体看代码。<br /><br />【代码】：<br /><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; border-image: initial; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;"iostream"<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;#include&nbsp;"cstdio"<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;#include&nbsp;"cstring"<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;#include&nbsp;"algorithm"<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;#include&nbsp;"vector"<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;#include&nbsp;"queue"<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;#include&nbsp;"cmath"<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;#include&nbsp;"string"<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;#include&nbsp;"cctype"<br /><span style="color: #008080; ">10</span>&nbsp;#include&nbsp;"map"<br /><span style="color: #008080; ">11</span>&nbsp;#include&nbsp;"iomanip"<br /><span style="color: #008080; ">12</span>&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008080; ">13</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;pb&nbsp;push_back<br /><span style="color: #008080; ">14</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1)<br /><span style="color: #008080; ">15</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;rc(x)&nbsp;(x&nbsp;&lt;&lt;&nbsp;1&nbsp;|&nbsp;1)<br /><span style="color: #008080; ">16</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;lowbit(x)&nbsp;(x&nbsp;&amp;&nbsp;(-x))<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;ll&nbsp;long&nbsp;long<br /><span style="color: #008080; ">18</span>&nbsp;<span style="color: #0000FF; ">#define</span>&nbsp;maxn&nbsp;1050000<br /><span style="color: #008080; ">19</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;s[maxn];<br /><span style="color: #008080; ">20</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;slen,&nbsp;len;<br /><span style="color: #008080; ">21</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;next[maxn];<br /><span style="color: #008080; ">22</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;getnext()&nbsp;{<br /><span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1,&nbsp;j&nbsp;=&nbsp;0,&nbsp;cnt&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next[1]&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; ">while</span>(i&nbsp;&lt;=&nbsp;len)&nbsp;{<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(j&nbsp;==&nbsp;0&nbsp;||&nbsp;s[i]&nbsp;==&nbsp;s[j])&nbsp;{<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++,&nbsp;j++,&nbsp;next[i]&nbsp;=&nbsp;j;<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(next[i]&nbsp;==&nbsp;slen&nbsp;+&nbsp;1)&nbsp;cnt++;<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;j&nbsp;=&nbsp;next[j];<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;cnt;<br /><span style="color: #008080; ">32</span>&nbsp;}<br /><span style="color: #008080; ">33</span>&nbsp;<br /><span style="color: #008080; ">34</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()&nbsp;{<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;T;<br /><span style="color: #008080; ">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;T);<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(T--)&nbsp;{<br /><span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%s",&nbsp;s&nbsp;+&nbsp;1);<br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;slen&nbsp;=&nbsp;strlen(s&nbsp;+&nbsp;1);<br /><span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s[slen+1]&nbsp;=&nbsp;'$';<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%s",&nbsp;s&nbsp;+&nbsp;slen&nbsp;+&nbsp;2);<br /><span style="color: #008080; ">42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;len&nbsp;=&nbsp;strlen(s&nbsp;+&nbsp;1);<br /><span style="color: #008080; ">43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",&nbsp;getnext());<br /><span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">46</span>&nbsp;}<br /><span style="color: #008080; ">47</span>&nbsp;</div><img src ="http://www.cppblog.com/y346491470/aggbug/165940.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2012-02-18 23:54 <a href="http://www.cppblog.com/y346491470/articles/165940.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdoj 2243 考研路茫茫——单词情结 - ac自动机 + 矩阵快速幂 + 快速幂 + 二分</title><link>http://www.cppblog.com/y346491470/articles/158561.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Mon, 17 Oct 2011 09:24:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/158561.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/158561.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/158561.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/158561.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/158561.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 【题意】：给定n个词根，求长度不超过L，至少包含一个词根的字符串的数目。【题解】：可以从对立角度来想，就是先求出所有字符串的数目，再减去不包含任一词根的字符串的数目。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;字符串总数为26^1 + 26^2 + &#8230;...&nbsp;&nbsp;<a href='http://www.cppblog.com/y346491470/articles/158561.html'>阅读全文</a><img src ="http://www.cppblog.com/y346491470/aggbug/158561.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2011-10-17 17:24 <a href="http://www.cppblog.com/y346491470/articles/158561.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 2778 DNA Sequence - ac自动机 + 矩阵快速幂 + 转化为求L步长的方案数</title><link>http://www.cppblog.com/y346491470/articles/158559.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Mon, 17 Oct 2011 09:04:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/158559.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/158559.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/158559.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/158559.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/158559.html</trackback:ping><description><![CDATA[【题意】：给定你m个病毒串，求长度为n的不包含任意一个病毒串的种数。<br /><br />【题解】：用ac自动机构造一个DFA（既有确定性的状态转移图），然后用矩阵快速幂求解。<br /><br />【代码】：
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;&nbsp;1</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">iostream</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;&nbsp;2</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">cstdio</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">cstring</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;&nbsp;4</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;std;<br /></span><span style="color: #008080">&nbsp;&nbsp;5</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;ll&nbsp;long&nbsp;long</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;&nbsp;6</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;ll&nbsp;MOD&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">100000</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;&nbsp;7</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;kind&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">4</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;&nbsp;8</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;maxn&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">500</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;&nbsp;9</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;MAX&nbsp;105</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;10</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;root,&nbsp;tot;<br /></span><span style="color: #008080">&nbsp;11</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;n,&nbsp;m;<br /></span><span style="color: #008080">&nbsp;12</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;que[maxn],&nbsp;head,&nbsp;tail;<br /></span><span style="color: #008080">&nbsp;13</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;visit[maxn];<br /></span><span style="color: #008080">&nbsp;14</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;Node&nbsp;{<br /></span><span style="color: #008080">&nbsp;15</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;child[kind];<br /></span><span style="color: #008080">&nbsp;16</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;fail;<br /></span><span style="color: #008080">&nbsp;17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;end;<br /></span><span style="color: #008080">&nbsp;18</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;init()&nbsp;{<br /></span><span style="color: #008080">&nbsp;19</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(child,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(child));<br /></span><span style="color: #008080">&nbsp;20</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fail&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;end&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;21</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;22</span>&nbsp;<span style="color: #000000">}&nbsp;T[maxn];<br /></span><span style="color: #008080">&nbsp;23</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;24</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;init()&nbsp;{<br /></span><span style="color: #008080">&nbsp;25</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;tot&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;26</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;T[root].init();<br /></span><span style="color: #008080">&nbsp;27</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">&nbsp;28</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;29</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;hash(</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;ch)&nbsp;{<br /></span><span style="color: #008080">&nbsp;30</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(ch&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">A</span><span style="color: #000000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;31</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(ch&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">C</span><span style="color: #000000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;32</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(ch&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">G</span><span style="color: #000000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;33</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">3</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;34</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">&nbsp;35</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;36</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;insert(</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">s)&nbsp;{</span><span style="color: #008000">//</span><span style="color: #008000">插入单词</span><span style="color: #008000"><br /></span><span style="color: #008080">&nbsp;37</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;root,&nbsp;index;<br /></span><span style="color: #008080">&nbsp;38</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">*</span><span style="color: #000000">s)&nbsp;{<br /></span><span style="color: #008080">&nbsp;39</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;hash(</span><span style="color: #000000">*</span><span style="color: #000000">s);<br /></span><span style="color: #008080">&nbsp;40</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">T[p].child[index])&nbsp;{<br /></span><span style="color: #008080">&nbsp;41</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T[</span><span style="color: #000000">++</span><span style="color: #000000">tot].init();<br /></span><span style="color: #008080">&nbsp;42</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T[p].child[index]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;tot;<br /></span><span style="color: #008080">&nbsp;43</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;44</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;T[p].child[index];<br /></span><span style="color: #008080">&nbsp;45</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s</span><span style="color: #000000">++</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;46</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;47</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;T[p].end&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;48</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">&nbsp;49</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;50</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;build_ac_auto()&nbsp;{<br /></span><span style="color: #008080">&nbsp;51</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;head&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;tail&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;52</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;que[tail</span><span style="color: #000000">++</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;root;<br /></span><span style="color: #008080">&nbsp;53</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(head&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;tail)&nbsp;{<br /></span><span style="color: #008080">&nbsp;54</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;que[head</span><span style="color: #000000">++</span><span style="color: #000000">];<br /></span><span style="color: #008080">&nbsp;55</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;kind;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;56</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(T[u].child[i])&nbsp;{<br /></span><span style="color: #008080">&nbsp;57</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;son&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;T[u].child[i];<br /></span><span style="color: #008080">&nbsp;58</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;T[u].fail;<br /></span><span style="color: #008080">&nbsp;59</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(u&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;root)&nbsp;T[son].fail&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;root;<br /></span><span style="color: #008080">&nbsp;60</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;{<br /></span><span style="color: #008080">&nbsp;61</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T[son].fail&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;T[p].child[i];<br /></span><span style="color: #008080">&nbsp;62</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T[son].end&nbsp;</span><span style="color: #000000">|=</span><span style="color: #000000">&nbsp;T[T[son].fail].end;<br /></span><span style="color: #008080">&nbsp;63</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;64</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;que[tail</span><span style="color: #000000">++</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;son;<br /></span><span style="color: #008080">&nbsp;65</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;{</span><span style="color: #008000">//</span><span style="color: #008000">trie图，设定虚拟节点</span><span style="color: #008000"><br /></span><span style="color: #008080">&nbsp;66</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;T[u].fail;<br /></span><span style="color: #008080">&nbsp;67</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(u&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;root)&nbsp;T[u].child[i]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;root;<br /></span><span style="color: #008080">&nbsp;68</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;T[u].child[i]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;T[p].child[i];<br /></span><span style="color: #008080">&nbsp;69</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;70</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;71</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;72</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">&nbsp;73</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;74</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;Mat&nbsp;{<br /></span><span style="color: #008080">&nbsp;75</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;ll&nbsp;val[MAX][MAX];<br /></span><span style="color: #008080">&nbsp;76</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;unit()&nbsp;{<br /></span><span style="color: #008080">&nbsp;77</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zero();<br /></span><span style="color: #008080">&nbsp;78</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;MAX;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;val[i][i]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;79</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;80</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;zero()&nbsp;{<br /></span><span style="color: #008080">&nbsp;81</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(val,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(val));<br /></span><span style="color: #008080">&nbsp;82</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;83</span>&nbsp;<span style="color: #000000">}x;<br /></span><span style="color: #008080">&nbsp;84</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;85</span>&nbsp;<span style="color: #000000">Mat&nbsp;</span><span style="color: #0000ff">operator</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">(</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;Mat&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">a,&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;Mat&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">b)&nbsp;{<br /></span><span style="color: #008080">&nbsp;86</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Mat&nbsp;tmp;<br /></span><span style="color: #008080">&nbsp;87</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;tmp.zero();<br /></span><span style="color: #008080">&nbsp;88</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;k&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;k&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;tot;&nbsp;k</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;89</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;tot;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;90</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(a.val[i][k])<br /></span><span style="color: #008080">&nbsp;91</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;j&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;tot;&nbsp;j</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;92</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp.val[i][j]&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;a.val[i][k]&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;b.val[k][j];<br /></span><span style="color: #008080">&nbsp;93</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(tmp.val[i][j]&nbsp;</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;MOD)&nbsp;tmp.val[i][j]&nbsp;</span><span style="color: #000000">%=</span><span style="color: #000000">&nbsp;MOD;<br /></span><span style="color: #008080">&nbsp;94</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;95</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;96</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;97</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;tmp;<br /></span><span style="color: #008080">&nbsp;98</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">&nbsp;99</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">100</span>&nbsp;<span style="color: #000000">Mat&nbsp;</span><span style="color: #0000ff">operator</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">^</span><span style="color: #000000">(Mat&nbsp;x,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;n)&nbsp;{<br /></span><span style="color: #008080">101</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Mat&nbsp;tmp;<br /></span><span style="color: #008080">102</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;tmp.unit();<br /></span><span style="color: #008080">103</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(n)&nbsp;{<br /></span><span style="color: #008080">104</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(n&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;tmp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;tmp&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;x;<br /></span><span style="color: #008080">105</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;x&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;x;<br /></span><span style="color: #008080">106</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;</span><span style="color: #000000">&gt;&gt;=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br /></span><span style="color: #008080">107</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">108</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;tmp;<br /></span><span style="color: #008080">109</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">110</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">111</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;dfs(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u)&nbsp;{<br /></span><span style="color: #008080">112</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;visit[u]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /></span><span style="color: #008080">113</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;kind;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">114</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;v&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;T[u].child[i];<br /></span><span style="color: #008080">115</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">T[v].end)&nbsp;{<br /></span><span style="color: #008080">116</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.val[u][v]</span><span style="color: #000000">++</span><span style="color: #000000">;<br /></span><span style="color: #008080">117</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">visit[v])&nbsp;dfs(v);<br /></span><span style="color: #008080">118</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">119</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">120</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">121</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">122</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main()&nbsp;{<br /></span><span style="color: #008080">123</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;s[</span><span style="color: #000000">15</span><span style="color: #000000">];<br /></span><span style="color: #008080">124</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(</span><span style="color: #000000">~</span><span style="color: #000000">scanf(</span><span style="color: #000000">"</span><span style="color: #000000">%d%d</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">m,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">n))&nbsp;{<br /></span><span style="color: #008080">125</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br /></span><span style="color: #008080">126</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;m;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">127</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000">"</span><span style="color: #000000">%s</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;s);<br /></span><span style="color: #008080">128</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert(s);<br /></span><span style="color: #008080">129</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">130</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;build_ac_auto();<br /></span><span style="color: #008080">131</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.zero();<br /></span><span style="color: #008080">132</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(visit,&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(visit));<br /></span><span style="color: #008080">133</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfs(root);<br /></span><span style="color: #008080">134</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mat&nbsp;ans&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;x&nbsp;</span><span style="color: #000000">^</span><span style="color: #000000">&nbsp;n;<br /></span><span style="color: #008080">135</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ll&nbsp;res&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">136</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;tot;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br /></span><span style="color: #008080">137</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;ans.val[</span><span style="color: #000000">0</span><span style="color: #000000">][i];<br /></span><span style="color: #008080">138</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">%lld\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;res&nbsp;</span><span style="color: #000000">%</span><span style="color: #000000">&nbsp;MOD);<br /></span><span style="color: #008080">139</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">140</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">141</span>&nbsp;<span style="color: #000000">}</span></div><br /><br /><img src ="http://www.cppblog.com/y346491470/aggbug/158559.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2011-10-17 17:04 <a href="http://www.cppblog.com/y346491470/articles/158559.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>zoj 3545 Rescue the Rabbit - AC自动机 + 状态压缩Dp</title><link>http://www.cppblog.com/y346491470/articles/157424.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Mon, 03 Oct 2011 09:55:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/157424.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/157424.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/157424.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/157424.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/157424.html</trackback:ping><description><![CDATA[【题意】：给出n(n&lt;11)个基因串，每个基因串有对应的权值，构造一个长度为l的基因，问最大的权值为多少？重复的基因只能算一次。<br /><br />【题解】：考虑到最多只有10个基因串，我们可以使用状态压缩。对于串之间的关系，我们可以建立对应的ac自动机，然后在ac自动机上进行状态压缩dp即可。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[i][j][k] i表示长度，j表示基因结尾状态，k表示所含基因的状态<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;转移方程，设son为j的孩子节点:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(dp[i][j][k])&nbsp;dp[i+1][son][k|T[son].id] = true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;实现的时候我用了滚动数组压缩空间，具体操作请看代码。<br /><br />【代码】：
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;&nbsp;1</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">iostream</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;&nbsp;2</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">cstdio</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">cstring</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;&nbsp;4</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;std;<br /></span><span style="color: #008080">&nbsp;&nbsp;5</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;kind&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">4</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;&nbsp;6</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;maxn&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">250</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;&nbsp;7</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;score[</span><span style="color: #000000">15</span><span style="color: #000000">];<br /></span><span style="color: #008080">&nbsp;&nbsp;8</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;root,&nbsp;tot;<br /></span><span style="color: #008080">&nbsp;&nbsp;9</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;ch[</span><span style="color: #000000">25</span><span style="color: #000000">];<br /></span><span style="color: #008080">&nbsp;10</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;n,&nbsp;m,&nbsp;l;<br /></span><span style="color: #008080">&nbsp;11</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;que[maxn],&nbsp;head,&nbsp;tail;<br /></span><span style="color: #008080">&nbsp;12</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;13</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;Node&nbsp;{<br /></span><span style="color: #008080">&nbsp;14</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;child[kind];<br /></span><span style="color: #008080">&nbsp;15</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;fail;<br /></span><span style="color: #008080">&nbsp;16</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;id;<br /></span><span style="color: #008080">&nbsp;17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;init()&nbsp;{<br /></span><span style="color: #008080">&nbsp;18</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(child,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">&nbsp;(child));<br /></span><span style="color: #008080">&nbsp;19</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fail&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;id&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;20</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;21</span>&nbsp;<span style="color: #000000">}&nbsp;T[maxn];<br /></span><span style="color: #008080">&nbsp;22</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;23</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;init()&nbsp;{<br /></span><span style="color: #008080">&nbsp;24</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;tot&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;25</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;T[root].init();<br /></span><span style="color: #008080">&nbsp;26</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">&nbsp;27</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;28</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;hash(</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;ch)&nbsp;{<br /></span><span style="color: #008080">&nbsp;29</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(ch&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">A</span><span style="color: #000000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;30</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(ch&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">C</span><span style="color: #000000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;31</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(ch&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">G</span><span style="color: #000000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;32</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">3</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;33</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">&nbsp;34</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;35</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;insert(</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">s,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;id)&nbsp;{</span><span style="color: #008000">//</span><span style="color: #008000">插入单词</span><span style="color: #008000"><br /></span><span style="color: #008080">&nbsp;36</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;root,&nbsp;index;<br /></span><span style="color: #008080">&nbsp;37</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">*</span><span style="color: #000000">s)&nbsp;{<br /></span><span style="color: #008080">&nbsp;38</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;hash(</span><span style="color: #000000">*</span><span style="color: #000000">s);<br /></span><span style="color: #008080">&nbsp;39</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">T[p].child[index])&nbsp;{<br /></span><span style="color: #008080">&nbsp;40</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T[</span><span style="color: #000000">++</span><span style="color: #000000">tot].init();<br /></span><span style="color: #008080">&nbsp;41</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T[p].child[index]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;tot;<br /></span><span style="color: #008080">&nbsp;42</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;43</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;T[p].child[index];<br /></span><span style="color: #008080">&nbsp;44</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s</span><span style="color: #000000">++</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;45</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;46</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;T[p].id&nbsp;</span><span style="color: #000000">|=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;id;<br /></span><span style="color: #008080">&nbsp;47</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">&nbsp;48</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;49</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;build_ac_auto()&nbsp;{<br /></span><span style="color: #008080">&nbsp;50</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;head&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;tail&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;51</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;que[tail</span><span style="color: #000000">++</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;root;<br /></span><span style="color: #008080">&nbsp;52</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(head&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;tail)&nbsp;{<br /></span><span style="color: #008080">&nbsp;53</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;que[head</span><span style="color: #000000">++</span><span style="color: #000000">];<br /></span><span style="color: #008080">&nbsp;54</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;kind;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;55</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(T[u].child[i])&nbsp;{<br /></span><span style="color: #008080">&nbsp;56</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;son&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;T[u].child[i];<br /></span><span style="color: #008080">&nbsp;57</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;T[u].fail;<br /></span><span style="color: #008080">&nbsp;58</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(u&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;root)&nbsp;T[son].fail&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;root;<br /></span><span style="color: #008080">&nbsp;59</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;{<br /></span><span style="color: #008080">&nbsp;60</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T[son].fail&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;T[p].child[i];<br /></span><span style="color: #008080">&nbsp;61</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T[son].id&nbsp;</span><span style="color: #000000">|=</span><span style="color: #000000">&nbsp;T[T[son].fail].id;<br /></span><span style="color: #008080">&nbsp;62</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;63</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;que[tail</span><span style="color: #000000">++</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;son;<br /></span><span style="color: #008080">&nbsp;64</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;{</span><span style="color: #008000">//</span><span style="color: #008000">trie图，设定虚拟节点</span><span style="color: #008000"><br /></span><span style="color: #008080">&nbsp;65</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;T[u].fail;<br /></span><span style="color: #008080">&nbsp;66</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(u&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;root)&nbsp;T[u].child[i]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;root;<br /></span><span style="color: #008080">&nbsp;67</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;T[u].child[i]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;T[p].child[i];<br /></span><span style="color: #008080">&nbsp;68</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;69</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;70</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;71</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">&nbsp;72</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;dp[</span><span style="color: #000000">2</span><span style="color: #000000">][</span><span style="color: #000000">205</span><span style="color: #000000">][</span><span style="color: #000000">1</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">10</span><span style="color: #000000">];</span><span style="color: #008000">//</span><span style="color: #008000">滚动数组,不用滚动也可以</span><span style="color: #008000"><br /></span><span style="color: #008080">&nbsp;73</span>&nbsp;<span style="color: #008000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;solve()&nbsp;{<br /></span><span style="color: #008080">&nbsp;74</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;mask&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;n,&nbsp;now,&nbsp;next;<br /></span><span style="color: #008080">&nbsp;75</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;memset(dp,&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(dp));<br /></span><span style="color: #008080">&nbsp;76</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;dp[</span><span style="color: #000000">0</span><span style="color: #000000">][</span><span style="color: #000000">0</span><span style="color: #000000">][</span><span style="color: #000000">0</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;77</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;l;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;78</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;now&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">%</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;79</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(i&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">%</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;80</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(dp[next],&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(dp[next]));<br /></span><span style="color: #008080">&nbsp;81</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;j&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;tot;&nbsp;j</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;82</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;k&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;k&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;mask;&nbsp;k</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;83</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(dp[now][j][k])&nbsp;{<br /></span><span style="color: #008080">&nbsp;84</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;p&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;kind;&nbsp;p</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;85</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;son&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;T[j].child[p];<br /></span><span style="color: #008080">&nbsp;86</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[next][son][k</span><span style="color: #000000">|</span><span style="color: #000000">T[son].id]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;87</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;88</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;89</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;90</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;91</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">&nbsp;92</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;ans&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">(</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">30</span><span style="color: #000000">);<br /></span><span style="color: #008080">&nbsp;93</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;now&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;l&nbsp;</span><span style="color: #000000">%</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;94</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;=</span><span style="color: #000000">&nbsp;tot;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;95</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;j&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;mask;&nbsp;j</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;96</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(dp[now][i][j])&nbsp;{<br /></span><span style="color: #008080">&nbsp;97</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;t&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;98</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;k&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;k&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;n;&nbsp;k</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">&nbsp;99</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(j&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">1</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;k))&nbsp;t&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;score[k];<br /></span><span style="color: #008080">100</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">101</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;max(ans,&nbsp;t);<br /></span><span style="color: #008080">102</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">103</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">104</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">105</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(ans&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">No&nbsp;Rabbit&nbsp;after&nbsp;2012!\n</span><span style="color: #000000">"</span><span style="color: #000000">);<br /></span><span style="color: #008080">106</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">%d\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;ans);<br /></span><span style="color: #008080">107</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">108</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">109</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main()&nbsp;{<br /></span><span style="color: #008080">110</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(</span><span style="color: #000000">~</span><span style="color: #000000">scanf(</span><span style="color: #000000">"</span><span style="color: #000000">%d%d</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">n,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">l))&nbsp;{<br /></span><span style="color: #008080">111</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br /></span><span style="color: #008080">112</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;n;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">113</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000">"</span><span style="color: #000000">%s%d</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;ch,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">score[i]);<br /></span><span style="color: #008080">114</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert(ch,&nbsp;i);<br /></span><span style="color: #008080">115</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">116</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;build_ac_auto();<br /></span><span style="color: #008080">117</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solve();<br /></span><span style="color: #008080">118</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">119</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">120</span>&nbsp;<span style="color: #000000">}</span></div><br /><br /><img src ="http://www.cppblog.com/y346491470/aggbug/157424.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2011-10-03 17:55 <a href="http://www.cppblog.com/y346491470/articles/157424.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdoj 2222 Keywords Search - ac自动机</title><link>http://www.cppblog.com/y346491470/articles/156479.html</link><dc:creator>y @ The Angry Teletubbies</dc:creator><author>y @ The Angry Teletubbies</author><pubDate>Wed, 21 Sep 2011 14:50:00 GMT</pubDate><guid>http://www.cppblog.com/y346491470/articles/156479.html</guid><wfw:comment>http://www.cppblog.com/y346491470/comments/156479.html</wfw:comment><comments>http://www.cppblog.com/y346491470/articles/156479.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/y346491470/comments/commentRss/156479.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/y346491470/services/trackbacks/156479.html</trackback:ping><description><![CDATA[【题意】：给出n个单词，和一个文本，单词可能会重复出现，问文本中一共出现了多少个给定的单词？<br /><br />【题解】：AC自动机模板题。<br /><br />【代码】： 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">iostream</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">cstdio</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">cstring</span><span style="color: #000000">"</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;std;<br /></span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;maxn&nbsp;700050</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;kind&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">26</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;root,&nbsp;tot;<br /></span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;que[maxn],&nbsp;head,&nbsp;tail;<br /></span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;n,&nbsp;m;<br /></span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;t[</span><span style="color: #000000">1005000</span><span style="color: #000000">];<br /></span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">12</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;Node&nbsp;{<br /></span><span style="color: #008080">13</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;child[kind],&nbsp;fail,&nbsp;cnt;<br /></span><span style="color: #008080">14</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;init()&nbsp;{<br /></span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(child,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">&nbsp;(child));<br /></span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fail&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">,&nbsp;cnt&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">18</span>&nbsp;<span style="color: #000000">}T[maxn];<br /></span><span style="color: #008080">19</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">20</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;init()&nbsp;{<br /></span><span style="color: #008080">21</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;tot&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">22</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;T[root].init();<br /></span><span style="color: #008080">23</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">24</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">25</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;insert(</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">s)&nbsp;{</span><span style="color: #008000">//</span><span style="color: #008000">插入单词</span><span style="color: #008000"><br /></span><span style="color: #008080">26</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;root,&nbsp;index;<br /></span><span style="color: #008080">27</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">*</span><span style="color: #000000">s)&nbsp;{<br /></span><span style="color: #008080">28</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">s&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">a</span><span style="color: #000000">'</span><span style="color: #000000">;<br /></span><span style="color: #008080">29</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">T[p].child[index])&nbsp;{<br /></span><span style="color: #008080">30</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T[</span><span style="color: #000000">++</span><span style="color: #000000">tot].init();<br /></span><span style="color: #008080">31</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T[p].child[index]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;tot;<br /></span><span style="color: #008080">32</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">33</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;T[p].child[index];<br /></span><span style="color: #008080">34</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s</span><span style="color: #000000">++</span><span style="color: #000000">;<br /></span><span style="color: #008080">35</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">36</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;T[p].cnt</span><span style="color: #000000">++</span><span style="color: #000000">;<br /></span><span style="color: #008080">37</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">38</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">39</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;build_ac_auto()&nbsp;{<br /></span><span style="color: #008080">40</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;head&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;tail&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">41</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;que[tail</span><span style="color: #000000">++</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;root;<br /></span><span style="color: #008080">42</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(head&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;tail)&nbsp;{<br /></span><span style="color: #008080">43</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;u&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;que[head</span><span style="color: #000000">++</span><span style="color: #000000">];<br /></span><span style="color: #008080">44</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;kind;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">45</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(T[u].child[i])&nbsp;{<br /></span><span style="color: #008080">46</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;son&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;T[u].child[i];<br /></span><span style="color: #008080">47</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;T[u].fail;<br /></span><span style="color: #008080">48</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(u&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;root)&nbsp;T[son].fail&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;root;<br /></span><span style="color: #008080">49</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;T[son].fail&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;T[p].child[i];<br /></span><span style="color: #008080">50</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;que[tail</span><span style="color: #000000">++</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;son;<br /></span><span style="color: #008080">51</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;{</span><span style="color: #008000">//</span><span style="color: #008000">trie图，设定虚拟节点</span><span style="color: #008000"><br /></span><span style="color: #008080">52</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;T[u].fail;<br /></span><span style="color: #008080">53</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(u&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;root)&nbsp;T[u].child[i]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;root;<br /></span><span style="color: #008080">54</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;T[u].child[i]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;T[p].child[i];<br /></span><span style="color: #008080">55</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">56</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">57</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">58</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">59</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">60</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;query(</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">t)&nbsp;{<br /></span><span style="color: #008080">61</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;root,&nbsp;cnt&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">62</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(</span><span style="color: #000000">*</span><span style="color: #000000">t)&nbsp;{<br /></span><span style="color: #008080">63</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;index&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">t&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">a</span><span style="color: #000000">'</span><span style="color: #000000">;<br /></span><span style="color: #008080">64</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;T[p].child[index];<br /></span><span style="color: #008080">65</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;tmp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;p;<br /></span><span style="color: #008080">66</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(tmp&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;root</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">67</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;T[tmp].cnt;<br /></span><span style="color: #008080">68</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T[tmp].cnt&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">69</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;T[tmp].fail;<br /></span><span style="color: #008080">70</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">71</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t</span><span style="color: #000000">++</span><span style="color: #000000">;<br /></span><span style="color: #008080">72</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">73</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;cnt;<br /></span><span style="color: #008080">74</span>&nbsp;<span style="color: #000000">}<br /></span><span style="color: #008080">75</span>&nbsp;<span style="color: #000000"><br /></span><span style="color: #008080">76</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main()&nbsp;{<br /></span><span style="color: #008080">77</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;T;<br /></span><span style="color: #008080">78</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;s[</span><span style="color: #000000">55</span><span style="color: #000000">];<br /></span><span style="color: #008080">79</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000">"</span><span style="color: #000000">%d</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">T);<br /></span><span style="color: #008080">80</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(T</span><span style="color: #000000">--</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">81</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000">"</span><span style="color: #000000">%d</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">n);<br /></span><span style="color: #008080">82</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br /></span><span style="color: #008080">83</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;n;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{<br /></span><span style="color: #008080">84</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000">"</span><span style="color: #000000">%s</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;s);<br /></span><span style="color: #008080">85</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert(s);<br /></span><span style="color: #008080">86</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">87</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000">"</span><span style="color: #000000">%s</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;t);<br /></span><span style="color: #008080">88</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;build_ac_auto();<br /></span><span style="color: #008080">89</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;ans&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;query(t);<br /></span><span style="color: #008080">90</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">%d\n</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;ans);<br /></span><span style="color: #008080">91</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080">92</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /></span><span style="color: #008080">93</span>&nbsp;<span style="color: #000000">}</span></div><br /><img src ="http://www.cppblog.com/y346491470/aggbug/156479.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/y346491470/" target="_blank">y @ The Angry Teletubbies</a> 2011-09-21 22:50 <a href="http://www.cppblog.com/y346491470/articles/156479.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>