<?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>西瓜田 &#187; 编程</title>
	<atom:link href="http://blog.thpiano.com/?cat=6&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.thpiano.com</link>
	<description>无复洛城东</description>
	<lastBuildDate>Tue, 19 Jan 2021 03:54:37 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>为什么负数取余操作（%）在c和python下结果不同</title>
		<link>http://blog.thpiano.com/?p=1023</link>
		<comments>http://blog.thpiano.com/?p=1023#comments</comments>
		<pubDate>Sun, 19 Jul 2015 15:32:55 +0000</pubDate>
		<dc:creator>suika</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[C/C++]]></category>
		<category><![CDATA[div]]></category>
		<category><![CDATA[mod]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[不同]]></category>
		<category><![CDATA[余数]]></category>
		<category><![CDATA[取余]]></category>
		<category><![CDATA[取模]]></category>

		<guid isPermaLink="false">http://blog.thpiano.com/?p=1023</guid>
		<description><![CDATA[最近在用python，偶尔有一次涉及到了负数取余操作： -3 % 4 按照之前写c/c++、java的习惯，这里肯定是等于-3。但是python下返回的结果竟然是1！ 为什么会有不同的表现呢？先从取余操作本身说起： &#160; 关于取余(modulo operation) 取余的定义 由于不同的架构有不同的数字表示法和运算法，因此他们对于取余的定义也有可能略有不同。 一般来说，公认的取余操作（被除数a、除数n、商q以及余数r，n % a = r）需要满足以下三条： 然而这个定义是非常宽泛的。以 -3 % 4为例： -3既可以表示为：-3 = 4 * -1 + 1 也可以表示为：-3 = 4 * 0 + (-3) 这两种表示法分别对应了两种实现方法：Truncated Division及 Floored Division。两种实现方法的求商方式不同，导致其最终结果也不同。 Truncated Division 在Truncated Division下，求商时，采用的是q = trunc(a/n) ，即将算数除法结果的小数部分移除，余下的整数部分作为商。 （也有一种更形象的说法，除法取整时，是朝着靠近0的方向取整） 以-3 % 4为例： q = trunc(-3/4) = trunc(-0.75) = 0 因此，余数r = [...]]]></description>
			<content:encoded><![CDATA[<p>最近在用python，偶尔有一次涉及到了负数取余操作： -3 % 4</p>
<p>按照之前写c/c++、java的习惯，这里肯定是等于<span style="color: #0000ff;"><strong>-3</strong></span>。但是python下返回的结果竟然是<span style="color: #0000ff;"><strong>1</strong></span>！</p>
<p>为什么会有不同的表现呢？先从取余操作本身说起：</p>
<p>&nbsp;</p>
<h1>关于取余(modulo operation)</h1>
<h4>取余的定义</h4>
<p>由于不同的架构有不同的数字表示法和运算法，因此他们对于取余的定义也有可能略有不同。</p>
<p>一般来说，公认的取余操作（被除数<em>a</em>、除数<em>n</em>、商<em>q</em>以及余数<em>r</em>，<em>n</em> % <em>a</em> = <em>r</em>）需要满足以下三条：</p>
<table>
<tbody>
<tr>
<td><img src="https://upload.wikimedia.org/math/2/1/9/21923d0bed7d824da52419c946093e48.png" alt="\begin{align}&lt;br /&gt;&lt;br /&gt; q \,&amp;\in \mathbb{Z} \\&lt;br /&gt;&lt;br /&gt; a \,&amp;= n q + r \\&lt;br /&gt;&lt;br /&gt; |r| \,&amp;&lt; |n|.&lt;br /&gt;&lt;br /&gt; \end{align}" /></td>
</tr>
</tbody>
</table>
<p>然而这个定义是非常宽泛的。以 -3 % 4为例：</p>
<p>-3既可以表示为：-3 = 4 * -1 + 1</p>
<p>也可以表示为：-3 = 4 * 0 + (-3)</p>
<p>这两种表示法分别对应了两种实现方法：Truncated Division及 Floored Division。两种实现方法的求商方式不同，导致其最终结果也不同。<span id="more-1023"></span></p>
<h4>Truncated Division</h4>
<p>在Truncated Division下，求商时，采用的是<em>q</em> = trunc(<em>a</em>/<em>n</em>) ，即将算数除法结果的小数部分移除，余下的整数部分作为商。</p>
<p>（也有一种更形象的说法，除法取整时，是朝着靠近0的方向取整）</p>
<p>以-3 % 4为例：</p>
<p><em>q</em> = trunc(<em>-3</em>/<em>4</em>) = trunc(-0.75) = 0</p>
<p>因此，余数r = a - nq = -3 - (0 * 4) = -3</p>
<p>此实现有如下特点：</p>
<p>1. 余数的符号与<strong><span style="color: #0000ff;">被除数</span></strong>相同</p>
<p>2. 这种实现在某些地方被称之为<strong><span style="color: #0000ff;">取模</span></strong></p>
<p>&nbsp;</p>
<h4>Floored Division</h4>
<p>在Floored Division下，求商时，采用的是<em>q</em> = ⌊<em>a</em>/<em>n</em>⌋，即将算数除法结果进行向下取整作为商。</p>
<p>以-3 % 4为例：</p>
<p><em>q</em> = ⌊<em>-3</em>/<em>4</em>⌋ = ⌊<em>-0.75</em>⌋ = -1</p>
<p>因此，余数r = a - nq = -3 - (-1 * 4) = 1</p>
<p>此实现有如下特点：</p>
<p>1. 余数的符号与<strong><span style="color: #0000ff;">除数</span></strong>相同</p>
<p>2. 这种实现在某些地方被称之为<strong><span style="color: #0000ff;">求余</span></strong></p>
<p>&nbsp;</p>
<h1>关于语言标准</h1>
<p>由上可知，存在着多种实现方式，那么具体地，c和python是如何选取的呢？</p>
<h4>C语言标准中关于取余运算的说明</h4>
<p>C89中，并未做严格规定：</p>
<blockquote style="margin-bottom: 10px; padding: 10px; background-color: #fff9e3; border-left: 2px solid #ffeb8e;"><p>When integers are divided and the division is inexact, if both operands are positive the result of the/ operator is the largest integer less than the algebraic quotient and the result of the % operator is positive. <strong>If either operand is negative</strong>, whether the result of the / operator is the largest integer less than the algebraic quotient or the smallest integer greater than the algebraic quotient is <strong>implementation-defined</strong>, as is the sign of the result of the % operator. If the quotient a/b is representable, the expression (a/b)*b + a%b shall equal a.</p></blockquote>
<p>而C99，明确指定了需要使用Truncated Version：</p>
<blockquote style="margin-bottom: 10px; padding: 10px; background-color: #fff9e3; border-left: 2px solid #ffeb8e;"><p>When integers are divided, the result of the / operator is the algebraic quotient with any fractional part discarded.<sup>88)</sup> If the quotient a/b is representable, the expression (a/b)*b + a%b shall equal a.</p>
<p><sub>88) This is often called "truncation toward zero".</sub></p></blockquote>
<h4>Python标准中关于取余运算的说明</h4>
<p>Python 2：从说明中关于余数符号的部分，可以推断出其指定了Floored Version</p>
<blockquote style="margin-bottom: 10px; padding: 10px; background-color: #fff9e3; border-left: 2px solid #ffeb8e;">
<p id="index-55">The <tt>%</tt> (modulo) operator yields the remainder from the division of the first argument by the second. The numeric arguments are first converted to a common type. A zero right argument raises the <a title="exceptions.ZeroDivisionError" href="https://docs.python.org/2/library/exceptions.html#exceptions.ZeroDivisionError"><tt>ZeroDivisionError</tt></a> exception. The arguments may be floating point numbers, e.g., <tt>3.14%0.7</tt> equals <tt>0.34</tt> (since <tt>3.14</tt> equals <tt>4*0.7 + 0.34</tt>.) The modulo operator always yields a result with the same sign as its second operand (or zero); the absolute value of the result is strictly smaller than the absolute value of the second operand <a id="id10" href="https://docs.python.org/2/reference/expressions.html#id21">[2]</a>.</p>
<p>The integer division and modulo operators are connected by the following identity: <tt>x == (x/y)*y + (x%y)</tt>. Integer division and modulo are also connected with the built-in function <a title="divmod" href="https://docs.python.org/2/library/functions.html#divmod"><tt>divmod()</tt></a>: <tt>divmod(x, y) == (x/y,x%y)</tt>. These identities don’t hold for floating point numbers; there similar identities hold approximately where <tt>x/y</tt> is replaced by <tt>floor(x/y)</tt> or <tt>floor(x/y) - 1</tt> <a id="id11" href="https://docs.python.org/2/reference/expressions.html#id22">[3]</a>.</p></blockquote>
<p>Python 3：和2一样，可推断出指定Floored Version</p>
<blockquote style="margin-bottom: 10px; padding: 10px; background-color: #fff9e3; border-left: 2px solid #ffeb8e;">
<p id="index-51">The <tt>%</tt> (modulo) operator yields the remainder from the division of the first argument by the second. The numeric arguments are first converted to a common type. A zero right argument raises the <a title="ZeroDivisionError" href="https://docs.python.org/3/library/exceptions.html#ZeroDivisionError"><tt>ZeroDivisionError</tt></a> exception. The arguments may be floating point numbers, e.g., <tt>3.14%0.7</tt> equals <tt>0.34</tt> (since <tt>3.14</tt> equals <tt>4*0.7 + 0.34</tt>.) The modulo operator always yields a result with the same sign as its second operand (or zero); the absolute value of the result is strictly smaller than the absolute value of the second operand <a id="id8" href="https://docs.python.org/3/reference/expressions.html#id16">[1]</a>.</p>
<p>The floor division and modulo operators are connected by the following identity: <tt>x == (x//y)*y + (x%y)</tt>. Floor division and modulo are also connected with the built-in function <a title="divmod" href="https://docs.python.org/3/library/functions.html#divmod"><tt>divmod()</tt></a>: <tt>divmod(x, y) == (x//y, x%y)</tt>. <a id="id9" href="https://docs.python.org/3/reference/expressions.html#id17">[2]</a>.</p></blockquote>
<h1>结论</h1>
<div> c/c++标准中指定了采用Truncated Version进行实现，而Python标准中指定了采用Floored Version进行实现，因此造成了结果上的不同。</div>
<p>&nbsp;</p>
<h1>一些推断及其他</h1>
<p>最后，来小小地猜测一下，为什么c语言和python会选取不同的实现方案。</p>
<h4>对于c：</h4>
<p>在X86架构下，对于整数的除法和取余操作，都是通过同一个指令进行的（有符号除法使用idiv，而无符号为div），商和余数会同时作为结果返回在寄存器AX和DX中。</p>
<p>这个特性被c的库函数divmod所利用，导致编译器有可能会将除法及取余操作都优化为使用一个指令完成。</p>
<p>这样一来，通过如下三条：</p>
<p>1. c的除法正好为trunc除（即Truncated Version中取商的方式）</p>
<p>2. 通常程序里除法出现的频率都远远高过取余的频率，取余可能会被优化为一个指令</p>
<p>3. c语言设计风格为性能和简洁优先，而c++又要与c兼容</p>
<p>因此c语言采用了Truncated Version。</p>
<p>而这也为一个常用的判断埋下了坑：</p>
<p>如果你想判断一个数是否是奇数，</p>
<div class="codecolorer-container c geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">bool isEven<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> x<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">return</span> x <span style="color: #339933;">%</span> <span style="color: #0000dd;">2</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>会埋下大坑（对负数存在bug）</p>
<p>而需要写成</p>
<div class="codecolorer-container c geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">bool isEven<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> x<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">return</span> x <span style="color: #339933;">%</span> <span style="color: #0000dd;">2</span> <span style="color: #339933;">!=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>&nbsp;</p>
<h4>对于python：</h4>
<p>不会像c那样将性能放到第一位，会比c有更多的语法糖，更贴近常用思维，因此使用Floored Version会更加适合。</p>
<p>&nbsp;</p>
<h1>参考文献</h1>
<p>https://en.wikipedia.org/wiki/Modulo_operation#Remainder_calculation_for_the_modulo_operation</p>
<p>https://docs.python.org/2/reference/expressions.html#arithmetic-conversions</p>
<p>http://stackoverflow.com/questions/3609572/does-either-ansi-c-or-iso-c-specify-what-5-10-should-be</p>
<p>http://stackoverflow.com/questions/11630321/why-does-c-output-negative-numbers-when-using-modulo</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thpiano.com/?feed=rss2&#038;p=1023</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>找工作总结</title>
		<link>http://blog.thpiano.com/?p=915</link>
		<comments>http://blog.thpiano.com/?p=915#comments</comments>
		<pubDate>Tue, 05 Nov 2013 14:19:03 +0000</pubDate>
		<dc:creator>suika</dc:creator>
				<category><![CDATA[日常流水账]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[2014]]></category>
		<category><![CDATA[华为面经]]></category>
		<category><![CDATA[去哪儿网]]></category>
		<category><![CDATA[待遇]]></category>
		<category><![CDATA[总结]]></category>
		<category><![CDATA[找工作]]></category>
		<category><![CDATA[校园招聘]]></category>
		<category><![CDATA[校招]]></category>
		<category><![CDATA[百度]]></category>
		<category><![CDATA[百度面经]]></category>
		<category><![CDATA[腾讯]]></category>
		<category><![CDATA[腾讯面经]]></category>
		<category><![CDATA[重邮]]></category>
		<category><![CDATA[阿里]]></category>
		<category><![CDATA[阿里巴巴]]></category>
		<category><![CDATA[阿里面经]]></category>
		<category><![CDATA[面经]]></category>
		<category><![CDATA[面试]]></category>

		<guid isPermaLink="false">http://blog.thpiano.com/?p=915</guid>
		<description><![CDATA[如今找工作已落下尾声，三方也已签。之前有写过一篇成都之行流水账，不过那篇实是毫无价值，所以在此补一份找工作总结，希望能够为那些未曾经历过面试的学弟学妹们提供参考，也让我借写文对自己好好总结一番。 主要以招聘情况、各公司简单面经、找工作经验总结为主，点一下后面的标题就可以展开看详细]]></description>
			<content:encoded><![CDATA[<p>如今找工作已落下尾声，三方也已签。之前有写过一篇成都之行流水账，不过那篇实是毫无价值，所以在此补一份找工作总结，希望能够为那些未曾经历过面试的学弟学妹们提供参考，也让我借写文对自己好好总结一番。</p>
<p>主要以招聘情况、各公司简单面经、找工作经验总结为主，点一下后面的标题就可以展开看详细<span id="more-915"></span></p>
<h3 class="toggle"><strong><a href="#">校招里我参加的所有公司招聘情况，按时间排序：</a></strong></h3><div class="toggle-box" style="display: none;"><p>
<p>华为　　　拿到offer（走绿色通道，云计算研发工程师）<br />
锐捷　　　强笔后石沉大海<br />
阿里巴巴　拿到offer已签（软开，负责店家数据提供及数据挖掘）<br />
百度　　　二面被鄙视<br />
网易　　　笔试通过后放弃<br />
优酷土豆　强笔后石沉大海<br />
腾讯　　　拿到offer（后台开发，负责QQ相册及QQ旋风图片存储）<br />
去哪儿网　拿到offer（软开）<br />
金山游戏　一面后放弃</p>
<p>除了金山之外，其余公司招聘都是9月20日至27日期间在成都参加的<br />
</p></div><br />
<h3 class="toggle"><strong><a href="#">华为、阿里、百度、腾讯、去哪儿网简单面经：</a></strong></h3><div class="toggle-box" style="display: none;"><p></p>
<p><strong>华为：</strong><br />
今年华为成研所在云存储方面发力，透露出有400-500人缺口，拟用成电重邮重大西南西交这几所学校作为主力进行填补。因此今年华为还是比较好进的，单单是我们学校计算机小硕150人里估计就拿了不止30个华为offer吧。<br />
因为之前参加过华为编程大赛，因此我得以进入绿色通道，提前两周面试，只需面一次Boss面。Boss面类似HR面，只关注家庭状况、性格偏好、职涯规划等非技术问题，轻松应答即可。里面最尖锐的问题也只是问“如果华为腾讯都给你offer，你怎么办？”，我回答是“工作不能根据公司名字一概而论，要看具体职位发展、个人兴趣契合度和工作地点等诸多方面综合考虑”，这样话题就转变成对华为云计算研发这个职位的讨论了。<br />
一周之后收到结果，直接给了offer。有很多同学被泡到了offer池里（包括后续9月底华为正式校招的），在10月初至中旬都被陆续捞起了，至今貌似没有听说还泡在池子里的了。所以泡offer池在成都今年并不是很值得担心的事情。给offer和泡池子的比例大概在1:3左右。</p>
<p><strong>阿里巴巴：</strong><br />
今年阿里巴巴大力扩招，去年全国招不到300人，今年招生规模却一下子超过了千人，也正是因此我才有幸得以面试通过。<br />
另外，很罕见的是阿里巴巴今年在重邮还特地设置了考场和面试点。今年我校签阿里的应该有超过10个（我们系硕士签了8个，本科签了至少2个），师弟师妹们放心，师兄们定会努力奋斗，争取明年阿里继续在重邮多招人的机会。<br />
阿里的笔试题风格介于腾讯和百度之间，没有百度那么干货，但也不像腾讯那样会考察广而不深的基础知识，算是比较灵活的吧。阿里的选择都是写错了还要倒扣分的，后面的附加题都是java相关，很值钱，一定要好好重视。<br />
我的阿里笔试成绩惨不忍睹，只有40+16（前面40分，附加题得16分），进面试的人里笔试分最低的是30+16，好险啊。<br />
成都地区阿里面试组织得倒很好，场地选在新良大酒店，比腾讯百度土豪多了。面试一旦通过，当即就会安排下一场，所以我上午呆了1个半小时左右就把阿里的3面都面完了。<br />
阿里面试时桌子上会写着面试官的花名，一面面我的人叫大风，我现在能想起来的问题有：<br />
你的研究及论文思路是什么？<br />
讲一下中文分词算法？为什么需要条件随机场这么复杂的算法？<br />
如何为淘宝设计一个商品推荐系统？<br />
讲讲虚函数实现机制？<br />
讲讲Vector底层实现？<br />
单链表怎么逆置？（递归及非递归写法，还算比较简单）<br />
对于给定的n，n!的末尾有多少个连续的零？（oj水题）<br />
写Shell相关问题<br />
讲一下ologn的排序算法及各自的思想<br />
快排稳定性、改进（这个家伙竟然花了N长的时间妄图给我洗脑快排是稳定的。。。我不知道当时我要是宁死不从的话会不会一面挂掉，说不定人家看我这么容易就被他洗了反而觉得很满意）</p>
<p>似乎还有其他三四个问题想不起来了，面试时间不到半小时</p>
<p>二面是玄难面我，后来才知道玄难是P10，管着俩P9，放翁和左耳朵耗子。<br />
这面主要都是我在说，介绍了自己不务正业的那些事情（写软件自动监视自己电脑使用、破解软件、网站刷投票、程序抢天猫红包、秒杀）<br />
他问的问题也没几个：<br />
你知道现在秒杀的验证码是什么样子的么？（我答是基于语义的，拼音或首字母，但是验证码被破解永远只是时间问题）<br />
你解决最难的一个问题时的思路、历程是什么？<br />
给我讲一下CDN？<br />
设计一个hash table？ （我回答的时候顺便提到了去年java hash碰撞漏洞被淘宝提前发现的事情）<br />
写一个程序能够分析一个包含括号、运算符和数字的算式，进行四则运算<br />
给你一个天平，n块木头，n块石头，天平左侧只能放一块木头，另一侧只能放一块石头，已知每块木头肯定可以找到一块和他一样重的石头，求怎么称可以最快找到每块木头所对应的石头。（只要用类似快排的思想即可）</p>
<p>似乎还有其他三四个问题想不起来了，面试时间不到半小时</p>
<p>HR面就是一个笑得很灿烂的妹子一个劲夸我，虽然被夸得很开心但是好歹抑制住了心情没敢丝毫自我膨胀。事后想起来这个妹子好阴险，净是问我些“你是不是周围人里最厉害的啊”“大家都叫你技术牛人啊”“解决难题时都是别人问你，你都不用问别人”这类的，还好我天性就怂（= =），喜欢留后路不愿露底牌，任你怎么夸，我都知道自己只是一个rank B+<br />
9月24日面完，27日凌晨1点40接到电话通知去参加圆桌会议，圆桌上还一人发了一本《淘宝技术这十年》（明显是印多了= =），10月17日签三方。</p>
<p><strong>百度：</strong><br />
百度笔试题一向是BAT里最难的。还好今年的几道小编程题不难，我稀里糊涂就进了面试。百度的面试通知全部是通过电话联系的，无短信无邮件，接不到就很容易错过。<br />
一面：（问的问题记不太清楚了，特别是linux和TCP/IP方面）<br />
虚表结构<br />
数据挖掘相关问题，问我做过的最大数据量多大<br />
在使用单例模式时要注意的问题？<br />
spring框架在实际使用的时候有没有遇到过问题？<br />
怎么写一个不能被继承的类？<br />
两个整数集合求交集？（我答了三种算法）<br />
两个规模超大字符串集合求交集？（我答了两种算法）<br />
两道算法题（都是比较简单的老题）<br />
STL里各容器的数据结构<br />
Linux下哪个命令可以看到文件的最后x行？（tail）<br />
你用c语言实现一下tail</p>
<p>面了大概半小时，自我感觉linux相关的一些问题答得不够好，还以为自己会悲剧。走的时候我跟面试官说我以为会问很多算法相关的，他回答说你算法基础还挺扎实。</p>
<p>二面：前一晚接到电话，问我对做系统内核有没有兴趣，我问有多底层，他说kernel之上driver之下，我顿时两眼一黑，完全没接触啊。但是又怕说没兴趣的话连二面机会都没了，于是还是来受虐了。</p>
<p>面试官其实人超好的，问问题都和我商量着来。只是可惜他会的我都不懂，我给他讲算法他也不感兴趣。俺俩就mem barrier和volatile聊了一小阵以后，他说他现在手头活超多，急需一个帮着一起写内核的，看看后面其他人选情况再通知我，我知道我已经没戏了。</p>
<p>现在想起来，那时应该立刻争取一个其他部门的强面机会就好了。自我感觉算法还是准备的比较多的方向，而百度又是盛传最爱问算法的，结果反而是百度跪的最早，有点不太甘心。</p>
<p><strong>腾讯：</strong><br />
自年初实习生招聘被默拒后，这次带着tst光环再来战<br />
笔试题比去年容易多了，今年笔试分普遍高，我答了87分也只是中等偏上<br />
一面：（还是忘记了很多问题）<br />
说一下linux下常用socket函数都有哪些，参数，返回值<br />
TCP/IP传输数据过程<br />
STL各容器数据结构、优缺点<br />
map的实现原理，树怎么平衡<br />
排序算法相关<br />
gdb相关<br />
一道简单算法题：对给定数n，k，求出用至多k个连续自然数相加，其结果恰好为n的方法数。要求10分钟想算法，20分钟写实现，然后就把我打发到一边，他去面另一个了。<br />
20分钟不到就面完一面，面试官表示我linux和网络不够好，二面会很艰难</p>
<p>二面：我前面有两个人，每人面了一个半小时，等了好久<br />
（依旧忘记了很多问题）<br />
怎么实现原子操作？（memory barrier）<br />
select和epoll的区别？<br />
TCP/IP滑动窗口、慢启动、拥塞控制<br />
一道算法题（还是老题）<br />
一个圆桌子，两人轮流平铺一枚硬币，谁发现桌子上的空不够铺自己的这一枚了就算输，问有没有必胜法<br />
阿里和腾讯都给你offer你选哪家？</p>
<p>一共只问了20分钟左右，竟然就问完了，问完了。。。。前面两个人可是各有一个半小时的量啊！</p>
<p>HR面：跑到成都腾讯大楼里去面的，就工作地点问题HR劝了我好久，一直在说总部多么多么好（我一开始想去帝都来着），其他的就没什么了</p>
<p><strong>去哪儿网：</strong><br />
笔试的时候既没要求带简历（有hr说“你们应届生简历都没啥好看的”），卷子也完全没批，不知道怎么筛的。<br />
去之前也没怎么重视，只知道待遇貌似比较好（后来的确开的比阿里B+还要高），现在才得知其11月上市的事。<br />
在成都地区去哪儿网狂招人，据说发了百多份offer，有同学惊呼offer来的太简单钱还多，是不是骗子 = =！<br />
一面：<br />
先照着笔试卷子把每个题又重新讨论了一遍<br />
抽象类及虚表<br />
写一个strncpy函数<br />
各种排序算法问题，适合应用的场合<br />
STL相关，各种结构底层，vector内存增长方式，各种容器的适用场合<br />
手写一个快排<br />
TCP/IP传输细节，粘包<br />
同步锁的实现</p>
<p>ps:去哪儿网的一面是我面试时间最长的一次，大概有40分钟</p>
<p>二面：<br />
主要是我在介绍自己，他问的不太多。问到的大概有：<br />
红黑树相关知识<br />
你是怎么调试bug的？<br />
你解决编程问题的惯常办法是什么？<br />
遇到过程序溢出么？<br />
从你读完的技术书里受益最大的知识是什么？<br />
你的优势是什么？<br />
当然我也问了一下他们那边的情况，他们说是全部岗位都很缺人，进去之后再分配</p>
<p>三面就是简单聊了下，我说需要回去再考虑，他说两周后可以发个电子的两方给我签。结果一个月以后给我打了电话问我还来不，我还以为他已经把我忘了。。。<br />
</p></div><br />
<h3 class="toggle"><strong><a href="#">找工作经验总结：</a></strong></h3><div class="toggle-box" style="display: none;"><p><br />
1.尽早确立目标，根据职位要求进行准备。我基本上都投的后台开发（因为一般这个职位要人最多= =），不管啥公司，面来面去就是linux，tcp/ip，c/c++，数据结构与算法，和他们的职位要求完全一致。<br />
2.相对于社招，校招更看重学生的潜力。因此面试除了考察项目以外，也非常注重语言算法基础、解决问题的思路及自学能力。有与公司职位契合的项目固然最好，没有的话，单单准备好语言及算法基础，多刷刷oj，有经常读书总结的习惯，也可以拿到BAT的offer。<br />
3.找工作是一个运气成分非常高的事情。即使是制度严谨的公司，也无法保证各位面试官的评价标准相同。因此你会见到完全没接触linux却去写os的、没接触过java、hadoop、数据挖掘的去做data mining的（今年阿里确实挺好进……），还有国内公司全跪却拿了MS,google,IBM offer的。我便是运气的受益者，许多同届比我厉害得多的人，却没有签到更好的工作，替他们感到惋惜。<br />
总之，策略上应大胆海投，名企无论如何都要好好尝试一次。<br />
4.学校里的竞赛其实都很值钱的，比如中兴捧月，进决赛送手机送offer；华为编程大赛，进决赛直接绿色通道。<br />
</p></div></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thpiano.com/?feed=rss2&#038;p=915</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Day 8942 成都找工作之行流水账</title>
		<link>http://blog.thpiano.com/?p=882</link>
		<comments>http://blog.thpiano.com/?p=882#comments</comments>
		<pubDate>Mon, 30 Sep 2013 09:48:54 +0000</pubDate>
		<dc:creator>suika</dc:creator>
				<category><![CDATA[日常流水账]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[2014]]></category>
		<category><![CDATA[2014校招]]></category>
		<category><![CDATA[BAT]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[offer]]></category>
		<category><![CDATA[互联网]]></category>
		<category><![CDATA[优酷土豆]]></category>
		<category><![CDATA[去哪儿网]]></category>
		<category><![CDATA[应届生]]></category>
		<category><![CDATA[校园招聘]]></category>
		<category><![CDATA[校招]]></category>
		<category><![CDATA[百度]]></category>
		<category><![CDATA[笔试]]></category>
		<category><![CDATA[笔试题]]></category>
		<category><![CDATA[腾讯]]></category>
		<category><![CDATA[计算机]]></category>
		<category><![CDATA[锐捷]]></category>
		<category><![CDATA[阿里]]></category>
		<category><![CDATA[阿里巴巴]]></category>
		<category><![CDATA[面筋]]></category>
		<category><![CDATA[面经]]></category>
		<category><![CDATA[面试]]></category>

		<guid isPermaLink="false">http://blog.thpiano.com/?p=882</guid>
		<description><![CDATA[因为重庆实在是没公司来，而十一后又要出去开会，所以选择先到成都来面个痛快 还好今年各大公司9月份就纷纷开始抢人，正好可以避开开会时间。 最后就结果而言，真是出乎意料。我认为，我绝对是这批面试者里最最最幸运的，人家以实力说话，我以运气通关。。。 下面开始流水账： 9月20日： 到达成都 因为穷，没有跟其他同学一样买动车而是买了个k开头的 在川大找了个50/天的房子和另一个同学合租 9月21日： 上午笔百度，下午笔腾讯，晚上笔锐捷 感觉百度腾讯的笔试题没有去年难了。另外锐捷竟然直到我离开成都也没有给过我信，我笔试答得有那么差嘛 9月22日： 经历了昨天狂笔的劳累以后好好休息了一上午，傍晚去了川师笔阿里。 笔试地点是在就业中心的教室里。强烈投诉川师的教室环境，蚊子实在太多了，竟然隔着衣服就开咬，各人战况惨烈 打了快两个小时的蚊子，心里还惦记着百度来着，于是hr要求手机关机的时候只是偷偷调了震动；果然在一边打蚊子一边检查的时候手机响了，于是果断交了卷打回去，总算是没漏掉百度一面通知 9月23日： 上午百度一面，晚上网易笔试。 百度一面就聊了20分钟左右，前面几个linux相关的答得不好，后面算法倒还勉强接的上。因为很短就结束了，感觉比较意外，还告诉面试官我以为会问更多的算法来着，面试官回了句你算法基础还挺扎实的 晚上网易笔试比较搞笑，4点多的时候才收到通知说晚上要去电子科大清水河校区笔试，感觉当即坐车估计都不一定能赶过去了。。。 于是众人纷纷跑到川大来霸笔，凭借短信方得以进场。还配合同学做了下假，把网易给我的短信改了下转发给他，结果他也霸笔成功 感觉网易的卷子是自己做的最好的，全在考C++细节、小技巧以及算法手写代码，写的挺爽的 9月24日： 上午面阿里、下午1点半面百度二面，4点面腾讯一面，晚上回来还笔了个优酷土豆 这是忙到死的一天，没想到一天一共面了五场晚上还笔了俩小时。 上午面阿里，稀里糊涂地一口气面完了HR。进去注意到阿里每个面试官前面还放了牌子写着自己的花名。 一面问了20分钟左右，主要在讨论各种算法，除了一般的算法外还包括我的论文算法，分词算法，推荐系统等。难道要我去搞dm？ 面完以后让我等一下，去面二面（后来才知道二面面试官竟然是大boss，10P的，左耳朵耗子也才9P） 二面倒是主要是我在说，把对天猫的秒杀、抢红包等活动的策略及技术变化讲了下自己的看法，中间又问了些别的，最后大boss给了道智力题就让我再等等，在旁边找了个HR和我随便聊聊天竟然就结束了。。。 百度二面悲剧了，面试官是个非常亲和的人，问问题都和我一起商量着来。奈何人家手头活多，急需一个帮他写系统底层（准确说是kernel之上driver之下）的人，然后我就悲剧了 想试试面其他组，最后也没成功。感觉有些不甘心，都说百度最爱问算法，我却没被问多少 腾讯一面的面试官超有架子，问问题很快，问完几个问题就把我打发过去写算法了。他叫我20分钟写思路，10分钟写实现，被我搞定了。拿过去后他看了下说，你的二面将会非常艰难，硬着头皮上吧。我愣了下才反应过来他是告诉我一面结束了，出来后我才发现这貌似是我成都之行里用时最短的一次面试。 晚上笔优酷土豆，可能是我的职位填错了，笔完以后再无动静。。。 9月25日： 上午笔试去哪儿网，下午面了腾讯二面。 去哪儿网的笔试和网易的一面时间冲突了。我纠结了一阵后还是先跑到酒店去看了下网易HR的样子，顺便想看看自己的笔试成绩。HR说看不到分数，不过她是按成绩排的，我看到我是第三，也算心满意足了。看看时间差不多，想想网易这职位全国就招10个人，就放弃了面试，回去笔去哪儿网了。 其实说网易搞笑还是有另外一个原因，当初看到网易招人实在太少，我选了个招人多点的职位，没注意他考的是Java。等到笔试的时候，发现可以随便要卷子，于是我就要了C++的。做完C++笔试题以后，竟然收到了网易的Java面试通知。网易太奇妙了。 另外我很后悔报了网易互联网部门的。等回了重庆，觉得没有去面试游戏公司是一大遗憾。当初被网易游戏的招聘学校吓住了，其实我只是想要个聊天机会而已。 腾讯二面是下午四点，还想着面完腾讯以后去霸面下百度的，结果我前面的两个人每个人都面了一个半小时，我等了足足3个小时，6点多才面上腾讯。 更奇葩的是我只被问了不到20分钟就出来了，和前面俩人的时间差距也太大了。。。 就是问了些linux、socket相关的问题，几道算法，最后还有道智力题，两个人在桌子上摆硬币的那个，我没想出来。不过最后临走前面试官问了我个问题：“如果腾讯阿里都给你offer你选哪个”，本来看时间这么短，以为完全没戏的，听到这个感觉似乎又有了那么一点希望 9月26日： 阿里圆桌会议、腾讯三面。 晚上1点才接到阿里的电话通知，上午又跑回新良大酒店。说是圆桌会议，结果一个圆的桌子都没有看到。签了就业意向书，还一人发了一本《淘宝技术这十年》。今年阿里扩招，全国招1000人，成都这边要了70个，其中成电的就接近50个。 下午跑到腾讯总部去面hr了。因为今天要开华（tu）商（hao）大会的缘故，全市各机关单位放假，又各种封路，坐了挺久的公交才过去。和hr就北京和深圳的就业地点问题聊了好一段时间。不知道是不是上午签阿里太高兴了，下午腾讯面试一点都兴奋不起来，弄得hr还以为我一直很纠结北京来着 9月27日： 中午去找了几个在成都的本科同学聚了下，吃了正宗的川菜，傍晚去面了去哪儿网。 去哪儿网竟然下午5点才开始面试，之前hr还打了两个电话来提醒面试时间。 去哪儿网其实有很多独特的地方，一是今年不知为啥狂发offer，群里有同学大呼offer来的太容易，钱也不少，问是不是骗子公司 二是竟然完全不批笔试卷子，不知道他怎么筛选的，难道是看写的多少？ 三是一些比较独特的言论，比如宣讲会时问他们笔试要不要带简历，人家直接回答说“你们应届生的简历都没啥值得看的”；我面完以后还听到一群人在商量怎么对付霸面的，“看看项目，看看照片就筛了呗（众人笑）”“还是出笔试题给他们做吧，一道就行”“这酒店太小了，没场地啊”“xx搞定了下面宾馆的那个场，没问题” 感觉是气氛非常融洽的一帮人，另外去哪儿网的2014应届生FAQ写的也很有生活气息 一面就拿着我笔试卷子问来问去，让我手写了快排，还问了算法、linux、多线程、tcp/ip，不知不觉竟然问了我40分钟，是我被面最久的一次了； 二面不问技术细节，就让我讲讲学习经历，印象最深的从书中学到的知识点，自己的优势什么的； 三面的时候我已经饿死了 OTL。。。 [...]]]></description>
			<content:encoded><![CDATA[<p>因为重庆实在是没公司来，而十一后又要出去开会，所以选择先到成都来面个痛快<br />
还好今年各大公司9月份就纷纷开始抢人，正好可以避开开会时间。</p>
<p>最后就结果而言，真是出乎意料。我认为，我绝对是这批面试者里最最最幸运的，人家以实力说话，我以运气通关。。。<span id="more-882"></span><br />
下面开始流水账：</p>
<p><strong>9月20日：</strong><br />
到达成都</p>
<p>因为穷，没有跟其他同学一样买动车而是买了个k开头的<br />
在川大找了个50/天的房子和另一个同学合租</p>
<p><strong>9月21日：</strong><br />
上午笔百度，下午笔腾讯，晚上笔锐捷</p>
<p>感觉百度腾讯的笔试题没有去年难了。另外锐捷竟然直到我离开成都也没有给过我信，我笔试答得有那么差嘛</p>
<p><strong>9月22日：</strong><br />
经历了昨天狂笔的劳累以后好好休息了一上午，傍晚去了川师笔阿里。</p>
<p>笔试地点是在就业中心的教室里。强烈投诉川师的教室环境，蚊子实在太多了，竟然隔着衣服就开咬，各人战况惨烈<br />
打了快两个小时的蚊子，心里还惦记着百度来着，于是hr要求手机关机的时候只是偷偷调了震动；果然在一边打蚊子一边检查的时候手机响了，于是果断交了卷打回去，总算是没漏掉百度一面通知</p>
<p><strong>9月23日：</strong><br />
上午百度一面，晚上网易笔试。</p>
<p>百度一面就聊了20分钟左右，前面几个linux相关的答得不好，后面算法倒还勉强接的上。因为很短就结束了，感觉比较意外，还告诉面试官我以为会问更多的算法来着，面试官回了句你算法基础还挺扎实的<br />
晚上网易笔试比较搞笑，4点多的时候才收到通知说晚上要去电子科大清水河校区笔试，感觉当即坐车估计都不一定能赶过去了。。。<br />
于是众人纷纷跑到川大来霸笔，凭借短信方得以进场。还配合同学做了下假，把网易给我的短信改了下转发给他，结果他也霸笔成功<br />
感觉网易的卷子是自己做的最好的，全在考C++细节、小技巧以及算法手写代码，写的挺爽的</p>
<p><strong>9月24日：</strong><br />
上午面阿里、下午1点半面百度二面，4点面腾讯一面，晚上回来还笔了个优酷土豆</p>
<p>这是忙到死的一天，没想到一天一共面了五场晚上还笔了俩小时。<br />
上午面阿里，稀里糊涂地一口气面完了HR。进去注意到阿里每个面试官前面还放了牌子写着自己的花名。<br />
一面问了20分钟左右，主要在讨论各种算法，除了一般的算法外还包括我的论文算法，分词算法，推荐系统等。难道要我去搞dm？<br />
面完以后让我等一下，去面二面（后来才知道二面面试官竟然是大boss，10P的，左耳朵耗子也才9P）<br />
二面倒是主要是我在说，把对天猫的秒杀、抢红包等活动的策略及技术变化讲了下自己的看法，中间又问了些别的，最后大boss给了道智力题就让我再等等，在旁边找了个HR和我随便聊聊天竟然就结束了。。。</p>
<p>百度二面悲剧了，面试官是个非常亲和的人，问问题都和我一起商量着来。奈何人家手头活多，急需一个帮他写系统底层（准确说是kernel之上driver之下）的人，然后我就悲剧了<br />
想试试面其他组，最后也没成功。感觉有些不甘心，都说百度最爱问算法，我却没被问多少</p>
<p>腾讯一面的面试官超有架子，问问题很快，问完几个问题就把我打发过去写算法了。他叫我20分钟写思路，10分钟写实现，被我搞定了。拿过去后他看了下说，你的二面将会非常艰难，硬着头皮上吧。我愣了下才反应过来他是告诉我一面结束了，出来后我才发现这貌似是我成都之行里用时最短的一次面试。</p>
<p>晚上笔优酷土豆，可能是我的职位填错了，笔完以后再无动静。。。</p>
<p><strong>9月25日：</strong><br />
上午笔试去哪儿网，下午面了腾讯二面。</p>
<p>去哪儿网的笔试和网易的一面时间冲突了。我纠结了一阵后还是先跑到酒店去看了下网易HR的样子，顺便想看看自己的笔试成绩。HR说看不到分数，不过她是按成绩排的，我看到我是第三，也算心满意足了。看看时间差不多，想想网易这职位全国就招10个人，就放弃了面试，回去笔去哪儿网了。<br />
其实说网易搞笑还是有另外一个原因，当初看到网易招人实在太少，我选了个招人多点的职位，没注意他考的是Java。等到笔试的时候，发现可以随便要卷子，于是我就要了C++的。做完C++笔试题以后，竟然收到了网易的Java面试通知。网易太奇妙了。<br />
另外我很后悔报了网易互联网部门的。等回了重庆，觉得没有去面试游戏公司是一大遗憾。当初被网易游戏的招聘学校吓住了，其实我只是想要个聊天机会而已。</p>
<p>腾讯二面是下午四点，还想着面完腾讯以后去霸面下百度的，结果我前面的两个人每个人都面了一个半小时，我等了足足3个小时，6点多才面上腾讯。<br />
更奇葩的是我只被问了不到20分钟就出来了，和前面俩人的时间差距也太大了。。。<br />
就是问了些linux、socket相关的问题，几道算法，最后还有道智力题，两个人在桌子上摆硬币的那个，我没想出来。不过最后临走前面试官问了我个问题：“如果腾讯阿里都给你offer你选哪个”，本来看时间这么短，以为完全没戏的，听到这个感觉似乎又有了那么一点希望</p>
<p><strong>9月26日：</strong><br />
阿里圆桌会议、腾讯三面。</p>
<p>晚上1点才接到阿里的电话通知，上午又跑回新良大酒店。说是圆桌会议，结果一个圆的桌子都没有看到。签了就业意向书，还一人发了一本《淘宝技术这十年》。今年阿里扩招，全国招1000人，成都这边要了70个，其中成电的就接近50个。</p>
<p>下午跑到腾讯总部去面hr了。因为今天要开华（tu）商（hao）大会的缘故，全市各机关单位放假，又各种封路，坐了挺久的公交才过去。和hr就北京和深圳的就业地点问题聊了好一段时间。不知道是不是上午签阿里太高兴了，下午腾讯面试一点都兴奋不起来，弄得hr还以为我一直很纠结北京来着</p>
<p><strong>9月27日：</strong><br />
中午去找了几个在成都的本科同学聚了下，吃了正宗的川菜，傍晚去面了去哪儿网。</p>
<p>去哪儿网竟然下午5点才开始面试，之前hr还打了两个电话来提醒面试时间。<br />
去哪儿网其实有很多独特的地方，一是今年不知为啥狂发offer，群里有同学大呼offer来的太容易，钱也不少，问是不是骗子公司<br />
二是竟然完全不批笔试卷子，不知道他怎么筛选的，难道是看写的多少？<br />
三是一些比较独特的言论，比如宣讲会时问他们笔试要不要带简历，人家直接回答说“你们应届生的简历都没啥值得看的”；我面完以后还听到一群人在商量怎么对付霸面的，“看看项目，看看照片就筛了呗（众人笑）”“还是出笔试题给他们做吧，一道就行”“这酒店太小了，没场地啊”“xx搞定了下面宾馆的那个场，没问题”<br />
感觉是气氛非常融洽的一帮人，另外去哪儿网的2014应届生FAQ写的也很有生活气息</p>
<p>一面就拿着我笔试卷子问来问去，让我手写了快排，还问了算法、linux、多线程、tcp/ip，不知不觉竟然问了我40分钟，是我被面最久的一次了；<br />
二面不问技术细节，就让我讲讲学习经历，印象最深的从书中学到的知识点，自己的优势什么的；<br />
三面的时候我已经饿死了 OTL。。。 我表示因为实在太饿所以没法当场签，对面说可以两周后等我吃饱了签电子档的（误</p>
<p><strong>9月28日：</strong><br />
去了天府软件园招聘会，回重庆</p>
<p>看到这个天府软件园招聘会还是有挺多公司的，特别是不少游戏公司，金山亚丁，完美，2k，gameloft等等。就是人实在是太多了……</p>
<p>人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人<br />
人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人<br />
人人人人人人人人人人人人人人人人人人我人人人人人人人人人人人人人人人人人人人人人<br />
人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人<br />
人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人</p>
<p>基本上都是排了很久的队后发现只是简单聊下，收收简历，好坑。不过这里简历可以免费复印打印。和几个做游戏的稍微聊了下就回重庆了</p>
<p>最后总结下，除了那个去哪儿网的一面之外，其他面试基本都没有超过半小时，没有遭遇压力面试，也没有被面试官拽住狂问，我觉得只能归结于踩了一堆又一堆的狗屎运。。。。<br />
最大的体会是面试既有实力成分，也有运气成分。面试官的风格、偏好，有的时候会在应聘过程中取到决定性的作用；但一定要有一个拿得出手，令人印象深刻的方面做支撑，若是面试官通过前面几个问题可以认可你的简历而不是质疑，后面的事情就越来越简单了。<br />
还是要特别感谢自己的大师兄川江神犇，他提醒我补算法，刷oj，确实受益匪浅。</p>
<p>盘算着从halifax回来以后去北京再面几家游戏公司，真的是很想借着应届生的身份去好好聊一下，说不定还能见到doublecai，littlewater，gltracy，advance等仰慕已久的大牛</p>
<p>介于是篇流水账，我在文中也没怎么提及面试被问到的详细内容（貌似这个还被很多同学问到了）<br />
不写详细问题的主要原因有俩，一个是没有遇到很难的题，应该也没有遇到新题，都是些之前见到过的或者是已有问题的类似变种，平时去v_july_v之类的博客积累下，看看《编程之美》《编程珠玑》《剑指offer》等书肯定可以应付得了，所以印象不深刻，记录的价值也不高；另一个是因为实在是记不太清楚了OTL 特别是哪一面问了哪个算法题什么的，记忆已经完全乱作一团了……所以就不再记录。对于有些比较值得深入的题目，后面会另开文章单写</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thpiano.com/?feed=rss2&#038;p=882</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Cocos2d-x在android开发下的帧数控制</title>
		<link>http://blog.thpiano.com/?p=866</link>
		<comments>http://blog.thpiano.com/?p=866#comments</comments>
		<pubDate>Fri, 31 May 2013 08:50:11 +0000</pubDate>
		<dc:creator>suika</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[android游戏开发]]></category>
		<category><![CDATA[cocos2d-x]]></category>
		<category><![CDATA[cocos2dx]]></category>
		<category><![CDATA[sleep]]></category>
		<category><![CDATA[帧数控制]]></category>
		<category><![CDATA[手机游戏]]></category>
		<category><![CDATA[游戏开发]]></category>

		<guid isPermaLink="false">http://blog.thpiano.com/?p=866</guid>
		<description><![CDATA[自从人参第一次面试悲剧以后决定多补linux，顺手在linux下写点代码 于是就瞄准了cocos2dx这个框架，写个android下的小游戏 顺便给大家做下效率参考： 手机配置CPU 600Mhz，内存256M，显卡未知 以前用java下的opengles，大概每秒可以渲染16x16的纹理6000次 cocos2dx下面用的版本是2.1.4，自己做了个子弹池，全部用一个批次，在有纹理旋转的情况下每秒32000次 感觉30fps的话已经够用了！但是一接到手机上，发现fps怎么不受控制！？ 一路追到Cocos2dxRenderer.java里一览究竟： 12345678910111213141516171819202122232425262728public void onDrawFrame&#40;final GL10 gl&#41; &#123; &#160; &#160; /* &#160; &#160; &#160;* FPS controlling algorithm is not accurate, and it will slow down FPS &#160; &#160; &#160;* on some devices. So comment FPS controlling code. &#160; &#160; &#160;*/ &#160; &#160; &#160; &#160; /* &#160; &#160; final [...]]]></description>
			<content:encoded><![CDATA[<p>自从人参第一次面试悲剧以后决定多补linux，顺手在linux下写点代码<br />
于是就瞄准了cocos2dx这个框架，写个android下的小游戏<br />
顺便给大家做下效率参考：<br />
手机配置CPU 600Mhz，内存256M，显卡未知<br />
以前用java下的opengles，大概每秒可以渲染16x16的纹理6000次<br />
cocos2dx下面用的版本是2.1.4，自己做了个子弹池，全部用一个批次，在有纹理旋转的情况下每秒32000次<br />
感觉30fps的话已经够用了！但是一接到手机上，发现fps怎么不受控制！？</p>
<p>一路追到Cocos2dxRenderer.java里一览究竟：<span id="more-866"></span></p>
<div class="codecolorer-container java geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onDrawFrame<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> GL10 gl<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">/*<br />
&nbsp; &nbsp; &nbsp;* FPS controlling algorithm is not accurate, and it will slow down FPS<br />
&nbsp; &nbsp; &nbsp;* on some devices. So comment FPS controlling code.<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">/*<br />
&nbsp; &nbsp; final long nowInNanoSeconds = System.nanoTime();<br />
&nbsp; &nbsp; final long interval = nowInNanoSeconds - this.mLastTickInNanoSeconds;<br />
&nbsp; &nbsp; */</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// should render a frame when onDrawFrame() is called or there is a</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// &quot;ghost&quot;</span><br />
&nbsp; &nbsp; Cocos2dxRenderer.<span style="color: #006633;">nativeRender</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">/*<br />
&nbsp; &nbsp; // fps controlling<br />
&nbsp; &nbsp; if (interval &lt; Cocos2dxRenderer.sAnimationInterval) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; try {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // because we render it before, so we should sleep twice time interval<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Thread.sleep((Cocos2dxRenderer.sAnimationInterval - interval) / Cocos2dxRenderer.NANOSECONDSPERMICROSECOND);<br />
&nbsp; &nbsp; &nbsp; &nbsp; } catch (final Exception e) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; this.mLastTickInNanoSeconds = nowInNanoSeconds;<br />
&nbsp; &nbsp; */</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>原来是帧数控制部分被官方注释掉了，他们给的原因是“不精确，在某些设备上还会拖慢速度”</p>
<p>当然除了动这个java文件，其实也有其他的解决方案，比如说干脆用一个while死循环完完全全地轮询过去，但是这种情况下的耗电和cpu占用都令人难以接受；<br />
也可以直接在游戏逻辑部分用c++写自己的帧数控制，但是却丧失了可移植性（至少linux/win32下的精确帧数控制写法是不同的）<br />
所以不能这么轻易就放弃，还是要在这里好好动手改一下。</p>
<p>首先要提出批评，貌似cocos2dx在这个android帧数控制上一直都有问题。<br />
首先注意看Thread.sleep((Cocos2dxRenderer.sAnimationInterval - interval) / Cocos2dxRenderer.NANOSECONDSPERMICROSECOND); 这句话，在早期版本里他sleep的时间是目前的2倍（官方注释都被保留了下来作为证据= =），至于为啥要乘以2他也语焉不详了。<br />
后来也有使用者发现了这个问题，于是去掉了乘以2，确实有所改良。（<a href="http://www.cocos2d-x.org/boards/6/topics/25571">见此</a>）</p>
<p>不过现在的这个Cocos2dxRenderer.java里单纯去掉注释，还是不行，因为他interval（或是上一帧时间基准）的计算位置还是错的OTL……<br />
给他挪好位置，在没什么负载的情况下，终于可以稳定在指定帧数上了。但是在有负载的情况下，却出现了拖慢的问题：<br />
若是不启用帧数控制，则原本可同屏900子弹跑到35-40fps，若是启用帧数控制，连25帧都稳定不到了。<br />
损耗出在哪里呢？我将计时换成了System.nanoTime()，已确定该函数损耗不高，但依旧不行。<br />
问题出在sleep上。在java里，sleep本来就不是一个能够得到精确保证的计时函数，实际运行的时候，经过测试，精度至少是比15ms还要差的</p>
<p>所以我的解决方案是，<span style="color: #0000ff;">先使用sleep进行等待在当前精度下比较保险的较短时间；对于剩余的部分，再采用while+轮询等待来补足</span>。<br />
比如说，预计精度是15ms，当前帧要等待35ms，则sleep(20ms)，在sleep醒来之后，可以预计此时时间已经过了20-35ms，但不会超过35ms，于是剩下的部分就用while等过去。<br />
这样既能提高精度，又能够避免一直用循环等待而带来的高耗电和cpu占用。代码见下：</p>
<div class="codecolorer-container java geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">long</span> ACCURACYNANOSECONDSPERSECOND <span style="color: #339933;">=</span> NANOSECONDSPERMICROSECOND <span style="color: #339933;">*</span> <span style="color: #cc66cc;">15</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//accuracy</span><br />
<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">long</span> lastRenderingTime<span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onDrawFrame<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> GL10 gl<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; Cocos2dxRenderer.<span style="color: #006633;">nativeRender</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">long</span> now <span style="color: #339933;">=</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">nanoTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">long</span> renderingElapsedTime <span style="color: #339933;">=</span> now <span style="color: #339933;">-</span> lastRenderingTime<span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">long</span> timeToWait <span style="color: #339933;">=</span> Cocos2dxRenderer.<span style="color: #006633;">sAnimationInterval</span> <span style="color: #339933;">-</span> renderingElapsedTime<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// try to sleep for a relative short (but safe) time according to ACCURACYNANOSECONDSPERSECOND</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>timeToWait <span style="color: #339933;">&gt;</span> ACCURACYNANOSECONDSPERSECOND<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Athread+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Thread</span></a>.<span style="color: #006633;">sleep</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>timeToWait <span style="color: #339933;">-</span> ACCURACYNANOSECONDSPERSECOND<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Ainterruptedexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">InterruptedException</span></a> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">while</span><span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">nanoTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> now <span style="color: #339933;">&lt;</span> timeToWait<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// wait for the rest time that smaller than ACCURACYNANOSECONDSPERSECOND</span><br />
&nbsp; &nbsp; lastRenderingTime <span style="color: #339933;">=</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">nanoTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>&nbsp; <br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>变量lastRenderingTime在onSurfaceCreated函数里初始化一下即可。<br />
最后效果确实是提高了，至少可以稳定在28-30帧之间，勉强算是可以接受啦</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thpiano.com/?feed=rss2&#038;p=866</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>第五届华为“创新杯”编程大赛初赛题目（第二场）</title>
		<link>http://blog.thpiano.com/?p=835</link>
		<comments>http://blog.thpiano.com/?p=835#comments</comments>
		<pubDate>Sat, 11 May 2013 05:26:34 +0000</pubDate>
		<dc:creator>suika</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[初赛]]></category>
		<category><![CDATA[华为编程大赛]]></category>
		<category><![CDATA[第五届华为“创新杯”编程大赛初赛题目]]></category>
		<category><![CDATA[第五届华为编程大赛]]></category>
		<category><![CDATA[答案]]></category>
		<category><![CDATA[题目]]></category>
		<category><![CDATA[高级组]]></category>

		<guid isPermaLink="false">http://blog.thpiano.com/?p=835</guid>
		<description><![CDATA[接上一篇帖子 感觉就是简单的匹配，自己代码结果未知 一开始想着，就是把数当字符串来排序输出就行了 多想一下，发现其实是很复杂的问题，例如{21,2}就应输出212，而非按字典序的221 网上搜了下，是百度09年的面试题 大体思路依然是字符串排序，只不过在决定A,B次序时，只需比较AB、BA这两个字符串哪个更小，若AB小于BA，则在最小序列里，A一定在B的前面。 证明看网上写了一大堆，真啰嗦。我认为，若AB小于BA，则对于任意串x,y,z，显然有xAyBz小于xByAz，有这个结论就足够了。 不过这个思路实在是很难想到。 完全没思路的一道题，一开始还想dp做的，但是状态不太好写（到达某站点下的最小代价和剩余电力都要考虑，多了的电又不能换钱） 后来就用如下土策略试试： 到达某站时： 1.如果剩余电量能到达后面电力更便宜的一个站，就开过去 2.如果1不符合，但是如果能够在该站加电，到达后面电力更便宜的一个站，就加电开过去，使得抵达时电力恰好用完 3.如果1,2都不符合，就在这个站加满电，然后跑到下一个站。若能抵达终点，就直接到终点 没法证明最优解，不过居然AC了]]></description>
			<content:encoded><![CDATA[<p>接上一篇帖子<span id="more-835"></span><br />
<h3 class="toggle"><strong><a href="#">第一题：密码合法性校验（点击展开）</a></strong></h3><div class="toggle-box" style="display: none;"><p><strong>题目描述</strong><br />
随着网络信息化应用的不断推进，网络安全问题越来越被重视。在网络和系统安全领域中，设置复杂的密码是提高网络安全最简单最有效的方式。基于上述原因，大多数统规定用户的密码长度和复杂度必须满足下述条件：<br />
1、密码由英文大小写字母、数字以及特殊符号组成，其中特殊符号只能是：<br />
@ # $ % ^ &#038; * + / = ! ? - _ ( )<br />
2、密码最短8个字符，最长20个字符。<br />
3、密码必须包含下列类型中的任意3类：1）大写字母；2）小写字母；3）数字；4）特殊字符。<br />
请编写一段程序，用于验证输入的密码是否符合系统要求。</p>
<p><strong>输入</strong><br />
一串字符，如My#Password</p>
<p><strong>输出</strong><br />
如果密码符合要求输出true，否则输出false</p>
<p>如输入This8Password ，输出true，输入Pass123 ，输出false</p>
<p><strong>样例输入</strong><br />
This8Password<br />
<strong>样例输出</strong><br />
true<br />
</p></div><br />
感觉就是简单的匹配，自己代码结果未知<br />
<h3 class="toggle"><strong><a href="#">第一题自己的代码</a></strong></h3><div class="toggle-box" style="display: none;"><p></p>
<div class="codecolorer-container cpp geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br /></div></td><td><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339900;">#include &lt;stdio.h&gt;</span><br />
<span style="color: #339900;">#include &lt;string.h&gt;</span><br />
<br />
<span style="color: #0000ff;">char</span> code<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">16</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#123;</span><span style="color: #FF0000;">'@'</span>, <span style="color: #FF0000;">'#'</span>, <span style="color: #FF0000;">'$'</span>, <span style="color: #FF0000;">'%'</span>, <span style="color: #FF0000;">'^'</span>, <span style="color: #FF0000;">'&amp;'</span>, <span style="color: #FF0000;">'*'</span>, <span style="color: #FF0000;">'+'</span>, <span style="color: #FF0000;">'/'</span>, <span style="color: #FF0000;">'='</span>, <span style="color: #FF0000;">'!'</span>, <span style="color: #FF0000;">'?'</span>, <span style="color: #FF0000;">'-'</span>, <span style="color: #FF0000;">'_'</span>, <span style="color: #FF0000;">'('</span>, <span style="color: #FF0000;">')'</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">bool</span> type<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#123;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> check<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span> a<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>a <span style="color: #000080;">&gt;=</span> <span style="color: #FF0000;">'0'</span> <span style="color: #000040;">&amp;&amp;</span> a <span style="color: #000080;">&lt;=</span> <span style="color: #FF0000;">'9'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>a <span style="color: #000080;">&gt;=</span> <span style="color: #FF0000;">'A'</span> <span style="color: #000040;">&amp;&amp;</span> a <span style="color: #000080;">&lt;=</span> <span style="color: #FF0000;">'Z'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>a <span style="color: #000080;">&gt;=</span> <span style="color: #FF0000;">'a'</span> <span style="color: #000040;">&amp;&amp;</span> a <span style="color: #000080;">&lt;=</span> <span style="color: #FF0000;">'z'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">16</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>a <span style="color: #000080;">==</span> code<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">3</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">return</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">char</span> buf<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">500</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%s&quot;</span>, buf<span style="color: #008000;">&#41;</span> <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #0000ff;">EOF</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">4</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">bool</span> y <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">int</span> len <span style="color: #000080;">=</span> <span style="color: #0000dd;">strlen</span><span style="color: #008000;">&#40;</span>buf<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>len <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">8</span> <span style="color: #000040;">||</span> len <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">20</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;false<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">continue</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> len<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">int</span> r <span style="color: #000080;">=</span> check<span style="color: #008000;">&#40;</span>buf<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>r <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; y <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type<span style="color: #008000;">&#91;</span>r<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">int</span> sum <span style="color: #000080;">=</span> type<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">4</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sum <span style="color: #000040;">+</span><span style="color: #000080;">=</span> type<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>y <span style="color: #000040;">&amp;&amp;</span> sum <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;true<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><span style="color: #0000ff;">else</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;false<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span></div></td></tr></tbody></table></div>
<p></p></div></p>
<p><h3 class="toggle"><strong><a href="#">第二题：把数组排成最小的数 </a></strong></h3><div class="toggle-box" style="display: none;"><p><strong>题目描述</strong><br />
输入一个正整数数组，将它们连接起来排成一个数，输出能排出的所有数字中最小的一个。<br />
如给定数组：{2,1}<br />
则排出的最小数字为：12</p>
<p><strong>输入</strong><br />
输入为字符串，其格式为“{数字，数字，……}”</p>
<p><strong>输出</strong><br />
排出的最小数字</p>
<p><strong>样例输入</strong><br />
{2,1}<br />
<strong>样例输出</strong><br />
12<br />
</p></div><br />
一开始想着，就是把数当字符串来排序输出就行了<br />
多想一下，发现其实是很复杂的问题，例如{21,2}就应输出212，而非按字典序的221<br />
网上搜了下，是百度09年的面试题<br />
大体思路依然是字符串排序，只不过在决定A,B次序时，只需比较AB、BA这两个字符串哪个更小，若AB小于BA，则在最小序列里，A一定在B的前面。<br />
证明看网上写了一大堆，真啰嗦。我认为，若AB小于BA，则对于任意串x,y,z，显然有xAyBz小于xByAz，有这个结论就足够了。<br />
不过这个思路实在是很难想到。<br />
<h3 class="toggle"><strong><a href="#">第二题自己的代码</a></strong></h3><div class="toggle-box" style="display: none;"><p></p>
<div class="codecolorer-container cpp geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br /></div></td><td><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339900;">#include &lt;stdio.h&gt;</span><br />
<span style="color: #339900;">#include &lt;stdlib.h&gt;</span><br />
<br />
<span style="color: #339900;">#define MAXNUM 200</span><br />
<span style="color: #339900;">#define NUMLEN 200</span><br />
<br />
<span style="color: #0000ff;">char</span> num<span style="color: #008000;">&#91;</span>MAXNUM<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>NUMLEN<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> n <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">int</span> cmp<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span> <span style="color: #000040;">*</span>a, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span> <span style="color: #000040;">*</span>b<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> c1 <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span><span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>a<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> c2 <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span><span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>b<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">int</span> i<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>c1 <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #000040;">*</span>c2<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">return</span> <span style="color: #000040;">*</span>c1 <span style="color: #000040;">-</span> <span style="color: #000040;">*</span>c2<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000040;">++</span>c1<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000040;">++</span>c2<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>c1 <span style="color: #000080;">==</span> <span style="color: #FF0000;">'<span style="color: #006699; font-weight: bold;">\0</span>'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000040;">++</span>i<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c1 <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span><span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>b<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>c2 <span style="color: #000080;">==</span> <span style="color: #FF0000;">'<span style="color: #006699; font-weight: bold;">\0</span>'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c2 <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span><span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>a<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">char</span> tmp<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">int</span> i, pos <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%c&quot;</span>, <span style="color: #000040;">&amp;</span>tmp<span style="color: #008000;">&#41;</span> <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #0000ff;">EOF</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>tmp <span style="color: #000080;">&gt;=</span> <span style="color: #FF0000;">'0'</span> <span style="color: #000040;">&amp;&amp;</span> tmp <span style="color: #000080;">&lt;=</span> <span style="color: #FF0000;">'9'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; num<span style="color: #008000;">&#91;</span>n<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>pos<span style="color: #000040;">++</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> tmp<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><span style="color: #0000ff;">else</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; num<span style="color: #008000;">&#91;</span>n<span style="color: #000040;">++</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>pos<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'<span style="color: #006699; font-weight: bold;">\0</span>'</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pos <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>tmp <span style="color: #000080;">==</span> <span style="color: #FF0000;">'}'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">getchar</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">qsort</span><span style="color: #008000;">&#40;</span>num, n, <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span> NUMLEN, cmp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> n<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%s&quot;</span>, num<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; n <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span></div></td></tr></tbody></table></div>
<p></p></div></p>
<p><h3 class="toggle"><strong><a href="#">第三题：以最节省的方式完成全程</a></strong></h3><div class="toggle-box" style="display: none;"><p><br />
<strong>题目描述</strong><br />
电瓶车行到终点过程中有N个充电站，每个充电站的价格是不同的，每度电可运行的距离固定。请以最节省方式骑完全程。<br />
在起始的时候每个电瓶车的电量是满的，此部分价格不算入总价格</p>
<p><strong>输入</strong><br />
输入参数为电瓶车能够存储电量的大小，终点距起点的距离，每度电可运行的距离，充电站个数，充电站列表。</p>
<p>其中充电站列表包括该充电的每度价格和距起点的距离</p>
<p>充电站列表的结构</p>
<p>{</p>
<p>    Int nPrize;//每度电单价</p>
<p>    int nDist;//离出发点距离</p>
<p>}</p>
<p>注意，充电站的结构请按照字符串的方式进行解析</p>
<p><strong>输出</strong><br />
输出：如果可以达到终点，则输出运行的距离和花费；如果不能运行到达终点，则输出可运行的最大距离和花费</p>
<p><strong>样例输入</strong><br />
10 20 1 2 {1,5} {2,15}<br />
<strong>样例输出</strong><br />
20 15<br />
</p></div><br />
完全没思路的一道题，一开始还想dp做的，但是状态不太好写（到达某站点下的最小代价和剩余电力都要考虑，多了的电又不能换钱）<br />
后来就用如下土策略试试：<br />
到达某站时：<br />
1.如果剩余电量能到达后面电力更便宜的一个站，就开过去<br />
2.如果1不符合，但是如果能够在该站加电，到达后面电力更便宜的一个站，就加电开过去，使得抵达时电力恰好用完<br />
3.如果1,2都不符合，就在这个站加满电，然后跑到下一个站。若能抵达终点，就直接到终点<br />
没法证明最优解，不过居然AC了<br />
<h3 class="toggle"><strong><a href="#">第三题自己的代码</a></strong></h3><div class="toggle-box" style="display: none;"><p></p>
<div class="codecolorer-container cpp geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br /></div></td><td><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339900;">#include &lt;stdio.h&gt;</span><br />
<span style="color: #339900;">#include &lt;stdlib.h&gt;</span><br />
<span style="color: #0000ff;">double</span> max, dist, cost<span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> sNum<span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">typedef</span> <span style="color: #0000ff;">struct</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">int</span> nPrize<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">int</span> nDist<span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span>Station<span style="color: #008080;">;</span><br />
Station s<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">100000</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">int</span> cmp<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span><span style="color: #000040;">*</span>a, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">void</span><span style="color: #000040;">*</span>b<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>Station<span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>a<span style="color: #008000;">&#41;</span>.<span style="color: #007788;">nDist</span> <span style="color: #000040;">-</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>Station<span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span>b<span style="color: #008000;">&#41;</span>.<span style="color: #007788;">nDist</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">char</span> tmpc<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%lf%lf%lf%d&quot;</span>, <span style="color: #000040;">&amp;</span>max, <span style="color: #000040;">&amp;</span>dist, <span style="color: #000040;">&amp;</span>cost, <span style="color: #000040;">&amp;</span>sNum<span style="color: #008000;">&#41;</span> <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #0000ff;">EOF</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> sNum<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%c&quot;</span>, <span style="color: #000040;">&amp;</span>tmpc<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;{%d,%d}&quot;</span>, <span style="color: #000040;">&amp;</span>s<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">nPrize</span>, <span style="color: #000040;">&amp;</span>s<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">nDist</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">qsort</span><span style="color: #008000;">&#40;</span>s, sNum, <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>Station<span style="color: #008000;">&#41;</span>, cmp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>cost <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d %d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, dist, <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">continue</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>sNum <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span> <span style="color: #000040;">||</span> dist <span style="color: #000080;">&lt;=</span> max <span style="color: #000040;">/</span> cost<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d %d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, max<span style="color: #000040;">/</span>cost <span style="color: #000080;">&gt;</span> dist<span style="color: #008080;">?</span> dist <span style="color: #008080;">:</span> max<span style="color: #000040;">/</span>cost, <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">continue</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">nDist</span> <span style="color: #000080;">&gt;</span> max<span style="color: #000040;">/</span>cost<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d %d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, max<span style="color: #000040;">/</span>cost, <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">int</span> ind <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">double</span> cur <span style="color: #000080;">=</span> max <span style="color: #000040;">-</span> s<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">nDist</span> <span style="color: #000040;">*</span> cost<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">double</span> len <span style="color: #000080;">=</span> s<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">nDist</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">double</span> money <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">true</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">int</span> j<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">bool</span> done <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j <span style="color: #000080;">=</span> ind <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> j <span style="color: #000080;">&lt;</span> sNum <span style="color: #000040;">&amp;&amp;</span> <span style="color: #008000;">&#40;</span>s<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">nDist</span> <span style="color: #000040;">-</span> s<span style="color: #008000;">&#91;</span>ind<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">nDist</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">/</span> cost <span style="color: #000080;">&lt;=</span> cur<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>j<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">nPrize</span> <span style="color: #000080;">&lt;=</span> s<span style="color: #008000;">&#91;</span>ind<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">nPrize</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; len <span style="color: #000080;">=</span> s<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">nDist</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cur <span style="color: #000040;">-</span><span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>s<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">nDist</span> <span style="color: #000040;">-</span> s<span style="color: #008000;">&#91;</span>ind<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">nDist</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> cost<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ind <span style="color: #000080;">=</span> j<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; done <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>done<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">continue</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #008080;">;</span> j <span style="color: #000080;">&lt;</span> sNum <span style="color: #000040;">&amp;&amp;</span> <span style="color: #008000;">&#40;</span>s<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">nDist</span> <span style="color: #000040;">-</span> s<span style="color: #008000;">&#91;</span>ind<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">nDist</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> cost <span style="color: #000080;">&lt;=</span> max<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>j<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">nPrize</span> <span style="color: #000080;">&lt;=</span> s<span style="color: #008000;">&#91;</span>ind<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">nPrize</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; len <span style="color: #000080;">=</span> s<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">nDist</span><span style="color: #008080;">;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; money <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>s<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">nDist</span> <span style="color: #000040;">-</span> s<span style="color: #008000;">&#91;</span>ind<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">nDist</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> cost <span style="color: #000040;">-</span> cur<span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> s<span style="color: #008000;">&#91;</span>ind<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">nPrize</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cur <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ind <span style="color: #000080;">=</span> j<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; done <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>done<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">continue</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>dist <span style="color: #000040;">-</span> len<span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> cost <span style="color: #000080;">&lt;=</span> max<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; money <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>dist <span style="color: #000040;">-</span> len<span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> cost <span style="color: #000040;">-</span> cur<span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> s<span style="color: #008000;">&#91;</span>ind<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">nPrize</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; len <span style="color: #000080;">=</span> dist<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><span style="color: #0000ff;">else</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; money <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>max <span style="color: #000040;">-</span> cur<span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> s<span style="color: #008000;">&#91;</span>ind<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">nPrize</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cur <span style="color: #000080;">=</span> max<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ind <span style="color: #000080;">==</span> sNum <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; len <span style="color: #000040;">+</span><span style="color: #000080;">=</span> max <span style="color: #000040;">/</span> cost<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><span style="color: #0000ff;">else</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000040;">++</span>ind<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cur <span style="color: #000040;">-</span><span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>s<span style="color: #008000;">&#91;</span>ind<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">nDist</span> <span style="color: #000040;">-</span> len<span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> cost<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; len <span style="color: #000080;">=</span> s<span style="color: #008000;">&#91;</span>ind<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">nDist</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d %d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, <span style="color: #0000ff;">int</span><span style="color: #008000;">&#40;</span>len<span style="color: #008000;">&#41;</span>, <span style="color: #0000ff;">int</span><span style="color: #008000;">&#40;</span>money<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span></div></td></tr></tbody></table></div>
<p></p></div></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thpiano.com/?feed=rss2&#038;p=835</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>第五届华为“创新杯”编程大赛初赛题目（第一场）</title>
		<link>http://blog.thpiano.com/?p=829</link>
		<comments>http://blog.thpiano.com/?p=829#comments</comments>
		<pubDate>Sat, 11 May 2013 05:03:29 +0000</pubDate>
		<dc:creator>suika</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[创新杯]]></category>
		<category><![CDATA[初赛题目]]></category>
		<category><![CDATA[华为]]></category>
		<category><![CDATA[第五届]]></category>
		<category><![CDATA[第五届华为“创新杯”编程大赛]]></category>
		<category><![CDATA[答案]]></category>
		<category><![CDATA[编程大赛]]></category>
		<category><![CDATA[题目]]></category>
		<category><![CDATA[高级组]]></category>

		<guid isPermaLink="false">http://blog.thpiano.com/?p=829</guid>
		<description><![CDATA[分了两场，每场三道题 这次华为终于用online judge了 OTL…… 难度也是比去年的提高了不少（去年题还都停留在字符串操作上 见：http://blog.thpiano.com/?p=543） 不过就是华为那边服务器运行结果慢如牛，比完了都不知道结果…… 顺便所有题都没有输入输出范围，部分题意也有些含糊 先把题目和自己的烂代码贴一下吧 题目写了这么长，就是个异或 签到题 自己的代码wa了，找不到wa在哪，求各位指点…… 最大数字应该是2的60次方，double也应该存的下才对，难道要大数乘法 OTL 只能粗略地把&#038;&#038;合并，最后是TLE 估计要用线段树 第二场的另起一篇发吧，感觉有点长]]></description>
			<content:encoded><![CDATA[<p>分了两场，每场三道题<br />
这次华为终于用online judge了 OTL…… 难度也是比去年的提高了不少（去年题还都停留在字符串操作上 见：<a href="http://blog.thpiano.com/?p=543" title="http://blog.thpiano.com/?p=543">http://blog.thpiano.com/?p=543</a>）<br />
不过就是华为那边服务器运行结果慢如牛，比完了都不知道结果……<br />
顺便所有题都没有输入输出范围，部分题意也有些含糊<br />
先把题目和自己的烂代码贴一下吧<span id="more-829"></span><br />
<h3 class="toggle"><strong><a href="#">第一题：磁盘数据恢复（点此展开）</a></strong></h3><div class="toggle-box" style="display: none;"><p><strong>题目描述</strong><br />
在存储领域，RAID5是一种兼顾数据安全、成本和性能的磁盘阵列技术方案，它是把数据和校验信息均匀地分散到阵列的各个磁盘上，每个磁盘上既有数据，又有校验信息，当一个数据盘损坏时，系统可以根据同一带区（下图中的D1D2D3P1）的其他数据块和对应的校验信息来重构损坏的数据。如下所示为数据D1D2D3D4D5D6D7D8D9D10D11D12即其相应校验信息P1P2P3P4在阵列中的分布（D为数据，P为校验信息，每一列为一阵列磁盘，每一行为一带区）：</p>
<p>       D1(0x1a)    D2(0x2a)    D3(?)    P1(0x6a)<br />
       D4(0x4a)    D5(0x5a)    P2(?)    D6(0x6a)<br />
       D7(0x7a)    P3(0x6a)    D8(?)    D9(0x9a)<br />
       P4(0xad)    D10(0xaf)   D11(?)   D12(0xac)</p>
<p>系统已经把数据信息{D1(0x1a), D2(0x2a), D3(?), D4(0x6a), D5(0x5a), D6(0x6a), D7(0x7a), D8(?), D9(0x9a), D10(0xaf), D11(?), D12(0xac)}及其异或校验码信息{P1(0x6a), P2(?), P3(0x6a), P4(0xad)}按照RAID5技术如上依次存储在四个阵列磁盘中，但不幸的是部分磁盘数据已经损坏，如上图所示第3列（即第3块磁盘），请将其同一带区中丢失的信息恢复出来。</p>
<p>注意：数据校验信息是通过异或计算得来的。</p>
<p>例如：其中“?”表示待恢复的数据和校验码信息。在输入数据时为方便操作，“?”用0xff表示，测试用例中会保证其它正常数据不会出现0xff。以上输入信息变为{ 0x1a, 0x2a, 0xff, 0x6a, 0x4a, 0x5a, 0xff, 0x6a, 0x7a, 0x6a, 0xff, 0x9a, 0xad, 0xaf, 0xff, 0xac }</p>
<p>丢失数据和校验信息的恢复：D3=0x5a, P2=0x7a, D8= 0x8a, D11=0xae</p>
<p><strong>输入</strong><br />
以空格隔开的16进制数字(数据共计16个，如上图中所示规模)</p>
<p><strong>输出</strong><br />
以空格隔开的恢复后的数据和校验信息</p>
<p><strong>样例输入</strong><br />
0x1a 0x2a 0xff 0x6a 0x4a 0x5a 0xff 0x6a 0x7a 0x6a 0xff 0x9a 0xad 0xaf 0xff 0xac<br />
<strong>样例输出</strong><br />
0x5a 0x7a 0x8a 0xae<br />
</p></div><br />
题目写了这么长，就是个异或<br />
签到题<br />
<h3 class="toggle"><strong><a href="#">第一题自己的AC代码</a></strong></h3><div class="toggle-box" style="display: none;"><p></p>
<div class="codecolorer-container cpp geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br /></div></td><td><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339900;">#include &lt;stdio.h&gt;</span><br />
<br />
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">int</span> x, tmp, i ,j<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; x <span style="color: #000080;">=</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">int</span> count <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%x&quot;</span>, <span style="color: #000040;">&amp;</span>tmp<span style="color: #008000;">&#41;</span> <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #0000ff;">EOF</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>tmp <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x <span style="color: #000040;">^</span><span style="color: #000080;">=</span> tmp<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000040;">++</span>count<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>count <span style="color: #000040;">%</span> <span style="color: #0000dd;">4</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x <span style="color: #000040;">&amp;</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">255</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;0x%x&quot;</span>, x<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>count <span style="color: #000040;">%</span> <span style="color: #0000dd;">16</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><span style="color: #0000ff;">else</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot; &quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x <span style="color: #000080;">=</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span></div></td></tr></tbody></table></div>
<p></p></div></p>
<h3 class="toggle"><strong><a href="#">第二题：容量转换</a></strong></h3><div class="toggle-box" style="display: none;"><p><strong>题目描述</strong><br />
随着大数据时代的到来，也就意味着越来越多的数据需要被存储与分析。10年前，市场上主流的硬盘容量也就20GB，而今天，硬盘容量已达到</p>
<p>TB级别。在一些大型企业的数据中心，购买的存储容量多达几十，上百个PB，甚至达到EB级别。但用户在使用过程中，如果将EB级的容量使用</p>
<p>MB呈现，将带来极大的困扰，比如华为网盘给你分配了50M的空间，而你仅使用了11M，还剩下39M，如果华为告诉你，你的网盘空间剩余</p>
<p>33936KB或0.000037TB，你将很难认知当前你的网盘空间只有39M了。但如果转换到GB，则剩余就应该是0.038G，虽能够较好的感知容量剩余大</p>
<p>小，但此时造成了容量损失为39MB-38.92MB=0.08MB，此种转换不可取，因此显示为39M为最优的容量（既能有效识别容量大小，也能够尽可能</p>
<p>减少容量精度损失）。<br />
因此，需要完成一个容量转换算法：给定一个在KB~EB范围内的任意容量大小，需要将其转换到(1~1024)范围内且合适的容量单位上进行呈现</p>
<p>，要求：<br />
1） 转换后容量的精度保留3位小数，且精度位需要下取整以保证转换后的容量一定可用；如3.1256，精度位下取整后，数字为3.125。<br />
2） 如果容量转换后输出为0.000，则始终以整数形式输出，结果应为0GB；其余结果都需要保留3位精度。</p>
<p><strong>输入</strong><br />
容量输入格式=容量数字+空格+单位，如2.536 PB；单位有KB、MB、GB、TB、PB、EB</p>
<p><strong>输出</strong><br />
转换后容量输出格式=容量数字+单位，如2.536PB；单位有KB、MB、GB、TB、PB、EB；</p>
<p><strong>样例输入</strong><br />
0.00335 TB<br />
<strong>样例输出</strong><br />
3.430GB<br />
</p></div>
<p>自己的代码wa了，找不到wa在哪，求各位指点……<br />
最大数字应该是2的60次方，double也应该存的下才对，难道要大数乘法 OTL<br />
<h3 class="toggle"><strong><a href="#">第二题自己的代码</a></strong></h3><div class="toggle-box" style="display: none;"><p></p>
<div class="codecolorer-container cpp geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br /></div></td><td><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339900;">#include &lt;stdio.h&gt;</span><br />
<br />
<span style="color: #0000ff;">char</span> level<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">6</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#123;</span><span style="color: #FF0000;">'E'</span>, <span style="color: #FF0000;">'P'</span>, <span style="color: #FF0000;">'T'</span>, <span style="color: #FF0000;">'G'</span>, <span style="color: #FF0000;">'M'</span>, <span style="color: #FF0000;">'K'</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">char</span> l<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">30</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">double</span> num<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">int</span> i<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%lf&quot;</span>, <span style="color: #000040;">&amp;</span>num<span style="color: #008000;">&#41;</span> <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #0000ff;">EOF</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%s&quot;</span>, l<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">6</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>l<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">==</span> level<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span>num <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">1</span> <span style="color: #000040;">&amp;&amp;</span> i <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">5</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; num <span style="color: #000040;">*</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">1024</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000040;">++</span>i<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span>num <span style="color: #000080;">&gt;=</span> <span style="color: #0000dd;">1024</span> <span style="color: #000040;">&amp;&amp;</span> i <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; num <span style="color: #000040;">/</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">1024</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000040;">--</span>i<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; num <span style="color: #000080;">=</span> <span style="color: #0000ff;">int</span><span style="color: #008000;">&#40;</span>num <span style="color: #000040;">*</span> <span style="color: #0000dd;">1000</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">/</span> <span style="color:#800080;">1000.0</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>num <span style="color: #000080;">&lt;</span> <span style="color:#800080;">0.001</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;0GB<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><span style="color: #0000ff;">else</span><span style="color: #008000;">&#123;</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%.3lf%cB<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, num, level<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span></div></td></tr></tbody></table></div>
<p></p></div></p>
<h3 class="toggle"><strong><a href="#">第三题：判断给定的数字是否满足给定的条件</a></strong></h3><div class="toggle-box" style="display: none;"><p><strong>题目描述</strong><br />
判断给定的数字是否满足给定的条件。<br />
说明：<br />
1、 条件是一个字符串，其格式由数学上的“开闭区间”，"&#038;&"和"||"组成。其格式为：[5,7]&#038;&(6,9]||(10,20)，该条件表示</p>
<p>“大于等于5，小于等于7”并且“大于6，小于9”或者“大于10，小于20”。<br />
2、 &#038;&优先级高于||</p>
<p><strong>输入</strong><br />
1、 字符串1：上述描述格式的条件：如[5,7]&#038;&(6,9]||(10,20)</p>
<p>2、 数字：判断是否满足条件的数字：9</p>
<p>说明：上诉两个参数是在一行中输入的，其格式为：字符串1+空格+数字。如[1,2]||(3,4) 3</p>
<p><strong>输出</strong><br />
如果满足条件，则输出1，否则0</p>
<p><strong>样例输入</strong><br />
[1,2]||(3,4] 3<br />
<strong>样例输出</strong><br />
0<br />
</p></div>
<p>只能粗略地把&#038;&合并，最后是TLE<br />
估计要用线段树<br />
<h3 class="toggle"><strong><a href="#">第三题自己的代码</a></strong></h3><div class="toggle-box" style="display: none;"><p></p>
<div class="codecolorer-container cpp geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br /></div></td><td><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339900;">#include &lt;stdio.h&gt;</span><br />
<span style="color: #339900;">#include &lt;vector&gt;</span><br />
<br />
<span style="color: #0000ff;">typedef</span> <span style="color: #0000ff;">struct</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">double</span> start<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">double</span> end<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">bool</span> e<span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span>Space<span style="color: #008080;">;</span><br />
std<span style="color: #008080;">::</span><span style="color: #007788;">vector</span><span style="color: #000080;">&lt;</span>Space<span style="color: #000080;">&gt;</span> v<span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">void</span> unionSpace<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">int</span> i<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> v.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>v<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">e</span> <span style="color: #000080;">==</span> <span style="color: #0000ff;">true</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>v<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">start</span> <span style="color: #000080;">&lt;</span> v<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">start</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">start</span> <span style="color: #000080;">=</span> v<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">start</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>v<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">end</span> <span style="color: #000080;">&gt;</span> v<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">end</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">end</span> <span style="color: #000080;">=</span> v<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">end</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">end</span> <span style="color: #000080;">=</span> v<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">start</span> <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> <span style="color: #666666;">// waste</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">bool</span> isIn<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span> n<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> v.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>n <span style="color: #000080;">&gt;=</span> v<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">start</span> <span style="color: #000040;">&amp;&amp;</span> n <span style="color: #000080;">&lt;=</span> v<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">end</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">int</span> i<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">double</span> num<span style="color: #008080;">;</span> <br />
&nbsp; &nbsp; Space tmpS<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; tmpS.<span style="color: #007788;">e</span> <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">char</span> tmp<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%c&quot;</span>, <span style="color: #000040;">&amp;</span>tmp<span style="color: #008000;">&#41;</span> <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #0000ff;">EOF</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>tmp <span style="color: #000080;">==</span> <span style="color: #FF0000;">'('</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%lf&quot;</span>, <span style="color: #000040;">&amp;</span>num<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmpS.<span style="color: #007788;">start</span> <span style="color: #000080;">=</span> num <span style="color: #000040;">+</span> <span style="color:#800080;">0.0001</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>tmp <span style="color: #000080;">==</span> <span style="color: #FF0000;">'['</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%lf&quot;</span>, <span style="color: #000040;">&amp;</span>num<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmpS.<span style="color: #007788;">start</span> <span style="color: #000080;">=</span> num<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>tmp <span style="color: #000080;">==</span> <span style="color: #FF0000;">','</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%lf&quot;</span>, <span style="color: #000040;">&amp;</span>num<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmpS.<span style="color: #007788;">end</span> <span style="color: #000080;">=</span> num<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>tmp <span style="color: #000080;">==</span> <span style="color: #FF0000;">')'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmpS.<span style="color: #007788;">end</span> <span style="color: #000040;">-</span><span style="color: #000080;">=</span> <span style="color:#800080;">0.0001</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v.<span style="color: #007788;">push_back</span><span style="color: #008000;">&#40;</span>tmpS<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>tmp <span style="color: #000080;">==</span> <span style="color: #FF0000;">']'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v.<span style="color: #007788;">push_back</span><span style="color: #008000;">&#40;</span>tmpS<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>tmp <span style="color: #000080;">==</span> <span style="color: #FF0000;">'&amp;'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmpS.<span style="color: #007788;">e</span> <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%c&quot;</span>, <span style="color: #000040;">&amp;</span>tmp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>tmp <span style="color: #000080;">==</span> <span style="color: #FF0000;">'|'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmpS.<span style="color: #007788;">e</span> <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%c&quot;</span>, <span style="color: #000040;">&amp;</span>tmp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><span style="color: #0000ff;">else</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">scanf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%lf&quot;</span>, <span style="color: #000040;">&amp;</span>num<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; unionSpace<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, isIn<span style="color: #008000;">&#40;</span>num<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v.<span style="color: #007788;">clear</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span></div></td></tr></tbody></table></div>
<p></p></div><br />
第二场的另起一篇发吧，感觉有点长</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thpiano.com/?feed=rss2&#038;p=829</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>2013腾讯实习生一面后续</title>
		<link>http://blog.thpiano.com/?p=823</link>
		<comments>http://blog.thpiano.com/?p=823#comments</comments>
		<pubDate>Sat, 27 Apr 2013 09:28:35 +0000</pubDate>
		<dc:creator>suika</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[2013]]></category>
		<category><![CDATA[HR面]]></category>
		<category><![CDATA[一面]]></category>
		<category><![CDATA[二面]]></category>
		<category><![CDATA[互联网]]></category>
		<category><![CDATA[实习生]]></category>
		<category><![CDATA[暑期实习生]]></category>
		<category><![CDATA[腾讯]]></category>
		<category><![CDATA[重庆]]></category>
		<category><![CDATA[面经]]></category>

		<guid isPermaLink="false">http://blog.thpiano.com/?p=823</guid>
		<description><![CDATA[一面过后又面了2面、HR面，随便写写 2面是技术总监来面，但是感觉非常和蔼，整个过程都在微笑。一面的时候，我问面试官二面会不会还是你们项目组的，对面说不一定，于是二面的时候上来自我介绍我还是说了“自己首选c/c++，但是做java也可以”的情况。没想到2面的还是搞java的 OTL…… 2面问的问题还是两部分，项目和技术细节 项目里，问了我怎么调试bug，遇到最困难的事情是什么，怎么解决的 技术细节方面，先后问了mysql调优（这个我不会！），forward和redirect的区别（还是不会！），gc机制（这个一面其实就问过了，我补习的，回答的还好），多线程（只是问了下有没有用过，我说没在java下用过，他就没问了OTL 其实我觉得我还是可以讲一讲的），滑动窗口（我大概写了过程，对面问我，是大三学的吧？看来忘得差不多了） 后来又问了一些网站安全方面的问题，先问了SQL注入是什么，怎么防，我答了下，顺口说觉得这个还比较好防，然后对面就开始问“你觉得什么比较难防” 我就把去年比较热的hash碰撞漏洞说了下，说到一半想起来这个一点都不难防，补丁早就有了= =！他也没说什么，还问了下XSS 不过真是一道算法相关的都没问……我还特地问了下，你觉得工作里会用到算法么？ 对面曰：主要是做业务逻辑，所以一般是用的不多，不过到了要用到的时候，要是你不会，那可不行 后面就是交流了一下那边的工作内容，实习期的工作，长度，预期要做的事情，做实习生时导师的情况之类的，总共大概面了差不多40分钟 其实2面之前还是觉得非常紧张的，到场了以后和同学交流，同学说问的问题都很bt，比如说让你最快速度写出尽可能多的linux命令，还有算法题之类的 算法题凭记忆好像有单链表查环，上台阶的方法总数，海量数据库里找一个数是否存在，还有就是楼层扔鸡蛋的问题。感觉这些算法题都很好对付啊！可惜没人问我 TAT…… 我觉得，我还是更适合做c/c++开发，不过linux确实是我的短板。 第二天HR面，我晚上一直没收到短信，还在想，是不是推到后天了？上午翻同学微博，才得知他们是今天HR面，然后赶快检查自己邮箱，原来自己也是下午HR面！ 好险，差一点就错过了。不过时间也不多了，没怎么准备就去了 面我的hr其实之前见过，一面的时候她负责签到，算是hr里年龄比较大的，应该是主管之类的职位。一面二面我都是主动自我介绍，HR面倒是她先让我自我介绍了。 内容就是聊天，比如说家庭情况，爱好，职业规划，为什么选腾讯，学习的方法，是什么支持你学习这么多，缺点，优点之类的。有几个问题感觉准备的不够好，有几个问题觉得回答的不够好，但也是聊了半个小时多。 聊天的过程中看到她有自己的卷子，就问了下笔试成绩，得知只有60多，还是挺惊险的。顺便问了下，面HR的一共有多少人，对面说有几十个，我心一凉。对面接着说，这次的名额非常非常有限，所以如果挂了的话你可以考虑等9月份校招的时候再来面，那个时候岗位多。我心凉透了……我问她，这次也算是走到HR面，要是最后被鄙视了，那数据库会不会有啥记录之类的，她说，你把这个经历给面试官说一下，他会做参考的（也就是说人才库之类的就只是个安慰了……） HR面完出来，进电梯正好碰到其他hr，她们看到我皱皱的衣服，凌乱的头发，唏嘘的胡渣，惊讶地对我说，面的这么惨啊。（……） 我顺便问了一下，下午大概要面多少人？她们说下午要面30个左右。加上上午面的，我估计重庆这边应该有5,60个来面HR的，最后留下的人也就十来个吧。以前还以为HR不刷人的，如今算了下，HR刷人比例一点都不比一面二面少…… 参加笔试的应该在1000人出头，算上后面霸面的，估计每轮都是5个里选1个的程度了 根据群里其他同学的分享，产品只有2个名额，运维4个，后台这边来了三个组，有一个组只招1个或2个。感觉希望如此渺茫，就不报期待了，暂且忘掉面试，还是回到日常生活里吧 ================================================= 5.6更新 同届有三四个同学拿到offer了吧，我被刷了。收获了挫折感，然后又是惯常地跑到个人记事本里去给自己打鸡血写计划去了啊哈哈，其实都没啥用。 其实开始的时候不报期望的，觉得能面上就不错了。而现在的感觉，却仿佛是当初壮志豪言一定要拿下最后却未能兑现。师兄和周围同学们总是说我没问题，人言可畏啊 至于被刷的原因，肯定是实力不足妥妥没跑了。除此之外再给自己找几个开脱借口： 1.面试时心不够沉静，对面面试官一笑，我这边就放松了。 2.准备的东西牛头不对马嘴。做了半年多oj，看了编程珠玑编程之美inside c++，却没想到面试官只看java和业务逻辑。对于自己最擅长的东西，不仅没有被问到，更连谈论的必要都没有。那个时候就应该果断提出去面其他面试官的。 3.重视程度不够。 顺便，阿里巴巴的暑期实习生简历都没过，网易微软根本不给我们这些小学校机会，百度的还遥遥无期，这个暑假估计是没得实习了。]]></description>
			<content:encoded><![CDATA[<p>一面过后又面了2面、HR面，随便写写<span id="more-823"></span></p>
<p>2面是技术总监来面，但是感觉非常和蔼，整个过程都在微笑。一面的时候，我问面试官二面会不会还是你们项目组的，对面说不一定，于是二面的时候上来自我介绍我还是说了“自己首选c/c++，但是做java也可以”的情况。没想到2面的还是搞java的 OTL……</p>
<p>2面问的问题还是两部分，项目和技术细节<br />
项目里，问了我怎么调试bug，遇到最困难的事情是什么，怎么解决的<br />
技术细节方面，先后问了mysql调优（这个我不会！），forward和redirect的区别（还是不会！），gc机制（这个一面其实就问过了，我补习的，回答的还好），多线程（只是问了下有没有用过，我说没在java下用过，他就没问了OTL 其实我觉得我还是可以讲一讲的），滑动窗口（我大概写了过程，对面问我，是大三学的吧？看来忘得差不多了）<br />
后来又问了一些网站安全方面的问题，先问了SQL注入是什么，怎么防，我答了下，顺口说觉得这个还比较好防，然后对面就开始问“你觉得什么比较难防”<br />
我就把去年比较热的hash碰撞漏洞说了下，说到一半想起来这个一点都不难防，补丁早就有了= =！他也没说什么，还问了下XSS<br />
不过真是一道算法相关的都没问……我还特地问了下，你觉得工作里会用到算法么？<br />
对面曰：主要是做业务逻辑，所以一般是用的不多，不过到了要用到的时候，要是你不会，那可不行<br />
后面就是交流了一下那边的工作内容，实习期的工作，长度，预期要做的事情，做实习生时导师的情况之类的，总共大概面了差不多40分钟</p>
<p>其实2面之前还是觉得非常紧张的，到场了以后和同学交流，同学说问的问题都很bt，比如说让你最快速度写出尽可能多的linux命令，还有算法题之类的<br />
算法题凭记忆好像有单链表查环，上台阶的方法总数，海量数据库里找一个数是否存在，还有就是楼层扔鸡蛋的问题。感觉这些算法题都很好对付啊！可惜没人问我 TAT……</p>
<p>我觉得，我还是更适合做c/c++开发，不过linux确实是我的短板。</p>
<p><br/><br />
第二天HR面，我晚上一直没收到短信，还在想，是不是推到后天了？上午翻同学微博，才得知他们是今天HR面，然后赶快检查自己邮箱，原来自己也是下午HR面！<br />
好险，差一点就错过了。不过时间也不多了，没怎么准备就去了</p>
<p>面我的hr其实之前见过，一面的时候她负责签到，算是hr里年龄比较大的，应该是主管之类的职位。一面二面我都是主动自我介绍，HR面倒是她先让我自我介绍了。<br />
内容就是聊天，比如说家庭情况，爱好，职业规划，为什么选腾讯，学习的方法，是什么支持你学习这么多，缺点，优点之类的。有几个问题感觉准备的不够好，有几个问题觉得回答的不够好，但也是聊了半个小时多。<br />
聊天的过程中看到她有自己的卷子，就问了下笔试成绩，得知只有60多，还是挺惊险的。顺便问了下，面HR的一共有多少人，对面说有几十个，我心一凉。对面接着说，这次的名额非常非常有限，所以如果挂了的话你可以考虑等9月份校招的时候再来面，那个时候岗位多。我心凉透了……我问她，这次也算是走到HR面，要是最后被鄙视了，那数据库会不会有啥记录之类的，她说，你把这个经历给面试官说一下，他会做参考的（也就是说人才库之类的就只是个安慰了……）</p>
<p>HR面完出来，进电梯正好碰到其他hr，她们看到我皱皱的衣服，凌乱的头发，唏嘘的胡渣，惊讶地对我说，面的这么惨啊。（……）<br />
我顺便问了一下，下午大概要面多少人？她们说下午要面30个左右。加上上午面的，我估计重庆这边应该有5,60个来面HR的，最后留下的人也就十来个吧。以前还以为HR不刷人的，如今算了下，HR刷人比例一点都不比一面二面少……<br />
参加笔试的应该在1000人出头，算上后面霸面的，估计每轮都是5个里选1个的程度了</p>
<p>根据群里其他同学的分享，产品只有2个名额，运维4个，后台这边来了三个组，有一个组只招1个或2个。感觉希望如此渺茫，就不报期待了，暂且忘掉面试，还是回到日常生活里吧</p>
<p>=================================================<br />
5.6更新</p>
<p>同届有三四个同学拿到offer了吧，我被刷了。收获了挫折感，然后又是惯常地跑到个人记事本里去给自己打鸡血写计划去了啊哈哈，其实都没啥用。<br />
其实开始的时候不报期望的，觉得能面上就不错了。而现在的感觉，却仿佛是当初壮志豪言一定要拿下最后却未能兑现。师兄和周围同学们总是说我没问题，人言可畏啊<br />
至于被刷的原因，肯定是实力不足妥妥没跑了。除此之外再给自己找几个开脱借口：<br />
1.面试时心不够沉静，对面面试官一笑，我这边就放松了。<br />
2.准备的东西牛头不对马嘴。做了半年多oj，看了编程珠玑编程之美inside c++，却没想到面试官只看java和业务逻辑。对于自己最擅长的东西，不仅没有被问到，更连谈论的必要都没有。那个时候就应该果断提出去面其他面试官的。<br />
3.重视程度不够。</p>
<p>顺便，阿里巴巴的暑期实习生简历都没过，网易微软根本不给我们这些小学校机会，百度的还遥遥无期，这个暑假估计是没得实习了。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thpiano.com/?feed=rss2&#038;p=823</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>2013腾讯实习生一面流水账</title>
		<link>http://blog.thpiano.com/?p=817</link>
		<comments>http://blog.thpiano.com/?p=817#comments</comments>
		<pubDate>Wed, 24 Apr 2013 01:46:53 +0000</pubDate>
		<dc:creator>suika</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[2013]]></category>
		<category><![CDATA[2013腾讯实习生面试]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[一面]]></category>
		<category><![CDATA[实习]]></category>
		<category><![CDATA[腾讯]]></category>
		<category><![CDATA[腾讯实习生]]></category>
		<category><![CDATA[腾讯面试]]></category>
		<category><![CDATA[重庆面试]]></category>
		<category><![CDATA[面试]]></category>

		<guid isPermaLink="false">http://blog.thpiano.com/?p=817</guid>
		<description><![CDATA[笔试过后第三天出结果，同一个教室的下午3点就接到面试通知了，我这边一直寂静…… 后来接到了腾讯的电话，说我资料填的不详细，让我补充 要补的就是诸如面试岗位、城市、擅长的语言等。我觉得很奇怪，我明明都填了，并且从电话那边的口气来听，他也看得到我之前填的资料 或许只是来确认下，或是要我再考虑吧。我想想确实也有点问题，本科做的项目都用java，但是擅长的选的c/c++；岗位填的后台，简历里却又说平时爱好做游戏 到了晚上6点，都准备明天去霸面了，终于还是收到通知了。 通知是下午2点，实际上1点半就被叫进去了。 在宾馆的标准间里面的，面试官看着非常年轻，感觉和我差不多年纪吧，一点都不摆架子，很和善。 进门递了简历以后，还没等面试官就位我开始自我介绍，为的是抢占先机。 先是提到自己本科的毕设，引起了对面的兴趣，然后balabala 说完毕设，说本科的几个java网站项目，面试官终于来精神了，首先是问了使用的架构，分工，负载情况 然后问我，看你最擅长的是c/c++，那你java怎么样？ 呃，两年没用java了，只能如实托出 然后面试官就java问了几个基础问题，比如说： GC的工作原则和垃圾回收机制是什么？我只答了最基础的引用计数OTL…… 回来的路上想到，GC的任务是保证内存可用，回收内存只是一方面，另一方面还有内存碎片等问题，所以多机制是必然的 java里会不会内存泄露？我一开始回答说不会，因为java走的全都是引用，逃不掉引用计数。后来又补了下，GC认为一个变量要呆的时间比程序员认为的要长，那就算内存泄露，这种情况是可能出现的 JVM内部调用类库的方式是什么？我也完全空白，只好说不会。但是我说我可以做个推测，于是就把c/c++里面静态链接、动态链接大概说了一下 还问我有没有做过多线程？我就中兴比赛的那个程序说了一下，不过很快意识到应该是问java下的，就凭印象回答了runnable接口和thread类 回答之后，我询问了一下，面试官是不是主要就是做java的，对面回答说是wapqq门户网站模块的后台 感觉java的问题都答得很糟糕，但是面试官还是很和善的样子，说我们轻松一下，来聊聊怎么做个俄罗斯方块小游戏吧 然后我就把我常用的游戏结构给写上去了，主循环，渲染模块，逻辑模块，帧控制，在纸上做了大体表示 不过感觉回答的太快了，所以思路显得很乱。因为前面的结构早就有数了，我一上来就开始说怎么设计里面对象的类和属性了，不太好 并且忽略了对面擅长java的事情，应该把模块关系、类的构造和继承关系都清晰地写出来才对。 对面还特地问了一下，为什么要帧控制 问完游戏，他开始继续低头看我简历，我就抓紧机会，问了一下他们公司这边的情况。这次来重庆面试后台的有三个组，除去他们这个java组之外，另外两个组是c/c++为主，但都是类似服务器半开发半维护的样子。他们java组都是用的自己的框架，很少用开源的东西。面试官还问我，对他们做的后台方向有没有兴趣，我说，我以前也做过类似的工作，我觉得能来做这个的话是非常宝贵的机会，我想去 （其实心里也在想，本科以后就放弃做java网站后台了，还真没想过要重新做这个……不过我也没得挑，能过一面就算成功了） 至此面试就结束了，大概30分钟的样子，其他同学貌似都有被问40分钟。临走的时候对面说觉得还行，大概2,3天后会有结果。不过我回来想想，java的几个问题真是回答的乱七八糟，进二面估计很玄了。只能算是自己运气好，没有碰上爱给压力的面试官]]></description>
			<content:encoded><![CDATA[<p>笔试过后第三天出结果，同一个教室的下午3点就接到面试通知了，我这边一直寂静……<br />
后来接到了腾讯的电话，说我资料填的不详细，让我补充<br />
要补的就是诸如面试岗位、城市、擅长的语言等。我觉得很奇怪，我明明都填了，并且从电话那边的口气来听，他也看得到我之前填的资料<br />
或许只是来确认下，或是要我再考虑吧。我想想确实也有点问题，本科做的项目都用java，但是擅长的选的c/c++；岗位填的后台，简历里却又说平时爱好做游戏</p>
<p>到了晚上6点，都准备明天去霸面了，终于还是收到通知了。<span id="more-817"></span></p>
<p>通知是下午2点，实际上1点半就被叫进去了。<br />
在宾馆的标准间里面的，面试官看着非常年轻，感觉和我差不多年纪吧，一点都不摆架子，很和善。<br />
进门递了简历以后，还没等面试官就位我开始自我介绍，为的是抢占先机。<br />
先是提到自己本科的毕设，引起了对面的兴趣，然后balabala<br />
说完毕设，说本科的几个java网站项目，面试官终于来精神了，首先是问了使用的架构，分工，负载情况<br />
然后问我，看你最擅长的是c/c++，那你java怎么样？<br />
呃，两年没用java了，只能如实托出<br />
然后面试官就java问了几个基础问题，比如说：<br />
GC的工作原则和垃圾回收机制是什么？我只答了最基础的引用计数OTL…… 回来的路上想到，GC的任务是保证内存可用，回收内存只是一方面，另一方面还有内存碎片等问题，所以多机制是必然的<br />
java里会不会内存泄露？我一开始回答说不会，因为java走的全都是引用，逃不掉引用计数。后来又补了下，GC认为一个变量要呆的时间比程序员认为的要长，那就算内存泄露，这种情况是可能出现的<br />
JVM内部调用类库的方式是什么？我也完全空白，只好说不会。但是我说我可以做个推测，于是就把c/c++里面静态链接、动态链接大概说了一下<br />
还问我有没有做过多线程？我就中兴比赛的那个程序说了一下，不过很快意识到应该是问java下的，就凭印象回答了runnable接口和thread类</p>
<p>回答之后，我询问了一下，面试官是不是主要就是做java的，对面回答说是wapqq门户网站模块的后台<br />
感觉java的问题都答得很糟糕，但是面试官还是很和善的样子，说我们轻松一下，来聊聊怎么做个俄罗斯方块小游戏吧<br />
然后我就把我常用的游戏结构给写上去了，主循环，渲染模块，逻辑模块，帧控制，在纸上做了大体表示<br />
不过感觉回答的太快了，所以思路显得很乱。因为前面的结构早就有数了，我一上来就开始说怎么设计里面对象的类和属性了，不太好<br />
并且忽略了对面擅长java的事情，应该把模块关系、类的构造和继承关系都清晰地写出来才对。</p>
<p>对面还特地问了一下，为什么要帧控制</p>
<p>问完游戏，他开始继续低头看我简历，我就抓紧机会，问了一下他们公司这边的情况。这次来重庆面试后台的有三个组，除去他们这个java组之外，另外两个组是c/c++为主，但都是类似服务器半开发半维护的样子。他们java组都是用的自己的框架，很少用开源的东西。面试官还问我，对他们做的后台方向有没有兴趣，我说，我以前也做过类似的工作，我觉得能来做这个的话是非常宝贵的机会，我想去<br />
（其实心里也在想，本科以后就放弃做java网站后台了，还真没想过要重新做这个……不过我也没得挑，能过一面就算成功了）</p>
<p>至此面试就结束了，大概30分钟的样子，其他同学貌似都有被问40分钟。临走的时候对面说觉得还行，大概2,3天后会有结果。不过我回来想想，java的几个问题真是回答的乱七八糟，进二面估计很玄了。只能算是自己运气好，没有碰上爱给压力的面试官</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thpiano.com/?feed=rss2&#038;p=817</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2013重庆腾讯实习生笔试的两道题</title>
		<link>http://blog.thpiano.com/?p=787</link>
		<comments>http://blog.thpiano.com/?p=787#comments</comments>
		<pubDate>Sat, 20 Apr 2013 04:37:25 +0000</pubDate>
		<dc:creator>suika</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[2013]]></category>
		<category><![CDATA[实习]]></category>
		<category><![CDATA[笔试]]></category>
		<category><![CDATA[算法]]></category>
		<category><![CDATA[腾讯]]></category>
		<category><![CDATA[腾讯实习生]]></category>
		<category><![CDATA[重庆]]></category>

		<guid isPermaLink="false">http://blog.thpiano.com/?p=787</guid>
		<description><![CDATA[（今天连bluehost好慢 刚刚被虐回来，稍微总结一下 题的范围很广，从TCPIP协议、数据库、算法与数据结构、计算机系统到语言细节，都有涉及 另外今年的笔试题里有10道选择题、5道填空和加分题的第一题都与去年的题目一模一样 OTL…… 没看去年的题亏死了 挑两道印象比较深的题记录下： （都是去年的题，网上都有公开，应该不算是私自公布试卷了吧） 两人猜数字，范围为[1,100]， 甲写一个数字，让乙猜。 如果乙猜的偏小，甲会说偏小，但是如果某一次甲猜的偏大，乙之后都只会说对或不对。 问： 乙最少可以在多少次内保证猜对？在这种策略下，第一个猜的数字是什么？ 看到这道题，首先可以推导出这两问的答案一定是同一数字。若第一次猜X且偏大，则之后需猜X-1次方能保证猜中，即最少需猜X次。 于是递推一下，设最少猜X次才能保证猜对，则第一次必定猜X 第二次要猜多少呢？第二次猜的时候，要保证在猜偏大的情况下，后面再猜X-2次就能保证猜中，所以第二次要猜X+X-1 同理，第三次若猜偏大，后面要再猜X-3次，所以第三次猜的数为X+X-1+X-2……直至猜了N次之后，猜的数>=100 这就是一个初项为X，公差为-1，项数为N的等差数列求和，即约束方程下求X的最小值 ，时有极值，X约为14 答案就是14 14 两个数组a[N]，b[N]，其中A[N]的各个元素值已知 现给b[i]赋值，b[i] = a[0]*a[1]*a[2]...*a[N-1]/a[i]； 要求： 1.不准用除法运算 2.除了循环计数值，a[N],b[N]外，不准再用其他任何变量（包括局部变量，全局变量等） 3.满足时间复杂度O（n），空间复杂度O（1） 在编程之美上出现过类似的 这个题不准用其他变量，那只能在a和b上下手了 我的思路是，对于b[i]来说，可以拆成a[0]*a[1]*...*a[i-1]和a[i+1]*a[i+2]*...*a[N-1]两部分，这两部分用O(n)分别求出来，最后再乘起来就行了 代码见下： 12345678910111213141516171819202122232425262728#include &#60;stdio.h&#62; void foo&#40;int a&#91;&#93;, int b&#91;&#93;, int N&#41;&#123; &#160; &#160; b&#91;0&#93; = 1; &#160; &#160; //乘完左边，存在b[i]里。 此时b[i]表示从a[0] * ... *a[i-1]的积 &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>（今天连bluehost好慢<br />
刚刚被虐回来，稍微总结一下<br />
题的范围很广，从TCPIP协议、数据库、算法与数据结构、计算机系统到语言细节，都有涉及</p>
<p>另外今年的笔试题里有10道选择题、5道填空和加分题的第一题都与去年的题目一模一样 OTL……<br />
没看去年的题亏死了</p>
<p>挑两道印象比较深的题记录下：<span id="more-787"></span><br />
（都是去年的题，网上都有公开，应该不算是私自公布试卷了吧）</p>
<pre>两人猜数字，范围为[1,100]， 甲写一个数字，让乙猜。
如果乙猜的偏小，甲会说偏小，但是如果某一次甲猜的偏大，乙之后都只会说对或不对。
问： 乙最少可以在多少次内保证猜对？在这种策略下，第一个猜的数字是什么？</pre>
<p>看到这道题，首先可以推导出这两问的答案一定是同一数字。若第一次猜X且偏大，则之后需猜X-1次方能保证猜中，即最少需猜X次。<br />
于是递推一下，设最少猜X次才能保证猜对，则第一次必定猜X<br />
第二次要猜多少呢？第二次猜的时候，要保证在猜偏大的情况下，后面再猜X-2次就能保证猜中，所以第二次要猜X+X-1<br />
同理，第三次若猜偏大，后面要再猜X-3次，所以第三次猜的数为X+X-1+X-2……直至猜了N次之后，猜的数>=100<br />
这就是一个初项为X，公差为-1，项数为N的等差数列求和，即约束方程<span class='MathJax_Preview'><img src='http://blog.thpiano.com/wp-content/plugins/latex/cache/tex_dad7241a13d5f241260d69fdf52505ce.gif' style='vertical-align: middle; border: none; ' class='tex' alt="X*N-\frac{N*(N-1)}{2}=100 " /></span><script type='math/tex'>X*N-\frac{N*(N-1)}{2}=100 </script>下求X的最小值<br />
<span class='MathJax_Preview'><img src='http://blog.thpiano.com/wp-content/plugins/latex/cache/tex_b9238db689b9d651daf3a1bdeff77822.gif' style='vertical-align: middle; border: none; ' class='tex' alt="X=\frac{100}{N} + \frac{N}{2} - \frac12 " /></span><script type='math/tex'>X=\frac{100}{N} + \frac{N}{2} - \frac12 </script>，<span class='MathJax_Preview'><img src='http://blog.thpiano.com/wp-content/plugins/latex/cache/tex_133a9ec7a667652e009eb5f16f49d45d.gif' style='vertical-align: middle; border: none; ' class='tex' alt="N=\sqrt{200} " /></span><script type='math/tex'>N=\sqrt{200} </script>时有极值，X约为14<br />
答案就是14 14</p>
<hr/>
<br/></p>
<pre>两个数组a[N]，b[N]，其中A[N]的各个元素值已知
现给b[i]赋值，b[i] = a[0]*a[1]*a[2]...*a[N-1]/a[i]；
要求：
1.不准用除法运算
2.除了循环计数值，a[N],b[N]外，不准再用其他任何变量（包括局部变量，全局变量等）
3.满足时间复杂度O（n），空间复杂度O（1）</pre>
<p>在编程之美上出现过类似的<br />
这个题不准用其他变量，那只能在a和b上下手了<br />
我的思路是，对于b[i]来说，可以拆成a[0]*a[1]*...*a[i-1]和a[i+1]*a[i+2]*...*a[N-1]两部分，这两部分用O(n)分别求出来，最后再乘起来就行了<br />
代码见下：</p>
<div class="codecolorer-container cpp geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br /></div></td><td><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339900;">#include &lt;stdio.h&gt;</span><br />
<br />
<span style="color: #0000ff;">void</span> foo<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span>, <span style="color: #0000ff;">int</span> b<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span>, <span style="color: #0000ff;">int</span> N<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; b<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #666666;">//乘完左边，存在b[i]里。 此时b[i]表示从a[0] * ... *a[i-1]的积</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> N<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; b<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> b<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">*</span> a<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666;">//乘完右边，存在a[i]里。a[i]表示从a[i] *...*a[N-1]的积</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> N<span style="color: #000040;">-</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> <span style="color: #000040;">--</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; a<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">*</span><span style="color: #000080;">=</span> a<span style="color: #008000;">&#91;</span>i <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666;">//两边乘起来</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> N <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; b<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">*</span><span style="color: #000080;">=</span> a<span style="color: #008000;">&#91;</span>i <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">int</span> a<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">10</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#123;</span><span style="color: #0000dd;">1</span>,<span style="color: #0000dd;">2</span>,<span style="color: #0000dd;">3</span>,<span style="color: #0000dd;">4</span>,<span style="color: #0000dd;">5</span>,<span style="color: #0000dd;">6</span>,<span style="color: #0000dd;">7</span>,<span style="color: #0000dd;">8</span>,<span style="color: #0000dd;">9</span>,<span style="color: #0000dd;">10</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">int</span> b<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">10</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; foo<span style="color: #008000;">&#40;</span>a,b,<span style="color: #0000dd;">10</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">10</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, b<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span></div></td></tr></tbody></table></div>
<p>我这种写法的缺点是改变了输入数组a，这个不太好。把好写法贴一份：</p>
<div class="codecolorer-container cpp geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br /></div></td><td><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;<span style="color: #0000ff;">void</span> problem<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #000040;">*</span> a, <span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span><span style="color: #000040;">*</span> b, <span style="color: #0000ff;">int</span> N<span style="color: #008000;">&#41;</span><br />
&nbsp;<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;b<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> N<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> b<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">*</span> a<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// 分水岭的前半段乘积</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #008000;">&#125;</span><br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp;b<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> a<span style="color: #008000;">&#91;</span>N <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> N <span style="color: #000040;">-</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&gt;=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> <span style="color: #000040;">--</span>i<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">*</span><span style="color: #000080;">=</span> b<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">*</span><span style="color: #000080;">=</span> a<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// 分水岭的后半段乘积，是从数组尾部向前循环的</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #008000;">&#125;</span><br />
&nbsp;<span style="color: #008000;">&#125;</span></div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.thpiano.com/?feed=rss2&#038;p=787</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>第4届华为编程大赛决赛试题</title>
		<link>http://blog.thpiano.com/?p=579</link>
		<comments>http://blog.thpiano.com/?p=579#comments</comments>
		<pubDate>Sun, 27 May 2012 09:16:03 +0000</pubDate>
		<dc:creator>suika</dc:creator>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[2012年华为杯校园编程大赛决赛]]></category>
		<category><![CDATA[2012年华为编程大赛]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[华为编程大赛]]></category>
		<category><![CDATA[打酱油]]></category>
		<category><![CDATA[题目]]></category>

		<guid isPermaLink="false">http://blog.thpiano.com/?p=579</guid>
		<description><![CDATA[这回是自己偷偷把试题带回来了。这次比赛一共就一道题，上午9点做到晚上5点，不能上网，中午管饭 之前听说往届都有界面需求，这机房只有vc6，所以前几天还补了下mfc，果然太难用了…… 今天一看题目，不需要界面，还好还好 不过也是做得异常地郁闷，真是费劲千辛万苦最后才搞出一个不怎么靠谱的答案，对比赛成绩不能有任何的指望了，就当是蹭饭机房一日游 题目是这样的： ======================================================================= 编程题（共1题，100分。请上机编写程序，按题目要求提交文件。测试用例不对考生公开，凡不满足提交要求导致不能运行或用例不通过，不予评分。） &#160; 1. 俄罗斯方块之棋盘覆盖 俄罗斯方块是一款风靡全球的益智类游戏。由俄罗斯人阿列克谢·帕基特诺夫发明，故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块，使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜，从而家喻户晓，风靡世界。 &#160; 本试题是在俄罗斯方块几种常见的方块基础上，在指定大小和障碍的棋盘上，用标准的方块形状，完成对棋盘的覆盖。用于覆盖棋盘的方块可以是下文所给出方块的全集，也可以是其中的任意一个子集，且使用的方块数量不限，形状变化不限。 &#160; 棋盘大小： 棋盘大小为21行21列的正方形。按照从上到下，从左到右，从1开始，依次进行编号，直到最右下方的格子标识为441。 可选方块： 可选方块为标准的俄罗斯方块形状，包括其标准的旋转变化。基本形状如图所示： 各形状的变化如图所示（字母为方块编号）：  障碍说明： 棋盘上仅有一处障碍无法放置方块，障碍可处于棋盘任意位置。障碍为基本形状a及其所有的旋转变化，如图所示： 输入输出要求： 输入文件名为testin.txt，格式如下所示，各数字用空格隔开，各数字表示棋盘格子编号。 2 3 22 23 该输入表示障碍位于棋盘的左上角。 输出文件名为testout.txt，要求先输出棋盘覆盖结果，再输出未覆盖的格子个数。输出棋盘用21行21列数字/字母表示，其中0表示未覆盖的格子，1表示障碍，字母表示对应方块编号（字母对应关系见“可选方块”一节）。最后输出未覆盖格子个数。这里以6行10列棋盘举例示意输出格式（注意：实际输出应该是21行21列，对应方块形状用对应的字母表示）： &#160; 要求： 1、  用所提供的方块尽可能覆盖棋盘并输出结果； 2、  在（1）的基础上，棋盘上的空格越少越好。 交付件要求： C/C++：需要提交可执行文件和压缩打包的源代码工程 JAVA：需要提交压缩打包的整个编码工程目录 &#160; ============================================================== 点此直接跳到最后的构造法及代码 一看题目，第一感觉是搜索空间有点大，第二感觉是说不定旋转对称性可以利用，不管了先给他搜上再说 慢吞吞地写完后，一运行，╮(╯_╰)╭ ………………加了记忆也没用 然后开始使用无脑流乱改，眼瞅着那个长条挺好用，给我把大片的空白全填了去！ 填到只剩6行（考虑到unsigned long 是128位，6 * 21 =126正好小于128就留了6行），还是特别龟速 然后稍微注意了一下，用我的土算法，实际搜索范围在7x7的时候就很慢了，再往上肯定无理 所以要么换搜索算法，要么就把搜索范围进一步缩小。 之前产生用长条填的想法，是基于以前看的俄罗斯方块视频。那位神玩家基本可以在任何情况下都使用长条一次性消去三四行，所以我觉得这道题可以整行整行地填充以缩小搜索范围，而不至于太过影响最终结果。看来光是按行填还不够 算法方面暂时想不出什么办法了，我需要一个好的启发式搜索剪枝算法！但是想不出……先吃饭嗯。这黄瓜好辣 吃完饭，想想觉得有个不怎么靠谱的结果总比一万年也跑不出个结果要强，于是把原来的算法改成不可靠算法，遍历的次序随机化，也只按照一定概率进行回溯。这下结果总算是有了，还可以跑个几百次取最佳值，最佳结果一般在9到20之间浮动。我在想，一共21行，这样的话就是每行不超过一个空，这电脑已经能玩的比我还好了。但是毕竟是比赛口牙，时间也还有，就再努努力试试 [...]]]></description>
			<content:encoded><![CDATA[<p>这回是自己偷偷把试题带回来了。这次比赛一共就一道题，上午9点做到晚上5点，不能上网，中午管饭<br />
之前听说往届都有界面需求，这机房只有vc6，所以前几天还补了下mfc，果然太难用了……<br />
今天一看题目，不需要界面，还好还好<br />
不过也是做得异常地郁闷，真是费劲千辛万苦最后才搞出一个不怎么靠谱的答案，对比赛成绩不能有任何的指望了，就当是蹭饭机房一日游</p>
<p>题目是这样的：<span id="more-579"></span></p>
<p>=======================================================================</p>
<h2><strong>编程题（共</strong><strong>1</strong><strong>题，100分。请上机编写程序，按题目要求提交文件。测试用例不对考生公开，凡不满足提交要求导致不能运行或用例不通过，不予评分。）</strong></h2>
<p>&nbsp;</p>
<h3><strong>1.</strong> <strong>俄罗斯方块之棋盘覆盖</strong></h3>
<p>俄罗斯方块是一款风靡全球的益智类游戏。由俄罗斯人阿列克谢·帕基特诺夫发明，故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块，使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜，从而家喻户晓，风靡世界。</p>
<p>&nbsp;</p>
<p>本试题是在俄罗斯方块几种常见的方块基础上，在指定大小和障碍的棋盘上，用标准的方块形状，完成对棋盘的覆盖。用于覆盖棋盘的方块可以是下文所给出方块的全集，也可以是其中的任意一个子集，且使用的方块数量不限，形状变化不限。</p>
<p>&nbsp;</p>
<p align="left"><strong>棋盘大小：</strong></p>
<p>棋盘大小为21行21列的正方形。按照从上到下，从左到右，从1开始，依次进行编号，直到最右下方的格子标识为441。</p>
<p align="left">可选方块：</p>
<p>可选方块为标准的俄罗斯方块形状，包括其标准的旋转变化。基本形状如图所示：</p>
<p><img class="alignnone size-full wp-image-580" title="clip_image002" src="http://blog.thpiano.com/wp-content/uploads/2012/05/clip_image002.jpg" alt="" width="287" height="119" /></p>
<p>各形状的变化如图所示（字母为方块编号）：</p>
<p><img title="tetris" src="http://blog.thpiano.com/wp-content/uploads/2012/05/未命名.jpg" alt="" width="365" height="333" /></p>
<p align="left"><strong> 障碍说明：</strong></p>
<p>棋盘上仅有一处障碍无法放置方块，障碍可处于棋盘任意位置。障碍为基本形状a及其所有的旋转变化，如图所示：</p>
<p><a href="http://blog.thpiano.com/wp-content/uploads/2012/05/未命名1.jpg"><img class="alignnone size-full wp-image-581" title="未命名1" src="http://blog.thpiano.com/wp-content/uploads/2012/05/未命名1.jpg" alt="" width="91" height="41" /></a></p>
<p align="left"><strong>输入输出要求：</strong></p>
<p>输入文件名为testin.txt，格式如下所示，各数字用空格隔开，各数字表示棋盘格子编号。</p>
<p>2 3 22 23</p>
<p>该输入表示障碍<a href="http://blog.thpiano.com/wp-content/uploads/2012/05/未命名2.jpg"><img class="alignnone size-full wp-image-582" title="未命名2" src="http://blog.thpiano.com/wp-content/uploads/2012/05/未命名2.jpg" alt="" width="35" height="32" /></a>位于棋盘的左上角。</p>
<p>输出文件名为testout.txt，要求先输出棋盘覆盖结果，再输出未覆盖的格子个数。输出棋盘用21行21列数字/字母表示，其中0表示未覆盖的格子，1表示障碍，字母表示对应方块编号（字母对应关系见“可选方块”一节）。最后输出未覆盖格子个数。这里以6行10列棋盘举例示意输出格式（注意：实际输出应该是21行21列，对应方块形状用对应的字母表示）：</p>
<p><a href="http://blog.thpiano.com/wp-content/uploads/2012/05/未命名sd.jpg"><img class="alignnone size-full wp-image-586" title="未命名sd" src="http://blog.thpiano.com/wp-content/uploads/2012/05/未命名sd.jpg" alt="" width="177" height="116" /></a></p>
<p>&nbsp;</p>
<p align="left"><strong>要求：</strong></p>
<p align="left">1、  用所提供的方块尽可能覆盖棋盘并输出结果；</p>
<p align="left">2、  在（1）的基础上，棋盘上的空格越少越好。</p>
<p align="left"><strong>交付件要求：</strong></p>
<p align="left">C/C++：需要提交可执行文件和压缩打包的源代码工程</p>
<p>JAVA：需要提交压缩打包的整个编码工程目录</p>
<p>&nbsp;</p>
<p>==============================================================<br />
<a href="#answer" title="点此直接跳到最后的构造法及代码">点此直接跳到最后的构造法及代码</a></p>
<p>一看题目，第一感觉是搜索空间有点大，第二感觉是说不定旋转对称性可以利用，不管了先给他搜上再说</p>
<p>慢吞吞地写完后，一运行，╮(╯_╰)╭ ………………加了记忆也没用</p>
<p>然后开始使用无脑流乱改，眼瞅着那个长条挺好用，给我把大片的空白全填了去！</p>
<p>填到只剩6行（考虑到unsigned long 是128位，6 * 21 =126正好小于128就留了6行），还是特别龟速</p>
<p>然后稍微注意了一下，用我的土算法，实际搜索范围在7x7的时候就很慢了，再往上肯定无理</p>
<p>所以要么换搜索算法，要么就把搜索范围进一步缩小。</p>
<p>之前产生用长条填的想法，是基于以前看的俄罗斯方块视频。那位神玩家基本可以在任何情况下都使用长条一次性消去三四行，所以我觉得这道题可以整行整行地填充以缩小搜索范围，而不至于太过影响最终结果。看来光是按行填还不够</p>
<p>算法方面暂时想不出什么办法了，我需要一个好的启发式搜索剪枝算法！但是想不出……先吃饭嗯。这黄瓜好辣</p>
<p>吃完饭，想想觉得有个不怎么靠谱的结果总比一万年也跑不出个结果要强，于是把原来的算法改成不可靠算法，遍历的次序随机化，也只按照一定概率进行回溯。这下结果总算是有了，还可以跑个几百次取最佳值，最佳结果一般在9到20之间浮动。我在想，一共21行，这样的话就是每行不超过一个空，这电脑已经能玩的比我还好了。但是毕竟是比赛口牙，时间也还有，就再努努力试试</p>
<p>于是视线重回搜索范围，在长条填充的想法上进一步深入，填到只剩一个很小的方形如何？毕竟之前测试发现小范围搜索下遗留的空位也都很少</p>
<p>先看地图大小，21x21，长条填充的话是4+4+4+4+4+1（竖着），所以要想填充完整，这个方形的尺寸只能是4的倍数或4的倍数+1</p>
<p>考虑到之前的7x7最大值，我选择5x5的方形尺寸。21-5=16，这样只要保证这个方形两边的余下的长度都能被4整除，就可以用长条完美覆盖了</p>
<p>而障碍物的尺寸是2x3，长度为2的那条边肯定能被起始位置为4的倍数、尺寸为5的方形装入。而长度为3的那条边讨论起来就有点麻烦了</p>
<p>稍微画了下图，发现用障碍物的左上角位置对4取模，余数为0、1、2都没问题，3的话就只有增加方形尺寸。于是在这种情况下，把方形尺寸加到8，依旧可以较为完整地用长条铺满，只不过需要补一个长条，损失一个无法填补的位置。5x8也小于7x7，性能也可以接受。</p>
<p>之后做了下实验，5x5的小方形里会留1个空，5x8的小方形里不会留空，但是5x8时外面填充会有一个空，这样两处加起来也正好是1个空，比之前的随机算法效果好多了</p>
<p>不过依旧是不完美算法OTL ，不知道该怎么证明子空间的最优性。再说满眼都是 f 这算什么嘛！也完全不能保证找到最优解。最优解我是无论如何也想不出的，只能再多查找资料、多积累了。</p>
<p>&nbsp;</p>
<p>后记：</p>
<p>和罗同学讨论、阅读了宝贵的博客留言后，思路也稍微明晰一点了。首先21x21，最优解为遗留1个空，这个我就完全没有察觉到……太沉浸在性能测试上了，性能测试时使用的棋盘大小又不是21x21的</p>
<p>晚上回来重新debug，发现自己的算法还是勉强可以完成只遗留1个空的（通过枚举小方形，但依旧不知道怎么证明），但是比赛时提交的代码里有错误，横向的情况被我写反了（左右颠倒了OTL 都没有认真核对障碍的形状就交上去了），这样一来一半的测试用例肯定都通不过了</p>
<p>我的实力也就仅此而已了，愿这次的失败能让我沉淀得更深<br />
<a name="answer"></a><br />
============================================================================</p>
<p>这两天也和网友进行了讨论，还是构造法最高啊……</p>
<p>构造法说起来也很简单，首先利用对称性和可旋转性，将输入缩减为一种（这里都缩减为<a href="http://blog.thpiano.com/wp-content/uploads/2012/05/未命名2.jpg"><img class="alignnone size-full wp-image-582" title="未命名2" src="http://blog.thpiano.com/wp-content/uploads/2012/05/未命名2.jpg" alt="" width="35" height="32" /></a>），之后对输入的位置进行考虑：<br />
若位于左上角，则可以通过如下的方式填充：</p>
<p><a href="http://blog.thpiano.com/wp-content/uploads/2012/05/3.jpg"><img class="alignnone size-full wp-image-595" title="3" src="http://blog.thpiano.com/wp-content/uploads/2012/05/3.jpg" alt="" width="195" height="54" /></a></p>
<p>剩余的空格就是左上的第一个格子，剩下的21x16区域用长条可以完美填充<br />
（右下角也是完全一样）<br />
若不位于左上角或右下角，则可通过加入两个L，变成<a href="http://blog.thpiano.com/wp-content/uploads/2012/05/2.jpg"><img class="alignnone size-full wp-image-597" title="2" src="http://blog.thpiano.com/wp-content/uploads/2012/05/2.jpg" alt="" width="42" height="36" /></a>或<a href="http://blog.thpiano.com/wp-content/uploads/2012/05/1.jpg"><img class="alignnone size-full wp-image-596" title="1" src="http://blog.thpiano.com/wp-content/uploads/2012/05/1.jpg" alt="" width="42" height="36" /></a>的4x3的障碍。将障碍体积变为4x3后，剩下的区域再用长条填充，可以保证填充至只剩1个格子（简单画画图就能发现了，不证明了）。<br />
被别人一点拨，感觉真的是醍醐灌顶，如此简易的分析方法自己便就是做不到口牙……！<br />
照着这个思路，自己也大致写了下代码：</p>
<p>&nbsp;</p>
<div class="codecolorer-container cpp geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br /></div></td><td><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339900;">#include &lt;stdio.h&gt;</span><br />
<span style="color: #339900;">#include &lt;stdlib.h&gt;</span><br />
<span style="color: #339900;">#include &lt;memory.h&gt;</span><br />
<br />
<span style="color: #339900;">#define TABLE_SIZE 21</span><br />
<br />
<span style="color: #666666;">// store the input</span><br />
<span style="color: #0000ff;">int</span> input<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#123;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #666666;">// store the hole answer</span><br />
<span style="color: #0000ff;">char</span> table<span style="color: #008000;">&#91;</span>TABLE_SIZE <span style="color: #000040;">*</span> TABLE_SIZE<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> <br />
<br />
<span style="color: #0000ff;">bool</span> isVertical <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">void</span> Initialize<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">void</span> Output<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">FILE</span><span style="color: #000040;">*</span> f<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">void</span> Construct<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">FILE</span><span style="color: #000040;">*</span> fw <span style="color: #000080;">=</span> <span style="color: #0000dd;">fopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;testout.txt&quot;</span>, <span style="color: #FF0000;">&quot;w&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">FILE</span><span style="color: #000040;">*</span> fp <span style="color: #000080;">=</span> <span style="color: #0000dd;">fopen</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;testin.txt&quot;</span>, <span style="color: #FF0000;">&quot;r&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>fp<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;file not found!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #666666;">// main loop</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span><span style="color: #0000dd;">feof</span><span style="color: #008000;">&#40;</span>fp<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">fscanf</span><span style="color: #008000;">&#40;</span>fp, <span style="color: #FF0000;">&quot;%d %d %d %d&quot;</span>, <span style="color: #000040;">&amp;</span>input<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>, <span style="color: #000040;">&amp;</span>input<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>, <span style="color: #000040;">&amp;</span>input<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span>, <span style="color: #000040;">&amp;</span>input<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; Initialize<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; Construct<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; Output<span style="color: #008000;">&#40;</span>fw<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0000dd;">fclose</span><span style="color: #008000;">&#40;</span>fp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000dd;">fclose</span><span style="color: #008000;">&#40;</span>fw<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> Initialize<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">int</span> i, j, x, y<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000dd;">memset</span><span style="color: #008000;">&#40;</span>table, <span style="color: #FF0000;">'f'</span>, <span style="color: #0000dd;">sizeof</span><span style="color: #008000;">&#40;</span>table<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <br />
&nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">4</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>input<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">1</span> <span style="color: #000040;">||</span> input<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> TABLE_SIZE <span style="color: #000040;">*</span> TABLE_SIZE<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;input number error!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">exit</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000040;">--</span>input<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// input pos start from 1... but I start from 0</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666;">//sort input</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">4</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>input<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&lt;</span> input<span style="color: #008000;">&#91;</span>i <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">int</span> temp <span style="color: #000080;">=</span> input<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j <span style="color: #000080;">=</span> i <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> j <span style="color: #000080;">&gt;=</span> <span style="color: #0000dd;">0</span> <span style="color: #000040;">&amp;&amp;</span> input<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> temp<span style="color: #008080;">;</span> <span style="color: #000040;">--</span>j<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; input<span style="color: #008000;">&#91;</span>j <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> input<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; input<span style="color: #008000;">&#91;</span>j <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> temp<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666;">//rotate input to 3x2 if it is 2x3</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>input<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span> input<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; isVertical <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">4</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x <span style="color: #000080;">=</span> input<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">%</span> TABLE_SIZE<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; y <span style="color: #000080;">=</span> input<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">/</span> TABLE_SIZE<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; input<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> x <span style="color: #000040;">*</span> TABLE_SIZE <span style="color: #000040;">+</span> TABLE_SIZE <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span> <span style="color: #000040;">-</span> y<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; input<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">^</span><span style="color: #000080;">=</span> input<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; input<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">^</span><span style="color: #000080;">=</span> input<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; input<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">^</span><span style="color: #000080;">=</span> input<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> Construct<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">int</span> i, j, x, y<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; x <span style="color: #000080;">=</span> input<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">%</span> TABLE_SIZE<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; y <span style="color: #000080;">=</span> input<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">/</span> TABLE_SIZE<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>input<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">1</span> <span style="color: #000040;">||</span> input<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">==</span> TABLE_SIZE <span style="color: #000040;">*</span> TABLE_SIZE <span style="color: #000040;">-</span> <span style="color: #0000dd;">2</span> <span style="color: #000040;">-</span> TABLE_SIZE<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span> <span style="color: #666666;">// in the corner (left-top or right-bottom)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>input<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; table<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'0'</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><span style="color: #0000ff;">else</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; table<span style="color: #008000;">&#91;</span>TABLE_SIZE <span style="color: #000040;">*</span> TABLE_SIZE <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'0'</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> TABLE_SIZE<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; table<span style="color: #008000;">&#91;</span>i <span style="color: #000040;">+</span> y <span style="color: #000040;">*</span> TABLE_SIZE<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'a'</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; table<span style="color: #008000;">&#91;</span>i <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span> <span style="color: #000040;">+</span> <span style="color: #008000;">&#40;</span>y <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">*</span> TABLE_SIZE<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'a'</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><span style="color: #0000ff;">else</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666;">//fill it with L in a 4x3 tiny block (3x4 is also useful)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>y <span style="color: #000040;">!</span><span style="color: #000080;">=</span> TABLE_SIZE <span style="color: #000040;">-</span> <span style="color: #0000dd;">2</span> <span style="color: #000040;">&amp;&amp;</span> x <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">=</span> x <span style="color: #000040;">-</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> x <span style="color: #000040;">+</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j <span style="color: #000080;">=</span> y<span style="color: #008080;">;</span> j <span style="color: #000080;">&lt;</span> y <span style="color: #000040;">+</span> <span style="color: #0000dd;">3</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>j<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; table<span style="color: #008000;">&#91;</span>i <span style="color: #000040;">+</span> j <span style="color: #000040;">*</span> TABLE_SIZE<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'c'</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><span style="color: #0000ff;">else</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">=</span> x <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> x <span style="color: #000040;">+</span> <span style="color: #0000dd;">3</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j <span style="color: #000080;">=</span> y <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> j <span style="color: #000080;">&lt;</span> y <span style="color: #000040;">+</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>j<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; table<span style="color: #008000;">&#91;</span>i <span style="color: #000040;">+</span> j <span style="color: #000040;">*</span> TABLE_SIZE<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'c'</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span> &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span> &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666;">//leave a hole anywhere</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>table<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">==</span> <span style="color: #FF0000;">'f'</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; table<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'0'</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><span style="color: #0000ff;">else</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; table<span style="color: #008000;">&#91;</span>TABLE_SIZE <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'0'</span><span style="color: #008080;">;</span>&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span> &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #666666;">// fill the barrier</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">4</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; table<span style="color: #008000;">&#91;</span>input<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'1'</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> Output<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">FILE</span><span style="color: #000040;">*</span> fp<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">int</span> i, j<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> TABLE_SIZE<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> j <span style="color: #000080;">&lt;</span> TABLE_SIZE<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>j<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>isVertical<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">fprintf</span><span style="color: #008000;">&#40;</span>fp, <span style="color: #FF0000;">&quot;%c &quot;</span>, table<span style="color: #008000;">&#91;</span>TABLE_SIZE <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span> <span style="color: #000040;">-</span> i <span style="color: #000040;">+</span> j <span style="color: #000040;">*</span> TABLE_SIZE<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><span style="color: #0000ff;">else</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">fprintf</span><span style="color: #008000;">&#40;</span>fp, <span style="color: #FF0000;">&quot;%c &quot;</span>, table<span style="color: #008000;">&#91;</span>i <span style="color: #000040;">*</span> TABLE_SIZE <span style="color: #000040;">+</span> j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">fprintf</span><span style="color: #008000;">&#40;</span>fp, <span style="color: #FF0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0000dd;">fprintf</span><span style="color: #008000;">&#40;</span>fp, <span style="color: #FF0000;">&quot;1<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span></div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.thpiano.com/?feed=rss2&#038;p=579</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>
