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

<channel>
	<title>Lync.in &#187; Computer Science</title>
	<atom:link href="http://lync.in/category/computer-science/feed/" rel="self" type="application/rss+xml" />
	<link>http://lync.in</link>
	<description>Link the world.</description>
	<lastBuildDate>Thu, 19 Jan 2012 09:41:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>统计自然语言理解的两本书</title>
		<link>http://lync.in/nlp-books-recommendation/</link>
		<comments>http://lync.in/nlp-books-recommendation/#comments</comments>
		<pubDate>Sat, 03 Oct 2009 14:47:57 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Natural Language Processing]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[NLP]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://lync.in/?p=322</guid>
		<description><![CDATA[本文作者：Chris接下来会做一个跟自然语言处理（Natural Language Processing, nlp）相关的工程，因为我之前几乎没有接触过这方面的知识，而且自己的语文也实在烂得可以...（所以这次怎么也得用统计的方法来做了= =）就趁十一在家有空补点课。 作为一个超级门外汉，选几本合适的入门教材开始啃乃当务之急。一般而言，对于此类前沿技术的学习最好从理论和实践两个方面入手，一方面要了解理论知识，学习别人对于问题的解决思路和方法；另一方面，要找一些实际能够动手操作的实验资料，通过实验了解理论中存在的问题以及改进的方向。在自然语言处理方向尤为如此。英文和中文之间存在巨大差异，就我个人感觉而言，英文虽然算不上特别严谨的语言，但其语法结构相对中文要清晰很多，加上中文一词多义、一字多义的现象普遍存在，完全照搬英文语言理解的理论来处理中文是不合适的。所以，在学习他人的知识的同时必须要自己动手试试，从而才能认识到中英文之间的区别，才能知道哪些前人的知识可以沿用，哪些需要修改。 理论方面 因为打算使用统计方法，听大牛推荐，去图书馆找了一本《统计自然语言处理基础》（Foundations of Statistical Natural Language Processing, C. D. Manning &#38; H. Schütze），这本书的结构很清晰，从基础的哲学观点、数学基础、语言学基础出发，介绍了关于词法、语法方面的重要方法，最后还介绍了如机器翻译、信息检索等应用技术的理论基础。不得不提的是，此书的中文版翻译得极烂...体现了我国教授逼迫其学生翻译国外著作的应有水平...不过，书虽然翻得烂，这本书在图表、公式上还是做得不错，看上去是类似Latex排版出来的，比起某些翻译书籍里用的MathType写的丑陋无比的公式或者是直接从扫描搞上截取的比例错乱、七歪八斜的图示，这本书的翻译也算是花了些功夫，还不至于让人倒胃口。 实践方面 图书馆里没有类似的书，只好自己去找电子版的，这几天大致搜索了一下，找到了Natural Language Processing with Python这本书，写得很不错，由浅入深，而且在学习过程中还提供了许多实际的例子和语料库可供操作，每章后面还有一系列习题可以练习，并且你不用担心不懂Python，这本书是面向不熟悉Python的童鞋们写的（我就是= =）。最赞的是，这本书配套有一个内容丰富的资源网站：www.nltk.org。上面有各种相关文档，包括一个用Python写的开源的自然语言处理工具库（NLTK）和一系列教学资源。但是很遗憾...这个网站在大墙之外...（WTF！我想到了一张图= =...） （言归正传...）上面有很多自然语言方面的资料，非常值得参考。事实上，和网站上的大部分资源一样，Natural Language Processing with Python这本书是基于Creative Commons协议的，也就是说我们可以免费看这本书，但是由于大墙不让它进来，每次都要翻墙去看实在麻烦，所以么，有需要的朋友也不要麻烦了，直接去这里下载PDF版吧。 其实，选择统计方法只是因为我想随大流（不想做博士阿= =b）。我本人并不认为自然语言是一种统计模型，一个简单的例子，为什么世界上大部分国家的语言中，“爸爸”和“妈妈”两个词的发音都是类似的？这显然暗示了，在人脑中应该存在一种语言的遗传模型。所以，纯粹用统计的方法来理解自然语言一定是存在问题的。但从目前人类掌握的技术而言，似乎统计方法是少数能够比较好得逼近我们人脑中存在的那个语言模型的方法之一。小平筒子说过，白猫黑猫抓到老鼠的就是好猫，从这种务实的角度看，选择统计应该是近期比较好的一个方法了吧。 Lync.in 是一个多人协作博客，欢迎您 查看原文 以获得更好的阅读体验。]]></description>
			<content:encoded><![CDATA[<div class="feed-before" style="margin:15px 0; clear:both;">本文作者：<a href="http://lync.in/author/2/" title="Posts by Chris">Chris</a></div><p>接下来会做一个跟自然语言处理（Natural Language Processing, nlp）相关的工程，因为我之前几乎没有接触过这方面的知识，而且自己的语文也实在烂得可以...（所以这次怎么也得用统计的方法来做了= =）就趁十一在家有空补点课。</p>
<p>作为一个超级门外汉，选几本合适的入门教材开始啃乃当务之急。一般而言，对于此类前沿技术的学习最好从理论和实践两个方面入手，一方面要了解理论知识，学习别人对于问题的解决思路和方法；另一方面，要找一些实际能够动手操作的实验资料，通过实验了解理论中存在的问题以及改进的方向。在自然语言处理方向尤为如此。英文和中文之间存在巨大差异，就我个人感觉而言，英文虽然算不上特别严谨的语言，但其语法结构相对中文要清晰很多，加上中文一词多义、一字多义的现象普遍存在，完全照搬英文语言理解的理论来处理中文是不合适的。所以，在学习他人的知识的同时必须要自己动手试试，从而才能认识到中英文之间的区别，才能知道哪些前人的知识可以沿用，哪些需要修改。</p>
<p><span id="more-322"></span></p>
<h5>理论方面</h5>
<p>因为打算使用统计方法，听大牛推荐，去图书馆找了一本《统计自然语言处理基础》（<em><a href="http://www.amazon.com/Foundations-Statistical-Natural-Language-Processing/dp/0262133601" target="_blank">Foundations of Statistical Natural Language Processing</a></em>, C. D. Manning &amp; H. Schütze），这本书的结构很清晰，从基础的哲学观点、数学基础、语言学基础出发，介绍了关于词法、语法方面的重要方法，最后还介绍了如机器翻译、信息检索等应用技术的理论基础。不得不提的是，此书的中文版翻译得极烂...体现了我国教授逼迫其学生翻译国外著作的应有水平...不过，书虽然翻得烂，这本书在图表、公式上还是做得不错，看上去是类似Latex排版出来的，比起某些翻译书籍里用的MathType写的丑陋无比的公式或者是直接从扫描搞上截取的比例错乱、七歪八斜的图示，这本书的翻译也算是花了些功夫，还不至于让人倒胃口。</p>
<h5><strong>实践方面</strong></h5>
<p><strong></strong>图书馆里没有类似的书，只好自己去找电子版的，这几天大致搜索了一下，找到了<em><a href="http://www.amazon.com/Natural-Language-Processing-Python-Steven/dp/0596516495" target="_blank">Natural Language Processing with Python</a></em>这本书，写得很不错，由浅入深，而且在学习过程中还提供了许多实际的例子和语料库可供操作，每章后面还有一系列习题可以练习，并且你不用担心不懂Python，这本书是面向不熟悉Python的童鞋们写的（我就是= =）。最赞的是，这本书配套有一个内容丰富的资源网站：<a href="http://www.nltk.org">www.nltk.org</a>。上面有各种相关文档，包括一个用Python写的开源的自然语言处理工具库（NLTK）和一系列教学资源。但是很遗憾...这个网站在大墙之外...（WTF！我想到了一张图= =...）</p>
<div id="attachment_323" class="wp-caption aligncenter" style="width: 460px"><a href="http://lync.in/wp-content/uploads/2009/10/17979_12542059510HV8.jpg" class="highslide-image" onclick="return hs.expand(this);"><img class="size-medium wp-image-323 " title="大爷建的墙...大妈也耐不住寂寞阿..." src="http://lync.in/wp-content/uploads/2009/10/17979_12542059510HV8-450x337.jpg" alt="大爷建的墙...大妈也耐不住寂寞阿..." width="450" height="337" /></a><p class="wp-caption-text">大爷建的墙...大妈也耐不住寂寞阿...</p></div>
<p>（言归正传...）上面有很多自然语言方面的资料，非常值得参考。事实上，和网站上的大部分资源一样，Natural Language Processing with Python这本书是基于<a href="http://en.wikipedia.org/wiki/Creative_Commons" target="_blank">Creative Commons</a>协议的，也就是说我们可以免费看这本书，但是由于大墙不让它进来，每次都要翻墙去看实在麻烦，所以么，有需要的朋友也不要麻烦了，直接去<a href="http://sites.google.com/site/syncris/e/0596516495.pdf?attredirects=0" target="_blank">这里</a>下载PDF版吧。</p>
<p>其实，选择统计方法只是因为我想随大流（不想做博士阿= =b）。我本人并不认为自然语言是一种统计模型，一个简单的例子，为什么世界上大部分国家的语言中，“爸爸”和“妈妈”两个词的发音都是类似的？这显然暗示了，在人脑中应该存在一种语言的遗传模型。所以，纯粹用统计的方法来理解自然语言一定是存在问题的。但从目前人类掌握的技术而言，似乎统计方法是少数能够比较好得逼近我们人脑中存在的那个语言模型的方法之一。小平筒子说过，白猫黑猫抓到老鼠的就是好猫，从这种务实的角度看，选择统计应该是近期比较好的一个方法了吧。</p>
<div class="feed-after" style="margin:15px 0; clear:both;"><a href="http://lync.in">Lync.in</a> 是一个多人协作博客，欢迎您 <a href="http://lync.in/nlp-books-recommendation/">查看原文</a> 以获得更好的阅读体验。</div>]]></content:encoded>
			<wfw:commentRss>http://lync.in/nlp-books-recommendation/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>多边形封闭区域算法</title>
		<link>http://lync.in/detect-point-inside-polygon/</link>
		<comments>http://lync.in/detect-point-inside-polygon/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 05:01:12 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Algorithm]]></category>
		<category><![CDATA[computational graphics]]></category>

		<guid isPermaLink="false">http://lync.in/?p=291</guid>
		<description><![CDATA[本文作者：Chris前些天在考虑一个几何算法，关于如何判断一个点是否在一个给定的多边形内部。这应该是一个比较常规的算法，我以前对几何算法了解的不多，所以既然想到了就稍微研究了一下。 查了一下相关的资料，目前有几个O(N)的算法，其中N是多边形的顶点数。 第一个叫做交替（Alternative）算法。 如下图所示 算法检查所给定的点和在该点右边的多边形区域的边界的交点数，若交点数为奇数，则该点在多边形内部，若交点数为偶数，则该点在多边形外部。可以想象成从一个点向右发出一条射线，然后计算这条射线与多边形边界的交点数。从上图中标出的蓝色点向右射出的射线与多边形有1个交点，故判定其在多边形内部，而从标出的白色点向右射出的射线则有偶数个交点，故判定其在多边形外部。 这个算法的叙述起来很平常，但实现起来却有两个略带Tricky的地方。 其一是坐标精度引起的，因为计算机对于坐标的描述是离散的，在计算向右射出的射线与多边形交点的时候很容易出现射线与多边形的某几条边平行的情况，对于这种情况，我们的算法需要向前多看几个点，以确定射线是确实与多边形相交还是只是“擦过”而已。 其二是对于非常靠近多边形边界的点的判定，你可以认为这些点是在多边形外，也可以认为是在多边形内，但你必须在算法中描述这些情况。 感兴趣的可以了解一下我的算法实现，附在文末。 这个算法在多边形为简单多边形的情况下是没有异议的，但在复杂多边形的情况下会有一些疑问，这涉及到“在多边形内还是多边形外”的定义问题。如下图 图中，如果用Alternative算法，则被多边形包围的那个点被判断为在多边形外部。 如果你认为这种定义不符合你的需要，那么有另外一种算法，称为Winding算法。 Winding算法的思路是这样的，将你置身于所给定的点上，然后让你的视线从多边形边界上的一点开始，选择一个方向绕着多边形的边界转一圈，如果你发现你的身体在这个过程中转了360度的非零整数倍，那么你所站在的这个点在多边形的内部，如果你的身体并没有转动（事实上你转动了，只是正向和逆向的转动抵消了），那么就在多边形的外部。 这个算法我没有去实现，一般来说它要比Alternative算法慢，因为它需要计算每条多边形的边与多给定的点之间的夹角。 关于算法实现： 程序的界面是用WTL写的，如果你想要编译源代码，请在Visual Studio中指定WTL的include文件夹位置。 算法核心代码如下，其中vSelectionPoints是多边形 C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 [...]]]></description>
			<content:encoded><![CDATA[<div class="feed-before" style="margin:15px 0; clear:both;">本文作者：<a href="http://lync.in/author/2/" title="Posts by Chris">Chris</a></div><p>前些天在考虑一个几何算法，关于如何判断一个点是否在一个给定的多边形内部。这应该是一个比较常规的算法，我以前对几何算法了解的不多，所以既然想到了就稍微研究了一下。<br />
查了一下相关的资料，目前有几个O(N)的算法，其中N是多边形的顶点数。</p>
<p>第一个叫做<strong>交替（Alternative）算法</strong>。 如下图所示</p>
<p><a href="http://lync.in/wp-content/uploads/2009/09/2009-09-24_1215291.png" class="highslide-image" onclick="return hs.expand(this);"><img src="http://lync.in/wp-content/uploads/2009/09/2009-09-24_1215291-450x345.png" alt="交替法" title="交替法" width="450" height="345" class="aligncenter size-medium wp-image-301" /></a></p>
<p><span id="more-291"></span><br />
算法检查所给定的点和在该点右边的多边形区域的边界的交点数，若交点数为奇数，则该点在多边形内部，若交点数为偶数，则该点在多边形外部。可以想象成从一个点向右发出一条射线，然后计算这条射线与多边形边界的交点数。从上图中标出的蓝色点向右射出的射线与多边形有1个交点，故判定其在多边形内部，而从标出的白色点向右射出的射线则有偶数个交点，故判定其在多边形外部。</p>
<p>这个算法的叙述起来很平常，但实现起来却有两个略带Tricky的地方。</p>
<p>其一是坐标精度引起的，因为计算机对于坐标的描述是离散的，在计算向右射出的射线与多边形交点的时候很容易出现射线与多边形的某几条边平行的情况，对于这种情况，我们的算法需要向前多看几个点，以确定射线是确实与多边形相交还是只是“擦过”而已。</p>
<p>其二是对于非常靠近多边形边界的点的判定，你可以认为这些点是在多边形外，也可以认为是在多边形内，但你必须在算法中描述这些情况。</p>
<p>感兴趣的可以了解一下我的算法实现，附在文末。</p>
<p>这个算法在多边形为简单多边形的情况下是没有异议的，但在复杂多边形的情况下会有一些疑问，这涉及到“在多边形内还是多边形外”的定义问题。如下图</p>
<p><a href="http://lync.in/wp-content/uploads/2009/09/2009-09-24_122701.png" class="highslide-image" onclick="return hs.expand(this);"><img src="http://lync.in/wp-content/uploads/2009/09/2009-09-24_122701-450x351.png" alt="2009-09-24_122701" title="2009-09-24_122701" width="450" height="351" class="aligncenter size-medium wp-image-294" /></a></p>
<p>图中，如果用Alternative算法，则被多边形包围的那个点被判断为在多边形外部。</p>
<p>如果你认为这种定义不符合你的需要，那么有另外一种算法，称为<a href="http://en.wikipedia.org/wiki/Winding_number" target="_blank"><strong>Winding算法</strong></a>。</p>
<p>Winding算法的思路是这样的，将你置身于所给定的点上，然后让你的视线从多边形边界上的一点开始，选择一个方向绕着多边形的边界转一圈，如果你发现你的身体在这个过程中转了360度的非零整数倍，那么你所站在的这个点在多边形的内部，如果你的身体并没有转动（事实上你转动了，只是正向和逆向的转动抵消了），那么就在多边形的外部。</p>
<p>这个算法我没有去实现，一般来说它要比Alternative算法慢，因为它需要计算每条多边形的边与多给定的点之间的夹角。</p>
<p><strong>关于算法实现：</strong></p>
<p>程序的界面是用WTL写的，如果你想要编译源代码，请在Visual Studio中指定WTL的include文件夹位置。</p>
<p>算法核心代码如下，其中vSelectionPoints是多边形</p>

<div class="wp_syntax_wrapper"><span class="wp_syntax_lang">C</span><div class="wp_syntax" style="background:#2c2c2c; overflow:auto"><table><tr><td class="line_numbers" style="color:#eee; background:#3c3c3c"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
</pre></td><td class="code"><pre class="c" style="color: #FFF; font-family:&quot;Consolas&quot;,monospace,&quot;Courier New&quot;"><span style="color: #999;">// thePoint：给定的点</span>
<span style="color: #999;">// vSelectionPoints：给定的多边形顶点向量</span>
BOOL CheckInside<span style="color: #CCC;">&#40;</span>CPoint thePoint<span style="color: #CCC;">,</span> std<span style="color: #CCC;">::</span><span style="color: #FFF;">vector</span> vSelectionPoints<span style="color: #CCC;">&#41;</span>
<span style="color: #CCC;">&#123;</span>
    <span style="color: #99FFFF;">int</span> nCrossCount <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span>
    <span style="color: #3D9EDD;">for</span> <span style="color: #CCC;">&#40;</span>size_t j <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span> j <span style="color: #CCC;">&lt;</span> vSelectionPoints.<span style="color: #FFF;">size</span><span style="color: #CCC;">&#40;</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span> <span style="color: #CCC;">++</span>j<span style="color: #CCC;">&#41;</span>
    <span style="color: #CCC;">&#123;</span>
        CPoint <span style="color: #CCC;">&amp;</span>p1 <span style="color: #CCC;">=</span> vSelectionPoints<span style="color: #CCC;">&#91;</span>j<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">;</span>
        CPoint <span style="color: #CCC;">&amp;</span>p2 <span style="color: #CCC;">=</span> vSelectionPoints<span style="color: #CCC;">&#91;</span><span style="color: #CCC;">&#40;</span>j<span style="color: #CCC;">+</span><span style="color: #FFCC00;">1</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">%</span>vSelectionPoints.<span style="color: #FFF;">size</span><span style="color: #CCC;">&#40;</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">&#93;</span><span style="color: #CCC;">;</span>
        <span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>thePoint <span style="color: #CCC;">==</span> p1 <span style="color: #CCC;">||</span> thePoint <span style="color: #CCC;">==</span> p2<span style="color: #CCC;">&#41;</span>
        <span style="color: #CCC;">&#123;</span>
            nCrossCount <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span>
            <span style="color: #F2B646;">break</span><span style="color: #CCC;">;</span>
        <span style="color: #CCC;">&#125;</span>
        <span style="color: #3D9EDD;">else</span> <span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>thePoint.<span style="color: #FFF;">y</span> <span style="color: #CCC;">&gt;</span> max<span style="color: #CCC;">&#40;</span>p1.<span style="color: #FFF;">y</span><span style="color: #CCC;">,</span> p2.<span style="color: #FFF;">y</span><span style="color: #CCC;">&#41;</span> <span style="color: #CCC;">||</span> thePoint.<span style="color: #FFF;">y</span> <span style="color: #CCC;">&lt;</span> min<span style="color: #CCC;">&#40;</span>p1.<span style="color: #FFF;">y</span><span style="color: #CCC;">,</span> p2.<span style="color: #FFF;">y</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">&#41;</span>
        <span style="color: #CCC;">&#123;</span>
            <span style="color: #3D9EDD;">continue</span><span style="color: #CCC;">;</span>
        <span style="color: #CCC;">&#125;</span>
        <span style="color: #3D9EDD;">else</span> <span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>thePoint.<span style="color: #FFF;">y</span> <span style="color: #CCC;">&lt;</span> max<span style="color: #CCC;">&#40;</span>p1.<span style="color: #FFF;">y</span><span style="color: #CCC;">,</span> p2.<span style="color: #FFF;">y</span><span style="color: #CCC;">&#41;</span> <span style="color: #CCC;">&amp;&amp;</span> thePoint.<span style="color: #FFF;">y</span> <span style="color: #CCC;">&gt;</span> min<span style="color: #CCC;">&#40;</span>p1.<span style="color: #FFF;">y</span><span style="color: #CCC;">,</span> p2.<span style="color: #FFF;">y</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">&#41;</span>
        <span style="color: #CCC;">&#123;</span>
            <span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>p2.<span style="color: #FFF;">x</span> <span style="color: #CCC;">==</span> p1.<span style="color: #FFF;">x</span><span style="color: #CCC;">&#41;</span>
            <span style="color: #CCC;">&#123;</span>
                <span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>thePoint.<span style="color: #FFF;">x</span> <span style="color: #CCC;">==</span> p1.<span style="color: #FFF;">x</span><span style="color: #CCC;">&#41;</span>
                <span style="color: #CCC;">&#123;</span>
                    nCrossCount <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span>
                    <span style="color: #F2B646;">break</span><span style="color: #CCC;">;</span>
                <span style="color: #CCC;">&#125;</span>
                <span style="color: #3D9EDD;">else</span> <span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>thePoint.<span style="color: #FFF;">x</span> <span style="color: #CCC;">&lt;</span> p1.<span style="color: #FFF;">x</span><span style="color: #CCC;">&#41;</span>
                <span style="color: #CCC;">&#123;</span>
                    nCrossCount<span style="color: #CCC;">++;</span>
                <span style="color: #CCC;">&#125;</span>
            <span style="color: #CCC;">&#125;</span>
            <span style="color: #3D9EDD;">else</span>
            <span style="color: #CCC;">&#123;</span>
                <span style="color: #99FFFF;">double</span> fCrossX <span style="color: #CCC;">=</span> <span style="color: #CCC;">&#40;</span>thePoint.<span style="color: #FFF;">y</span> <span style="color: #CCC;">-</span> p1.<span style="color: #FFF;">y</span><span style="color: #CCC;">&#41;</span> <span style="color: #CCC;">*</span> <span style="color: #99FFFF;">double</span><span style="color: #CCC;">&#40;</span>p2.<span style="color: #FFF;">x</span> <span style="color: #CCC;">-</span> p1.<span style="color: #FFF;">x</span><span style="color: #CCC;">&#41;</span> <span style="color: #CCC;">/</span> <span style="color: #99FFFF;">double</span><span style="color: #CCC;">&#40;</span>p2.<span style="color: #FFF;">y</span> <span style="color: #CCC;">-</span> p1.<span style="color: #FFF;">y</span><span style="color: #CCC;">&#41;</span> <span style="color: #CCC;">+</span> p1.<span style="color: #FFF;">x</span><span style="color: #CCC;">;</span>
                <span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>fabs<span style="color: #CCC;">&#40;</span>fCrossX <span style="color: #CCC;">-</span> thePoint.<span style="color: #FFF;">x</span><span style="color: #CCC;">&#41;</span> <span style="color: #CCC;">&lt;</span> ESPILON<span style="color: #CCC;">&#41;</span>
                <span style="color: #CCC;">&#123;</span>
                    nCrossCount <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span>
                    <span style="color: #F2B646;">break</span><span style="color: #CCC;">;</span>
                <span style="color: #CCC;">&#125;</span>
                <span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>fCrossX <span style="color: #CCC;">&gt;</span> thePoint.<span style="color: #FFF;">x</span><span style="color: #CCC;">&#41;</span>
                <span style="color: #CCC;">&#123;</span>
                    nCrossCount<span style="color: #CCC;">++;</span>
                <span style="color: #CCC;">&#125;</span>
            <span style="color: #CCC;">&#125;</span>
        <span style="color: #CCC;">&#125;</span>
        <span style="color: #3D9EDD;">else</span>
        <span style="color: #CCC;">&#123;</span>
            <span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>thePoint.<span style="color: #FFF;">y</span> <span style="color: #CCC;">!=</span> p1.<span style="color: #FFF;">y</span> <span style="color: #CCC;">&amp;&amp;</span> thePoint.<span style="color: #FFF;">y</span> <span style="color: #CCC;">==</span> p2.<span style="color: #FFF;">y</span> <span style="color: #CCC;">&amp;&amp;</span> thePoint.<span style="color: #FFF;">x</span> <span style="color: #CCC;">&lt;</span> p2.<span style="color: #FFF;">x</span><span style="color: #CCC;">&#41;</span>
            <span style="color: #CCC;">&#123;</span>
                <span style="color: #3D9EDD;">while</span><span style="color: #CCC;">&#40;</span>TRUE<span style="color: #CCC;">&#41;</span>
                <span style="color: #CCC;">&#123;</span>
                    j<span style="color: #CCC;">++;</span>
                    CPoint <span style="color: #CCC;">*</span>pp3 <span style="color: #CCC;">=</span> <span style="color: #CCC;">&amp;</span>vSelectionPoints<span style="color: #CCC;">&#91;</span><span style="color: #CCC;">&#40;</span>j<span style="color: #CCC;">+</span><span style="color: #FFCC00;">1</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">%</span>vSelectionPoints.<span style="color: #FFF;">size</span><span style="color: #CCC;">&#40;</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">&#93;</span><span style="color: #CCC;">;</span>
                    <span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>pp3<span style="color: #CCC;">-&gt;</span>y <span style="color: #CCC;">!=</span> p2.<span style="color: #FFF;">y</span><span style="color: #CCC;">&#41;</span>
                    <span style="color: #CCC;">&#123;</span>
                        <span style="color: #F2B646;">break</span><span style="color: #CCC;">;</span>
                    <span style="color: #CCC;">&#125;</span>
                <span style="color: #CCC;">&#125;</span>
&nbsp;
                CPoint <span style="color: #CCC;">&amp;</span>p3 <span style="color: #CCC;">=</span> vSelectionPoints<span style="color: #CCC;">&#91;</span><span style="color: #CCC;">&#40;</span>j<span style="color: #CCC;">+</span><span style="color: #FFCC00;">1</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">%</span>vSelectionPoints.<span style="color: #FFF;">size</span><span style="color: #CCC;">&#40;</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">&#93;</span><span style="color: #CCC;">;</span>
&nbsp;
                <span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>thePoint.<span style="color: #FFF;">y</span> <span style="color: #CCC;">&lt;=</span> max<span style="color: #CCC;">&#40;</span>p1.<span style="color: #FFF;">y</span><span style="color: #CCC;">,</span> p3.<span style="color: #FFF;">y</span><span style="color: #CCC;">&#41;</span> <span style="color: #CCC;">&amp;&amp;</span> thePoint.<span style="color: #FFF;">y</span> <span style="color: #CCC;">&gt;=</span> min<span style="color: #CCC;">&#40;</span>p1.<span style="color: #FFF;">y</span><span style="color: #CCC;">,</span> p3.<span style="color: #FFF;">y</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">&#41;</span>
                <span style="color: #CCC;">&#123;</span>
                    nCrossCount<span style="color: #CCC;">++;</span>
                <span style="color: #CCC;">&#125;</span>
            <span style="color: #CCC;">&#125;</span>
        <span style="color: #CCC;">&#125;</span>
    <span style="color: #CCC;">&#125;</span>
    <span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>nCrossCount <span style="color: #CCC;">%</span> <span style="color: #FFCC00;">2</span> <span style="color: #CCC;">!=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">&#41;</span>
    <span style="color: #CCC;">&#123;</span>
        <span style="color: #3D9EDD;">return</span> TRUE<span style="color: #CCC;">;</span>
    <span style="color: #CCC;">&#125;</span>
    <span style="color: #3D9EDD;">return</span> FALSE<span style="color: #CCC;">;</span>
<span style="color: #CCC;">&#125;</span></pre></td></tr></table></div></div>

<p>工程文件下载：<br />
<a href="http://lync.in/wp-content/uploads/2009/09/WTLSelectionWindow.zip">WTLSelectionWindow</a></p>
<div class="feed-after" style="margin:15px 0; clear:both;"><a href="http://lync.in">Lync.in</a> 是一个多人协作博客，欢迎您 <a href="http://lync.in/detect-point-inside-polygon/">查看原文</a> 以获得更好的阅读体验。</div>]]></content:encoded>
			<wfw:commentRss>http://lync.in/detect-point-inside-polygon/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Code Jam 2009 Qualification :: 我去打酱油</title>
		<link>http://lync.in/code-jam-qualification-lol/</link>
		<comments>http://lync.in/code-jam-qualification-lol/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 15:57:49 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Algorithm]]></category>
		<category><![CDATA[algorithm]]></category>
		<category><![CDATA[Code Jam]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://lync.in/?p=148</guid>
		<description><![CDATA[本文作者：ChrisCode Jam 2009今天进入了资格赛，我算法很弱...纯粹属于打酱油去的选手... 简单说明一下资格赛的题目，一共有3道题目： 1. Alien Language （外星语） 题目大致的意思是，人类掌握了一本外星语字典，然后手头上有部分外星语的碎片看不清楚，其中某些字符可能是多个字符中的一个，要你根据已经掌握的字典计算外星语碎片上的文字共有多少种可能性。 简单举个例子，目前掌握了如下的外星语文字，即字典： abc bca dac dbc cba 那么，对于一个给定的输入(ab)(bc)(ca)——其中()中的字母代表这个位置上可能是()中的某一个字符，有可能在字典中的匹配是abc和bca，也就是有2个匹配。 我做的思路是这样的： 首先根据字典建立一个N叉树，如下图（没有画完整），其中R代表Root。 对于一个给定的输入，比如(ab)(bc)(ca)，则准备一个queue，先将Root放入queue，进入循环，每次从queue中拿出一个node，在这个node下找是否有匹配，若有，则把这些节点放到queue中，直到匹配完整个字符串，在queue中剩下的node数就是可能产生的匹配数。 按理来说，这个算法的复杂度，建树为O(L * D)（L为每个文字的长度，D为字典的大小），在树上搜索为O(M * N) （M为需要匹配的文字的最大长度，N为需要匹配的文字数），那么总的复杂度就是O(L * D + M * N)。但是大概是我的实现太撮...导致Time expire...所以Small Case过了，Large Case failed... 2. Watersheds 这个题目就是给你一个N*N个Cell的地图，地图上每个Cell标注了它的海拔。然后水流从海拔高的Cell将流向海拔低的Cell，每个Cell可以有多条水流入，但只有上、下、左、右中的一个方向可以流出。同一条水流路径上面的Cell被用同一个字符标记，然后标记的顺序也有个讲究，具体请自己看题目，在最后给出。 具体解决思路是：从左上角开始，依次对每一个没有标记过的Cell做rec_mark操作，这个操作首先判断当前这个点是否为Sink（也就是局部最低点），若是则进行标记，若不是，则往最低的方向递归调用rec_mark。 这道题目倒是很顺利，一下就过了。 3. Welcome to Code Jam 这道题目很常规，让你在一个目标字符串中查找某一个固定的pattern出现了多少次，比如 elcomew elcome to code jam 这个字符串中，只有一个子串符合welcome to code jam这个pattern，故输出为1. [...]]]></description>
			<content:encoded><![CDATA[<div class="feed-before" style="margin:15px 0; clear:both;">本文作者：<a href="http://lync.in/author/2/" title="Posts by Chris">Chris</a></div><p>Code Jam 2009今天进入了资格赛，我算法很弱...纯粹属于打酱油去的选手...</p>
<p>简单说明一下资格赛的题目，一共有3道题目：</p>
<h5>1. Alien Language （外星语）</h5>
<p>题目大致的意思是，人类掌握了一本外星语字典，然后手头上有部分外星语的碎片看不清楚，其中某些字符可能是多个字符中的一个，要你根据已经掌握的字典计算外星语碎片上的文字共有多少种可能性。</p>
<p><span id="more-148"></span><br />
简单举个例子，目前掌握了如下的外星语文字，即字典：</p>
<blockquote><p>abc<br />
bca<br />
dac<br />
dbc<br />
cba</p></blockquote>
<p>那么，对于一个给定的输入(ab)(bc)(ca)——其中()中的字母代表这个位置上可能是()中的某一个字符，有可能在字典中的匹配是abc和bca，也就是有2个匹配。</p>
<p>我做的思路是这样的：</p>
<p>首先根据字典建立一个N叉树，如下图（没有画完整），其中R代表Root。</p>
<p><img src="http://lync.in/wp-content/uploads/2009/09/2009-09-03_215618.png" alt="2009-09-03_215618" title="2009-09-03_215618" width="357" height="248" class="aligncenter size-full wp-image-153" /><br />
对于一个给定的输入，比如(ab)(bc)(ca)，则准备一个queue，先将Root放入queue，进入循环，每次从queue中拿出一个node，在这个node下找是否有匹配，若有，则把这些节点放到queue中，直到匹配完整个字符串，在queue中剩下的node数就是可能产生的匹配数。</p>
<p>按理来说，这个算法的复杂度，建树为O(L * D)（L为每个文字的长度，D为字典的大小），在树上搜索为O(M * N) （M为需要匹配的文字的最大长度，N为需要匹配的文字数），那么总的复杂度就是O(L * D + M * N)。但是大概是我的实现太撮...导致Time expire...所以Small Case过了，Large Case failed...</p>
<h5>2. Watersheds</h5>
<p>这个题目就是给你一个N*N个Cell的地图，地图上每个Cell标注了它的海拔。然后水流从海拔高的Cell将流向海拔低的Cell，每个Cell可以有多条水流入，但只有上、下、左、右中的一个方向可以流出。同一条水流路径上面的Cell被用同一个字符标记，然后标记的顺序也有个讲究，具体请自己看题目，在最后给出。</p>
<p>具体解决思路是：从左上角开始，依次对每一个没有标记过的Cell做rec_mark操作，这个操作首先判断当前这个点是否为Sink（也就是局部最低点），若是则进行标记，若不是，则往最低的方向递归调用rec_mark。</p>
<p>这道题目倒是很顺利，一下就过了。</p>
<h5>3. Welcome to Code Jam</h5>
<p>这道题目很常规，让你在一个目标字符串中查找某一个固定的pattern出现了多少次，比如</p>
<blockquote><p>elcomew elcome to code jam</p></blockquote>
<p>这个字符串中，只有一个子串符合welcome to code jam这个pattern，故输出为1.</p>
<p>我开始写这个算法的时候低估了他递归的层次深度，结果没有用动态规划，直接递归了...在small case的时候没问题，我就很兴奋直接上了large case，结果么...fail了...郁闷...</p>
<p>后来加了一个table记录子问题的答案后，就顺利算出结果了，不过么...也来不及了...</p>
<p>总的来说，这次酱油打得不是非常体面，下次我还是做做围观群众吧...</p>
<p>附题目：</p>
<h6>问题1</h6>
<p style="TEXT-ALIGN: center"><img class="size-full wp-image-154 aligncenter" title="2009-09-03_224010" src="http://lync.in/wp-content/uploads/2009/09/2009-09-03_224010.png" alt="2009-09-03_224010" width="567" height="1167" /></p>
<h6>问题2</h6>
<p style="text-align: center;">
<img class="size-full wp-image-155 aligncenter" title="2009-09-03_224107" src="http://lync.in/wp-content/uploads/2009/09/2009-09-03_224107.png" alt="2009-09-03_224107" width="568" height="1381" /></p>
<h6>问题3</h6>
<p style="text-align: center;"><img class="size-full wp-image-156 aligncenter" title="2009-09-03_223914" src="http://lync.in/wp-content/uploads/2009/09/2009-09-03_223914.png" alt="2009-09-03_223914" width="578" height="1010" /></p>
<p>我的代码，很土...</p>
<h6>问题1</h6>

<div class="wp_syntax_wrapper"><span class="wp_syntax_lang">C</span><div class="wp_syntax" style="background:#2c2c2c; overflow:auto"><div class="code"><pre class="c" style="color: #FFF; font-family:&quot;Consolas&quot;,monospace,&quot;Courier New&quot;"><span style="color: #33CC66;">#include &lt;iostream&gt;</span>
<span style="color: #33CC66;">#include &lt;fstream&gt;</span>
<span style="color: #33CC66;">#include &lt;string&gt;</span>
<span style="color: #33CC66;">#include &lt;set&gt;</span>
<span style="color: #33CC66;">#include &lt;map&gt;</span>
<span style="color: #33CC66;">#include &lt;vector&gt;</span>
<span style="color: #33CC66;">#include &lt;queue&gt;</span>
&nbsp;
using namespace std<span style="color: #CCC;">;</span>
&nbsp;
<span style="color: #99FFFF;">struct</span> t_node
<span style="color: #CCC;">&#123;</span>
	map<span style="color: #CCC;">&lt;</span>char<span style="color: #CCC;">,</span> t_node<span style="color: #CCC;">*&gt;</span> m_nodes<span style="color: #CCC;">;</span>
&nbsp;
	~t_node<span style="color: #CCC;">&#40;</span><span style="color: #CCC;">&#41;</span>
	<span style="color: #CCC;">&#123;</span>
		<span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span><span style="color: #CCC;">!</span>m_nodes.<span style="color: #FFF;">empty</span><span style="color: #CCC;">&#40;</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">&#41;</span>
		<span style="color: #CCC;">&#123;</span>
			<span style="color: #3D9EDD;">for</span> <span style="color: #CCC;">&#40;</span>map<span style="color: #CCC;">&lt;</span>char<span style="color: #CCC;">,</span> t_node<span style="color: #CCC;">*&gt;::</span><span style="color: #FFF;">iterator</span> it <span style="color: #CCC;">=</span> m_nodes.<span style="color: #FFF;">begin</span><span style="color: #CCC;">&#40;</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span> it <span style="color: #CCC;">!=</span> m_nodes.<span style="color: #FFF;">end</span><span style="color: #CCC;">&#40;</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span> <span style="color: #CCC;">++</span>it<span style="color: #CCC;">&#41;</span>
			<span style="color: #CCC;">&#123;</span>
				delete it<span style="color: #CCC;">-&gt;</span>second<span style="color: #CCC;">;</span>
			<span style="color: #CCC;">&#125;</span>
		<span style="color: #CCC;">&#125;</span>
	<span style="color: #CCC;">&#125;</span>
<span style="color: #CCC;">&#125;</span><span style="color: #CCC;">;</span>
&nbsp;
&nbsp;
ifstream fin<span style="color: #CCC;">&#40;</span><span style="color: #7ACC00;">&quot;c:<span style="color: #99FF00;">\\</span>A-large.in&quot;</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span>
ofstream fout<span style="color: #CCC;">&#40;</span><span style="color: #7ACC00;">&quot;c:<span style="color: #99FF00;">\\</span>A-large.out&quot;</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span>
&nbsp;
<span style="color: #33CC66;">#define cin fin</span>
<span style="color: #33CC66;">#define cout fout</span>
&nbsp;
<span style="color: #99FFFF;">int</span> main<span style="color: #CCC;">&#40;</span><span style="color: #CCC;">&#41;</span>
<span style="color: #CCC;">&#123;</span>
	<span style="color: #99FFFF;">int</span> L<span style="color: #CCC;">;</span>
	<span style="color: #99FFFF;">int</span> D<span style="color: #CCC;">;</span>
	<span style="color: #99FFFF;">int</span> N<span style="color: #CCC;">;</span>
	cin <span style="color: #CCC;">&gt;&gt;</span> L <span style="color: #CCC;">&gt;&gt;</span> D <span style="color: #CCC;">&gt;&gt;</span> N<span style="color: #CCC;">;</span>
	t_node root<span style="color: #CCC;">;</span>
	t_node <span style="color: #CCC;">*</span>p_node<span style="color: #CCC;">;</span>
	<span style="color: #999;">// Build tree</span>
	<span style="color: #3D9EDD;">for</span> <span style="color: #CCC;">&#40;</span><span style="color: #99FFFF;">int</span> d <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span> d <span style="color: #CCC;">&lt;</span> D<span style="color: #CCC;">;</span> <span style="color: #CCC;">++</span>d<span style="color: #CCC;">&#41;</span>
	<span style="color: #CCC;">&#123;</span>
		string word<span style="color: #CCC;">;</span>
		cin <span style="color: #CCC;">&gt;&gt;</span> word<span style="color: #CCC;">;</span>
		p_node <span style="color: #CCC;">=</span> <span style="color: #CCC;">&amp;</span>root<span style="color: #CCC;">;</span>
		<span style="color: #3D9EDD;">for</span> <span style="color: #CCC;">&#40;</span><span style="color: #99FFFF;">int</span> l <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span> l <span style="color: #CCC;">&lt;</span> L<span style="color: #CCC;">;</span> <span style="color: #CCC;">++</span>l<span style="color: #CCC;">&#41;</span>
		<span style="color: #CCC;">&#123;</span>
			<span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>p_node<span style="color: #CCC;">-&gt;</span>m_nodes.<span style="color: #FFF;">find</span><span style="color: #CCC;">&#40;</span>word<span style="color: #CCC;">&#91;</span>l<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#41;</span> <span style="color: #CCC;">==</span> p_node<span style="color: #CCC;">-&gt;</span>m_nodes.<span style="color: #FFF;">end</span><span style="color: #CCC;">&#40;</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">&#41;</span>
			<span style="color: #CCC;">&#123;</span>
				<span style="color: #999;">// Insert char-&gt;node pair to m_nodes</span>
				p_node<span style="color: #CCC;">-&gt;</span>m_nodes<span style="color: #CCC;">&#91;</span>word<span style="color: #CCC;">&#91;</span>l<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#93;</span> <span style="color: #CCC;">=</span> new t_node<span style="color: #CCC;">;</span>
			<span style="color: #CCC;">&#125;</span>
			p_node <span style="color: #CCC;">=</span> p_node<span style="color: #CCC;">-&gt;</span>m_nodes<span style="color: #CCC;">&#91;</span>word<span style="color: #CCC;">&#91;</span>l<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#93;</span><span style="color: #CCC;">;</span>
		<span style="color: #CCC;">&#125;</span>
	<span style="color: #CCC;">&#125;</span>
	<span style="color: #999;">// Matching cases</span>
	<span style="color: #3D9EDD;">for</span><span style="color: #CCC;">&#40;</span><span style="color: #99FFFF;">int</span> n <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span> n <span style="color: #CCC;">&lt;</span> N<span style="color: #CCC;">;</span> <span style="color: #CCC;">++</span>n<span style="color: #CCC;">&#41;</span>
	<span style="color: #CCC;">&#123;</span>
		string line<span style="color: #CCC;">;</span>
		cin <span style="color: #CCC;">&gt;&gt;</span> line<span style="color: #CCC;">;</span>
		queue<span style="color: #CCC;">&lt;</span>t_node <span style="color: #CCC;">*&gt;</span> possible_matches<span style="color: #CCC;">;</span>
		possible_matches.<span style="color: #FFF;">push</span><span style="color: #CCC;">&#40;</span><span style="color: #CCC;">&amp;</span>root<span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span>
		<span style="color: #3D9EDD;">for</span> <span style="color: #CCC;">&#40;</span>string<span style="color: #CCC;">::</span><span style="color: #FFF;">size_type</span> pos <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span> <span style="color: #CCC;">!</span>possible_matches.<span style="color: #FFF;">empty</span><span style="color: #CCC;">&#40;</span><span style="color: #CCC;">&#41;</span> <span style="color: #CCC;">&amp;&amp;</span> pos <span style="color: #CCC;">&lt;</span> line.<span style="color: #FFF;">length</span><span style="color: #CCC;">&#40;</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span> <span style="color: #CCC;">++</span>pos<span style="color: #CCC;">&#41;</span>
		<span style="color: #CCC;">&#123;</span>
			queue<span style="color: #CCC;">&lt;</span>t_node <span style="color: #CCC;">*&gt;::</span><span style="color: #FFF;">size_type</span> n_matches <span style="color: #CCC;">=</span> possible_matches.<span style="color: #FFF;">size</span><span style="color: #CCC;">&#40;</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span>
			<span style="color: #99FFFF;">int</span> chars_begin <span style="color: #CCC;">=</span> pos<span style="color: #CCC;">;</span>
			<span style="color: #99FFFF;">int</span> chars_end<span style="color: #CCC;">;</span>
			<span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>line<span style="color: #CCC;">&#91;</span>pos<span style="color: #CCC;">&#93;</span> <span style="color: #CCC;">==</span> <span style="color: #7ACC00;">'('</span><span style="color: #CCC;">&#41;</span>
			<span style="color: #CCC;">&#123;</span>
				chars_begin<span style="color: #CCC;">++;</span>
				chars_end <span style="color: #CCC;">=</span> line.<span style="color: #FFF;">find_first_of</span><span style="color: #CCC;">&#40;</span><span style="color: #7ACC00;">')'</span><span style="color: #CCC;">,</span> chars_begin<span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span>
				pos <span style="color: #CCC;">=</span> chars_end<span style="color: #CCC;">;</span>
			<span style="color: #CCC;">&#125;</span>
			<span style="color: #3D9EDD;">else</span>
			<span style="color: #CCC;">&#123;</span>
				chars_end <span style="color: #CCC;">=</span> chars_begin <span style="color: #CCC;">+</span> <span style="color: #FFCC00;">1</span><span style="color: #CCC;">;</span>
			<span style="color: #CCC;">&#125;</span>
			<span style="color: #3D9EDD;">for</span> <span style="color: #CCC;">&#40;</span>queue<span style="color: #CCC;">&lt;</span>t_node <span style="color: #CCC;">*&gt;::</span><span style="color: #FFF;">size_type</span> i <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span> i <span style="color: #CCC;">&lt;</span> n_matches<span style="color: #CCC;">;</span> <span style="color: #CCC;">++</span>i<span style="color: #CCC;">&#41;</span>
			<span style="color: #CCC;">&#123;</span>
				t_node <span style="color: #CCC;">*</span>this_node <span style="color: #CCC;">=</span> possible_matches.<span style="color: #FFF;">front</span><span style="color: #CCC;">&#40;</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span>
				possible_matches.<span style="color: #FFF;">pop</span><span style="color: #CCC;">&#40;</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span>
				<span style="color: #3D9EDD;">for</span> <span style="color: #CCC;">&#40;</span><span style="color: #99FFFF;">int</span> char_pos <span style="color: #CCC;">=</span> chars_begin<span style="color: #CCC;">;</span> char_pos <span style="color: #CCC;">!=</span> chars_end<span style="color: #CCC;">;</span> <span style="color: #CCC;">++</span>char_pos<span style="color: #CCC;">&#41;</span>
				<span style="color: #CCC;">&#123;</span>
					<span style="color: #99FFFF;">char</span> ch <span style="color: #CCC;">=</span> line<span style="color: #CCC;">&#91;</span>char_pos<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">;</span>
					<span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>this_node<span style="color: #CCC;">-&gt;</span>m_nodes.<span style="color: #FFF;">find</span><span style="color: #CCC;">&#40;</span>ch<span style="color: #CCC;">&#41;</span> <span style="color: #CCC;">!=</span> this_node<span style="color: #CCC;">-&gt;</span>m_nodes.<span style="color: #FFF;">end</span><span style="color: #CCC;">&#40;</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">&#41;</span>
					<span style="color: #CCC;">&#123;</span>
						possible_matches.<span style="color: #FFF;">push</span><span style="color: #CCC;">&#40;</span>this_node<span style="color: #CCC;">-&gt;</span>m_nodes<span style="color: #CCC;">&#91;</span>ch<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span>
					<span style="color: #CCC;">&#125;</span>
				<span style="color: #CCC;">&#125;</span>
			<span style="color: #CCC;">&#125;</span>
		<span style="color: #CCC;">&#125;</span>
		<span style="color: #996699;">cout</span> <span style="color: #CCC;">&lt;&lt;</span> <span style="color: #7ACC00;">&quot;Case #&quot;</span> <span style="color: #CCC;">&lt;&lt;</span> n <span style="color: #CCC;">+</span> <span style="color: #FFCC00;">1</span> <span style="color: #CCC;">&lt;&lt;</span> <span style="color: #7ACC00;">&quot;: &quot;</span> <span style="color: #CCC;">&lt;&lt;</span> possible_matches.<span style="color: #FFF;">size</span><span style="color: #CCC;">&#40;</span><span style="color: #CCC;">&#41;</span> <span style="color: #CCC;">&lt;&lt;</span> endl<span style="color: #CCC;">;</span>
	<span style="color: #CCC;">&#125;</span>
	<span style="color: #3D9EDD;">return</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span>
<span style="color: #CCC;">&#125;</span></pre></div></div></div>

<h6>问题2</h6>

<div class="wp_syntax_wrapper"><span class="wp_syntax_lang">C</span><div class="wp_syntax" style="background:#2c2c2c; overflow:auto"><div class="code"><pre class="c" style="color: #FFF; font-family:&quot;Consolas&quot;,monospace,&quot;Courier New&quot;"><span style="color: #33CC66;">#include &lt;iostream&gt;</span>
<span style="color: #33CC66;">#include &lt;string&gt;</span>
<span style="color: #33CC66;">#include &lt;fstream&gt;</span>
&nbsp;
using namespace std<span style="color: #CCC;">;</span>
&nbsp;
<span style="color: #33CC66;">#define MAX_H	100;</span>
<span style="color: #33CC66;">#define MAX_W	100;</span>
&nbsp;
ifstream fin<span style="color: #CCC;">&#40;</span><span style="color: #7ACC00;">&quot;C:<span style="color: #99FF00;">\\</span>B-large.in&quot;</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span>
ofstream fout<span style="color: #CCC;">&#40;</span><span style="color: #7ACC00;">&quot;C:<span style="color: #99FF00;">\\</span>B-large.out&quot;</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span>
&nbsp;
<span style="color: #33CC66;">#define cin fin</span>
<span style="color: #33CC66;">#define cout fout</span>
&nbsp;
<span style="color: #99FFFF;">int</span> map<span style="color: #CCC;">&#91;</span><span style="color: #FFCC00;">100</span><span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span><span style="color: #FFCC00;">100</span><span style="color: #CCC;">&#93;</span> <span style="color: #CCC;">=</span> <span style="color: #CCC;">&#123;</span><span style="color: #FFCC00;">0</span><span style="color: #CCC;">&#125;</span><span style="color: #CCC;">;</span>
<span style="color: #99FFFF;">char</span> mark<span style="color: #CCC;">&#91;</span><span style="color: #FFCC00;">100</span><span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span><span style="color: #FFCC00;">100</span><span style="color: #CCC;">&#93;</span> <span style="color: #CCC;">=</span> <span style="color: #CCC;">&#123;</span><span style="color: #FFCC00;">0</span><span style="color: #CCC;">&#125;</span><span style="color: #CCC;">;</span>
&nbsp;
<span style="color: #99FFFF;">int</span> W<span style="color: #CCC;">;</span>
<span style="color: #99FFFF;">int</span> H<span style="color: #CCC;">;</span>
&nbsp;
<span style="color: #99FFFF;">char</span> ch_mark<span style="color: #CCC;">;</span>
&nbsp;
<span style="color: #99FFFF;">int</span> rec_mark<span style="color: #CCC;">&#40;</span><span style="color: #99FFFF;">int</span> r<span style="color: #CCC;">,</span> <span style="color: #99FFFF;">int</span> c<span style="color: #CCC;">&#41;</span>
<span style="color: #CCC;">&#123;</span>
	<span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>mark<span style="color: #CCC;">&#91;</span>r<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>c<span style="color: #CCC;">&#93;</span> <span style="color: #CCC;">!=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">&#41;</span>
	<span style="color: #CCC;">&#123;</span>
		<span style="color: #3D9EDD;">return</span> mark<span style="color: #CCC;">&#91;</span>r<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>c<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">;</span>
	<span style="color: #CCC;">&#125;</span>
	<span style="color: #3D9EDD;">else</span>
	<span style="color: #CCC;">&#123;</span>
		<span style="color: #999;">// Calculate diff of altitude</span>
		<span style="color: #99FFFF;">int</span> up<span style="color: #CCC;">,</span> left<span style="color: #CCC;">,</span> right<span style="color: #CCC;">,</span> down<span style="color: #CCC;">;</span>
		up <span style="color: #CCC;">=</span> left <span style="color: #CCC;">=</span> right <span style="color: #CCC;">=</span> down <span style="color: #CCC;">=</span> <span style="color: #CCC;">-</span><span style="color: #FFCC00;">1</span><span style="color: #CCC;">;</span>
		<span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>r <span style="color: #CCC;">&gt;</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">&#41;</span>
		<span style="color: #CCC;">&#123;</span>
			up <span style="color: #CCC;">=</span> map<span style="color: #CCC;">&#91;</span>r<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>c<span style="color: #CCC;">&#93;</span> <span style="color: #CCC;">-</span> map<span style="color: #CCC;">&#91;</span>r<span style="color: #CCC;">-</span><span style="color: #FFCC00;">1</span><span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>c<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">;</span>
		<span style="color: #CCC;">&#125;</span>
		<span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>c <span style="color: #CCC;">&gt;</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">&#41;</span>
		<span style="color: #CCC;">&#123;</span>
			left <span style="color: #CCC;">=</span> map<span style="color: #CCC;">&#91;</span>r<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>c<span style="color: #CCC;">&#93;</span> <span style="color: #CCC;">-</span> map<span style="color: #CCC;">&#91;</span>r<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>c<span style="color: #CCC;">-</span><span style="color: #FFCC00;">1</span><span style="color: #CCC;">&#93;</span><span style="color: #CCC;">;</span>
		<span style="color: #CCC;">&#125;</span>
		<span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>c <span style="color: #CCC;">&lt;</span> W <span style="color: #CCC;">-</span> <span style="color: #FFCC00;">1</span><span style="color: #CCC;">&#41;</span>
		<span style="color: #CCC;">&#123;</span>
			right <span style="color: #CCC;">=</span> map<span style="color: #CCC;">&#91;</span>r<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>c<span style="color: #CCC;">&#93;</span> <span style="color: #CCC;">-</span> map<span style="color: #CCC;">&#91;</span>r<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>c<span style="color: #CCC;">+</span><span style="color: #FFCC00;">1</span><span style="color: #CCC;">&#93;</span><span style="color: #CCC;">;</span>
		<span style="color: #CCC;">&#125;</span>
		<span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>r <span style="color: #CCC;">&lt;</span> H <span style="color: #CCC;">-</span> <span style="color: #FFCC00;">1</span><span style="color: #CCC;">&#41;</span>
		<span style="color: #CCC;">&#123;</span>
			down <span style="color: #CCC;">=</span> map<span style="color: #CCC;">&#91;</span>r<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>c<span style="color: #CCC;">&#93;</span> <span style="color: #CCC;">-</span> map<span style="color: #CCC;">&#91;</span>r<span style="color: #CCC;">+</span><span style="color: #FFCC00;">1</span><span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>c<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">;</span>
		<span style="color: #CCC;">&#125;</span>
		<span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>up <span style="color: #CCC;">&lt;=</span> <span style="color: #FFCC00;">0</span> <span style="color: #CCC;">&amp;&amp;</span> left <span style="color: #CCC;">&lt;=</span> <span style="color: #FFCC00;">0</span> <span style="color: #CCC;">&amp;&amp;</span> right <span style="color: #CCC;">&lt;=</span> <span style="color: #FFCC00;">0</span> <span style="color: #CCC;">&amp;&amp;</span> down <span style="color: #CCC;">&lt;=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">&#41;</span>
		<span style="color: #CCC;">&#123;</span>
			<span style="color: #999;">// Sink</span>
			mark<span style="color: #CCC;">&#91;</span>r<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>c<span style="color: #CCC;">&#93;</span> <span style="color: #CCC;">=</span> ch_mark<span style="color: #CCC;">;</span>
			ch_mark<span style="color: #CCC;">++;</span>
		<span style="color: #CCC;">&#125;</span>
		<span style="color: #3D9EDD;">else</span>
		<span style="color: #CCC;">&#123;</span>
			<span style="color: #999;">// Find the flow direction</span>
			<span style="color: #99FFFF;">int</span> max_diff <span style="color: #CCC;">=</span> up<span style="color: #CCC;">;</span>
			<span style="color: #99FFFF;">int</span> dr <span style="color: #CCC;">=</span> <span style="color: #CCC;">-</span><span style="color: #FFCC00;">1</span><span style="color: #CCC;">;</span> <span style="color: #99FFFF;">int</span> dc <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span>
			<span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>left <span style="color: #CCC;">&gt;</span> max_diff<span style="color: #CCC;">&#41;</span>
			<span style="color: #CCC;">&#123;</span>
				max_diff <span style="color: #CCC;">=</span> left<span style="color: #CCC;">;</span>
				dr <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span> dc <span style="color: #CCC;">=</span> <span style="color: #CCC;">-</span><span style="color: #FFCC00;">1</span><span style="color: #CCC;">;</span>
			<span style="color: #CCC;">&#125;</span>
			<span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>right <span style="color: #CCC;">&gt;</span> max_diff<span style="color: #CCC;">&#41;</span>
			<span style="color: #CCC;">&#123;</span>
				max_diff <span style="color: #CCC;">=</span> right<span style="color: #CCC;">;</span>
				dr <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span> dc <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">1</span><span style="color: #CCC;">;</span>
			<span style="color: #CCC;">&#125;</span>
			<span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>down <span style="color: #CCC;">&gt;</span> max_diff<span style="color: #CCC;">&#41;</span>
			<span style="color: #CCC;">&#123;</span>
				dr <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">1</span><span style="color: #CCC;">;</span> dc <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span>
			<span style="color: #CCC;">&#125;</span>
			<span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>mark<span style="color: #CCC;">&#91;</span>r <span style="color: #CCC;">+</span> dr<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>c <span style="color: #CCC;">+</span> dc<span style="color: #CCC;">&#93;</span> <span style="color: #CCC;">!=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">&#41;</span>
			<span style="color: #CCC;">&#123;</span>
				mark<span style="color: #CCC;">&#91;</span>r<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>c<span style="color: #CCC;">&#93;</span> <span style="color: #CCC;">=</span> mark<span style="color: #CCC;">&#91;</span>r <span style="color: #CCC;">+</span> dr<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>c <span style="color: #CCC;">+</span> dc<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">;</span>
			<span style="color: #CCC;">&#125;</span>
			<span style="color: #3D9EDD;">else</span>
			<span style="color: #CCC;">&#123;</span>
				mark<span style="color: #CCC;">&#91;</span>r<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>c<span style="color: #CCC;">&#93;</span> <span style="color: #CCC;">=</span> rec_mark<span style="color: #CCC;">&#40;</span>r <span style="color: #CCC;">+</span> dr<span style="color: #CCC;">,</span> c <span style="color: #CCC;">+</span> dc<span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span>
			<span style="color: #CCC;">&#125;</span>
		<span style="color: #CCC;">&#125;</span>
		<span style="color: #3D9EDD;">return</span> mark<span style="color: #CCC;">&#91;</span>r<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>c<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">;</span>
	<span style="color: #CCC;">&#125;</span>
<span style="color: #CCC;">&#125;</span>
&nbsp;
<span style="color: #99FFFF;">int</span> main<span style="color: #CCC;">&#40;</span><span style="color: #CCC;">&#41;</span>
<span style="color: #CCC;">&#123;</span>
	<span style="color: #99FFFF;">int</span> N<span style="color: #CCC;">;</span>
	cin <span style="color: #CCC;">&gt;&gt;</span> N<span style="color: #CCC;">;</span>
&nbsp;
	<span style="color: #3D9EDD;">for</span> <span style="color: #CCC;">&#40;</span><span style="color: #99FFFF;">int</span> n <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span> n <span style="color: #CCC;">&lt;</span> N<span style="color: #CCC;">;</span> <span style="color: #CCC;">++</span>n<span style="color: #CCC;">&#41;</span>
	<span style="color: #CCC;">&#123;</span>
		ch_mark <span style="color: #CCC;">=</span> <span style="color: #7ACC00;">'a'</span><span style="color: #CCC;">;</span>
		<span style="color: #99FFFF;">int</span> a<span style="color: #CCC;">;</span>
		cin <span style="color: #CCC;">&gt;&gt;</span> H <span style="color: #CCC;">&gt;&gt;</span> W<span style="color: #CCC;">;</span>
		<span style="color: #3D9EDD;">for</span> <span style="color: #CCC;">&#40;</span><span style="color: #99FFFF;">int</span> i <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span> i <span style="color: #CCC;">&lt;</span> H<span style="color: #CCC;">;</span> <span style="color: #CCC;">++</span>i<span style="color: #CCC;">&#41;</span>
		<span style="color: #CCC;">&#123;</span>
			<span style="color: #3D9EDD;">for</span> <span style="color: #CCC;">&#40;</span><span style="color: #99FFFF;">int</span> j <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span> j <span style="color: #CCC;">&lt;</span> W<span style="color: #CCC;">;</span> <span style="color: #CCC;">++</span>j<span style="color: #CCC;">&#41;</span>
			<span style="color: #CCC;">&#123;</span>
				cin <span style="color: #CCC;">&gt;&gt;</span> a<span style="color: #CCC;">;</span>
				map<span style="color: #CCC;">&#91;</span>i<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>j<span style="color: #CCC;">&#93;</span> <span style="color: #CCC;">=</span> a<span style="color: #CCC;">;</span>
				mark<span style="color: #CCC;">&#91;</span>i<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>j<span style="color: #CCC;">&#93;</span> <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span>
			<span style="color: #CCC;">&#125;</span>
		<span style="color: #CCC;">&#125;</span>
		<span style="color: #999;">// Look for next cell to eval</span>
		<span style="color: #3D9EDD;">for</span> <span style="color: #CCC;">&#40;</span><span style="color: #99FFFF;">int</span> r <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span> r <span style="color: #CCC;">&lt;</span> H<span style="color: #CCC;">;</span> r<span style="color: #CCC;">++</span><span style="color: #CCC;">&#41;</span>
		<span style="color: #CCC;">&#123;</span>
			<span style="color: #3D9EDD;">for</span> <span style="color: #CCC;">&#40;</span><span style="color: #99FFFF;">int</span> c <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span> c <span style="color: #CCC;">&lt;</span> W<span style="color: #CCC;">;</span> c<span style="color: #CCC;">++</span><span style="color: #CCC;">&#41;</span>
			<span style="color: #CCC;">&#123;</span>
				<span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>mark<span style="color: #CCC;">&#91;</span>r<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>c<span style="color: #CCC;">&#93;</span> <span style="color: #CCC;">==</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">&#41;</span>
				<span style="color: #CCC;">&#123;</span>
					rec_mark<span style="color: #CCC;">&#40;</span>r<span style="color: #CCC;">,</span> c<span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span>
				<span style="color: #CCC;">&#125;</span>
			<span style="color: #CCC;">&#125;</span>
		<span style="color: #CCC;">&#125;</span>
		<span style="color: #996699;">cout</span> <span style="color: #CCC;">&lt;&lt;</span> <span style="color: #7ACC00;">&quot;Case #&quot;</span> <span style="color: #CCC;">&lt;&lt;</span> n <span style="color: #CCC;">+</span> <span style="color: #FFCC00;">1</span> <span style="color: #CCC;">&lt;&lt;</span> <span style="color: #7ACC00;">&quot;:&quot;</span> <span style="color: #CCC;">&lt;&lt;</span> endl<span style="color: #CCC;">;</span>
		<span style="color: #3D9EDD;">for</span> <span style="color: #CCC;">&#40;</span><span style="color: #99FFFF;">int</span> r <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span> r <span style="color: #CCC;">&lt;</span> H<span style="color: #CCC;">;</span> r<span style="color: #CCC;">++</span><span style="color: #CCC;">&#41;</span>
		<span style="color: #CCC;">&#123;</span>
			<span style="color: #3D9EDD;">for</span> <span style="color: #CCC;">&#40;</span><span style="color: #99FFFF;">int</span> c <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span> c <span style="color: #CCC;">&lt;</span> W<span style="color: #CCC;">;</span> c<span style="color: #CCC;">++</span><span style="color: #CCC;">&#41;</span>
			<span style="color: #CCC;">&#123;</span>
				<span style="color: #996699;">cout</span> <span style="color: #CCC;">&lt;&lt;</span> mark<span style="color: #CCC;">&#91;</span>r<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>c<span style="color: #CCC;">&#93;</span> <span style="color: #CCC;">&lt;&lt;</span> <span style="color: #7ACC00;">' '</span><span style="color: #CCC;">;</span>
			<span style="color: #CCC;">&#125;</span>
			<span style="color: #996699;">cout</span> <span style="color: #CCC;">&lt;&lt;</span> endl<span style="color: #CCC;">;</span>
		<span style="color: #CCC;">&#125;</span>
	<span style="color: #CCC;">&#125;</span>
	<span style="color: #3D9EDD;">return</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span>
<span style="color: #CCC;">&#125;</span></pre></div></div></div>

<h6>问题3</h6>

<div class="wp_syntax_wrapper"><span class="wp_syntax_lang">C</span><div class="wp_syntax" style="background:#2c2c2c; overflow:auto"><div class="code"><pre class="c" style="color: #FFF; font-family:&quot;Consolas&quot;,monospace,&quot;Courier New&quot;"><span style="color: #33CC66;">#include &lt;iostream&gt;</span>
<span style="color: #33CC66;">#include &lt;string&gt;</span>
<span style="color: #33CC66;">#include &lt;fstream&gt;</span>
&nbsp;
using namespace std<span style="color: #CCC;">;</span>
&nbsp;
<span style="color: #99FFFF;">int</span> n_src<span style="color: #CCC;">;</span>
string src<span style="color: #CCC;">;</span>
<span style="color: #99FFFF;">const</span> <span style="color: #99FFFF;">int</span> n_ptrn <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">19</span><span style="color: #CCC;">;</span>
<span style="color: #99FFFF;">const</span> string ptrn <span style="color: #CCC;">=</span> <span style="color: #7ACC00;">&quot;welcome to code jam&quot;</span><span style="color: #CCC;">;</span>
&nbsp;
ifstream fin<span style="color: #CCC;">&#40;</span><span style="color: #7ACC00;">&quot;C:<span style="color: #99FF00;">\\</span>C-small-attempt0.in&quot;</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span>
&nbsp;
<span style="color: #33CC66;">#define cin fin</span>
&nbsp;
FILE <span style="color: #CCC;">*</span>file<span style="color: #CCC;">;</span>
&nbsp;
<span style="color: #99FFFF;">int</span> tbl<span style="color: #CCC;">&#91;</span><span style="color: #FFCC00;">512</span><span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span><span style="color: #FFCC00;">32</span><span style="color: #CCC;">&#93;</span><span style="color: #CCC;">;</span>
&nbsp;
<span style="color: #99FFFF;">int</span> find_substring<span style="color: #CCC;">&#40;</span><span style="color: #99FFFF;">const</span> <span style="color: #99FFFF;">int</span> s_src<span style="color: #CCC;">,</span> <span style="color: #99FFFF;">const</span> <span style="color: #99FFFF;">int</span> s_ptrn<span style="color: #CCC;">&#41;</span>
<span style="color: #CCC;">&#123;</span>
	<span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>tbl<span style="color: #CCC;">&#91;</span>s_src<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>s_ptrn<span style="color: #CCC;">&#93;</span> <span style="color: #CCC;">!=</span> <span style="color: #CCC;">-</span><span style="color: #FFCC00;">1</span><span style="color: #CCC;">&#41;</span>
	<span style="color: #CCC;">&#123;</span>
		<span style="color: #3D9EDD;">return</span> tbl<span style="color: #CCC;">&#91;</span>s_src<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>s_ptrn<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">;</span>
	<span style="color: #CCC;">&#125;</span>
	<span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>n_src <span style="color: #CCC;">-</span> s_src <span style="color: #CCC;">&lt;</span> n_ptrn <span style="color: #CCC;">-</span> s_ptrn<span style="color: #CCC;">&#41;</span>
	<span style="color: #CCC;">&#123;</span>
		tbl<span style="color: #CCC;">&#91;</span>s_src<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>s_ptrn<span style="color: #CCC;">&#93;</span> <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span>
		<span style="color: #3D9EDD;">return</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span>
	<span style="color: #CCC;">&#125;</span>
	<span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>n_src <span style="color: #CCC;">-</span> s_src <span style="color: #CCC;">==</span> n_ptrn <span style="color: #CCC;">-</span> s_ptrn<span style="color: #CCC;">&#41;</span>
	<span style="color: #CCC;">&#123;</span>
		string sub_src <span style="color: #CCC;">=</span> src.<span style="color: #FFF;">substr</span><span style="color: #CCC;">&#40;</span>s_src<span style="color: #CCC;">,</span> n_src <span style="color: #CCC;">-</span> s_src<span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span>
		string sub_ptrn <span style="color: #CCC;">=</span> ptrn.<span style="color: #FFF;">substr</span><span style="color: #CCC;">&#40;</span>s_ptrn<span style="color: #CCC;">,</span> n_ptrn <span style="color: #CCC;">-</span> s_ptrn<span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span>
		tbl<span style="color: #CCC;">&#91;</span>s_src<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>s_ptrn<span style="color: #CCC;">&#93;</span> <span style="color: #CCC;">=</span> <span style="color: #CCC;">&#40;</span>sub_src <span style="color: #CCC;">==</span> sub_ptrn<span style="color: #CCC;">&#41;</span> <span style="color: #CCC;">?</span> <span style="color: #FFCC00;">1</span> <span style="color: #CCC;">:</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span>
		<span style="color: #3D9EDD;">return</span> tbl<span style="color: #CCC;">&#91;</span>s_src<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>s_ptrn<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">;</span>
	<span style="color: #CCC;">&#125;</span>
	<span style="color: #99FFFF;">int</span> total <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span>
	<span style="color: #999;">// Skip current char</span>
	total <span style="color: #CCC;">+=</span> find_substring<span style="color: #CCC;">&#40;</span>s_src<span style="color: #CCC;">+</span><span style="color: #FFCC00;">1</span><span style="color: #CCC;">,</span> s_ptrn<span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span>
	total <span style="color: #CCC;">%=</span> <span style="color: #FFCC00;">10000</span><span style="color: #CCC;">;</span>
	<span style="color: #999;">// If current char matches</span>
	<span style="color: #3D9EDD;">if</span> <span style="color: #CCC;">&#40;</span>src<span style="color: #CCC;">&#91;</span>s_src<span style="color: #CCC;">&#93;</span> <span style="color: #CCC;">==</span> ptrn<span style="color: #CCC;">&#91;</span>s_ptrn<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#41;</span>
	<span style="color: #CCC;">&#123;</span>
		total <span style="color: #CCC;">+=</span> find_substring<span style="color: #CCC;">&#40;</span>s_src<span style="color: #CCC;">+</span><span style="color: #FFCC00;">1</span><span style="color: #CCC;">,</span> s_ptrn<span style="color: #CCC;">+</span><span style="color: #FFCC00;">1</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span>
		total <span style="color: #CCC;">%=</span> <span style="color: #FFCC00;">10000</span><span style="color: #CCC;">;</span>
	<span style="color: #CCC;">&#125;</span>
	tbl<span style="color: #CCC;">&#91;</span>s_src<span style="color: #CCC;">&#93;</span><span style="color: #CCC;">&#91;</span>s_ptrn<span style="color: #CCC;">&#93;</span> <span style="color: #CCC;">=</span> total<span style="color: #CCC;">;</span>
	<span style="color: #3D9EDD;">return</span> total<span style="color: #CCC;">;</span>
<span style="color: #CCC;">&#125;</span>
&nbsp;
<span style="color: #99FFFF;">int</span> main<span style="color: #CCC;">&#40;</span><span style="color: #CCC;">&#41;</span>
<span style="color: #CCC;">&#123;</span>
	file <span style="color: #CCC;">=</span> fopen<span style="color: #CCC;">&#40;</span><span style="color: #7ACC00;">&quot;C:<span style="color: #99FF00;">\\</span>a.out&quot;</span><span style="color: #CCC;">,</span> <span style="color: #7ACC00;">&quot;w&quot;</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span>
	<span style="color: #99FFFF;">int</span> N<span style="color: #CCC;">;</span>
	cin <span style="color: #CCC;">&gt;&gt;</span> N<span style="color: #CCC;">;</span>
	getline<span style="color: #CCC;">&#40;</span>cin<span style="color: #CCC;">,</span> src<span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span>
	<span style="color: #3D9EDD;">for</span> <span style="color: #CCC;">&#40;</span><span style="color: #99FFFF;">int</span> n <span style="color: #CCC;">=</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span> n <span style="color: #CCC;">&lt;</span> N<span style="color: #CCC;">;</span> <span style="color: #CCC;">++</span>n<span style="color: #CCC;">&#41;</span>
	<span style="color: #CCC;">&#123;</span>
		getline<span style="color: #CCC;">&#40;</span>cin<span style="color: #CCC;">,</span> src<span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span>
		memset<span style="color: #CCC;">&#40;</span>tbl<span style="color: #CCC;">,</span> <span style="color: #CCC;">-</span><span style="color: #FFCC00;">1</span><span style="color: #CCC;">,</span> <span style="color: #99FFFF;">sizeof</span><span style="color: #CCC;">&#40;</span>tbl<span style="color: #CCC;">&#41;</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span>
		n_src <span style="color: #CCC;">=</span> src.<span style="color: #FFF;">length</span><span style="color: #CCC;">&#40;</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span>
		<span style="color: #99FFFF;">int</span> cnt <span style="color: #CCC;">=</span> find_substring<span style="color: #CCC;">&#40;</span><span style="color: #FFCC00;">0</span><span style="color: #CCC;">,</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span>
		fprintf<span style="color: #CCC;">&#40;</span>file<span style="color: #CCC;">,</span> <span style="color: #7ACC00;">&quot;Case #%d: %04d<span style="color: #99FF00;">\n</span>&quot;</span><span style="color: #CCC;">,</span> n<span style="color: #CCC;">+</span><span style="color: #FFCC00;">1</span><span style="color: #CCC;">,</span> cnt<span style="color: #CCC;">&#41;</span><span style="color: #CCC;">;</span>
	<span style="color: #CCC;">&#125;</span>
	<span style="color: #3D9EDD;">return</span> <span style="color: #FFCC00;">0</span><span style="color: #CCC;">;</span>
<span style="color: #CCC;">&#125;</span></pre></div></div></div>

<div class="feed-after" style="margin:15px 0; clear:both;"><a href="http://lync.in">Lync.in</a> 是一个多人协作博客，欢迎您 <a href="http://lync.in/code-jam-qualification-lol/">查看原文</a> 以获得更好的阅读体验。</div>]]></content:encoded>
			<wfw:commentRss>http://lync.in/code-jam-qualification-lol/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>

