<?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://www.boluor.com/tag/%e7%ae%97%e6%b3%95/feed" rel="self" type="application/rss+xml" />
	<link>http://www.boluor.com</link>
	<description></description>
	<lastBuildDate>Fri, 18 Jun 2010 05:38:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>某一天是星期几 &amp;&amp; php的整除</title>
		<link>http://www.boluor.com/weekday-of-oneday-and-exact-division-in-php.html</link>
		<comments>http://www.boluor.com/weekday-of-oneday-and-exact-division-in-php.html#comments</comments>
		<pubDate>Mon, 17 May 2010 15:24:27 +0000</pubDate>
		<dc:creator>boluor</dc:creator>
				<category><![CDATA[程序设计]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[算法]]></category>

		<guid isPermaLink="false">http://www.boluor.com/?p=635</guid>
		<description><![CDATA[<p>最近在写日程管理系统，其中有个蛮有趣的问题，如何知道某一天是星期几？</p>
<p>假设日期是2010-5-17，php中用date函数可以轻松得得到。date函数的用法：<br />
string date ( string $format [, int $timestamp ] )<br />
$format为&#8221;w&#8221;时，可以获取timestamp对应的星期的数字编号，0代表Sunday,1代表Monday&#8230;6表示Saturday。date(&#8220;w&#8221;,mktime(1,1,1,5,17,2010))就可以获取2010-5-17所对应的星期了。</p>
<p>记得之前sandy推荐给我看的linux下mktime&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>最近在写日程管理系统，其中有个蛮有趣的问题，如何知道某一天是星期几？</p>
<p>假设日期是2010-5-17，php中用date函数可以轻松得得到。date函数的用法：<br />
string date ( string $format [, int $timestamp ] )<br />
$format为&#8221;w&#8221;时，可以获取timestamp对应的星期的数字编号，0代表Sunday,1代表Monday&#8230;6表示Saturday。date(&#8220;w&#8221;,mktime(1,1,1,5,17,2010))就可以获取2010-5-17所对应的星期了。</p>
<p>记得之前sandy推荐给我看的linux下mktime实现的源码分析中，提到了一个magic number，还有神奇的Gauss算法。温习时发现了很多讨论某一天是星期几的算法。其中比较著名的有基姆拉尔森计算公式和蔡勒公式。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;以下摘自百度百科&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
基姆拉尔森计算公式：<br />
W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7<br />
在公式中d表示日期中的日数，m表示月份数，y表示年数。在公式中有个与其他公式不同的地方：把一月和二月看成是上一年的十三月和十四月，例：如果是2004-1-10则换算成：2003-13-10来代入公式计算。结果中0表示Monday , 1 表示 Tuesday &#8230; 6表示Sunday，跟date函数的不同。</p>
<p>蔡勒公式如下：<br />
　　W = [C/4] &#8211; 2C + y + [y/4] + [13 * (M+1) / 5] + d &#8211; 1<br />
　　或者是:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1<br />
　　公式中的符号含义如下：<br />
　　w：星期； w对7取模得：0-星期日，1-星期一，2-星期二，3-星期三，4-星期四，5-星期五，6-星期六<br />
　　c：世纪-1（前两位数）<br />
　　y：年（后两位数）<br />
　　m：月（m大于等于3，小于等于14，即在蔡勒公式中，某年的1、2月要看作上一年的13、14月来计算，比如2003年1月1日要看作2002年的13月1日来计算）<br />
　　d：日<br />
　　[ ]代表取整，即只要整数部分。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;以上摘自百度百科&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>用php实现了下：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:Courier new,verdana;"><span style="color: #000000; font-weight: bold;">function</span> day2week<span style="color: #009900;">&#40;</span><span style="color: #000088;">$year</span><span style="color: #339933;">,</span><span style="color: #000088;">$month</span><span style="color: #339933;">,</span><span style="color: #000088;">$day</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$month</span> <span style="color: #339933;">&lt;=</span> <span style="color: #cc66cc;">0</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$year</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$year</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$month</span> <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">12</span> <span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000088;">$w</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>int<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$day</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">*</span><span style="color: #000088;">$month</span> <span style="color: #339933;">+</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span>int<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$month</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">5</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$year</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>int<span style="color: #009900;">&#41;</span><span style="color: #000088;">$year</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">4</span> <span style="color: #339933;">-</span>
 <span style="color: #000088;">$year</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">100</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$year</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">400</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span>  <span style="color: #cc66cc;">7</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$w</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span></pre></div></div>

<p>但测试时发现结果不对头。跟sandy讨论了会儿，发现用C语言实现的程序运行结果是正确的，才想到是php的整除的问题，php的动态类型的机制，“/”之类的结果是浮点类型的。要想得到和C语言一样的整除的效果，就要配合floor和ceil两个取整函数了。C中取整都是向0靠拢，也就是说如果结果是负数，就取大于等于结果的最小整数；结果是正数，就取小于等于结果的最大整数。一个php中的类似实现：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:Courier new,verdana;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
    <span style="color: #000000; font-weight: bold;">function</span> rst2int<span style="color: #009900;">&#40;</span><span style="color: #000088;">$a</span> <span style="color: #339933;">,</span><span style="color: #000088;">$b</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$b</span> <span style="color: #339933;">&lt;</span> <span style="color:#800080;">1e-9</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">&quot;error&quot;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$rst</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$a</span><span style="color: #339933;">/</span><span style="color: #000088;">$b</span> <span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$rst</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span> ? <span style="color: #990000;">floor</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$rst</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #990000;">ceil</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$rst</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">echo</span> rst2int<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">echo</span> rst2int<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">echo</span> rst2int<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>写脚本的时候还是要特别注意才好啊~</p>
]]></content:encoded>
			<wfw:commentRss>http://www.boluor.com/weekday-of-oneday-and-exact-division-in-php.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2009笔试+面试总结(一)</title>
		<link>http://www.boluor.com/2009-the-first-summary-of-writtens-and-interviews.html</link>
		<comments>http://www.boluor.com/2009-the-first-summary-of-writtens-and-interviews.html#comments</comments>
		<pubDate>Tue, 03 Nov 2009 15:31:32 +0000</pubDate>
		<dc:creator>boluor</dc:creator>
				<category><![CDATA[程序设计]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[C＋＋]]></category>
		<category><![CDATA[算法]]></category>

		<guid isPermaLink="false">http://www.boluor.com/?p=418</guid>
		<description><![CDATA[<p>　　十月份到现在参加了4个公司的笔试和面试，后天打算把三方协议签了，找工作就暂时尘埃落定了。开始专心复习之前，把笔试和面试中遇到的一些问题拿出来总结下。所列题目大致按照出题思想，非原题目。<br />
　　我面试的这4家IT公司，对于三点都非常重视。一个是基础知识，一个是运用知识，思考的能力，一个组织表达能力。按这三种分类记录下笔试和面试题目。</p>
<p><strong>［基础知识］</strong><br />
　　考察基础知识，在笔试题目最常见，占比例也最大。</p>
<ol>
<li>有n个节点的二叉树，其中有m个节点有两个孩子，问这棵树有多少颗叶子节点。
<blockquote><p>这题目其实是数据结构上的原题，不要被n迷惑了。</p></blockquote>
</li>
<p><span id="more-418"></span>
<li>问这段代码输出什么？考察C++基础。</li></p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:Courier new,verdana;"><span style="color: #0000ff;">class</span> A<span style="color: #008000;">&#123;</span> 
<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span> 
<span style="color: #0000ff;">int</span> x<span style="color: #008000;">&#4</span></pre></div></div></ol><p>&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>　　十月份到现在参加了4个公司的笔试和面试，后天打算把三方协议签了，找工作就暂时尘埃落定了。开始专心复习之前，把笔试和面试中遇到的一些问题拿出来总结下。所列题目大致按照出题思想，非原题目。<br />
　　我面试的这4家IT公司，对于三点都非常重视。一个是基础知识，一个是运用知识，思考的能力，一个组织表达能力。按这三种分类记录下笔试和面试题目。</p>
<p><strong>［基础知识］</strong><br />
　　考察基础知识，在笔试题目最常见，占比例也最大。</p>
<ol>
<li>有n个节点的二叉树，其中有m个节点有两个孩子，问这棵树有多少颗叶子节点。</p>
<blockquote><p>这题目其实是数据结构上的原题，不要被n迷惑了。</p></blockquote>
</li>
<p><span id="more-418"></span>
<li>问这段代码输出什么？考察C++基础。</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:Courier new,verdana;"><span style="color: #0000ff;">class</span> A<span style="color: #008000;">&#123;</span> 
<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span> 
<span style="color: #0000ff;">int</span> x<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span> 
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span> 
<span style="color: #0000ff;">class</span> B <span style="color: #008080;">:</span> <span style="color: #0000ff;">public</span> A<span style="color: #008000;">&#123;</span> 
<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span> 
<span style="color: #0000ff;">int</span> x<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> <span style="color: #0000dd;">3</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span> 
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span> 
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span> 
A <span style="color: #000040;">*</span>a <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> A<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> 
A <span style="color: #000040;">*</span>b <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> B<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> 
<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> a<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>x<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> b<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>x<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span>endl<span style="color: #008080;">;</span> 
<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> 
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>　　<br />
<blockquote>类A中的函数x并非虚函数，所以不会发生动态绑定。</p></blockquote>
</li>
<li>
　　下列哪个表达式是错误的?<br />
　　int a = 10;<br />
　　1. (a++) += a;<br />
　　2. (++a) += (a++);<br />
　　<br />
<blockquote>a++其实是分三个步骤的：{tmp=a;++a;return tmp;}所以a++不能作为左值。</p></blockquote>
</li>
<li>
　　问下面的程序需要几次才能跳出循环?</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:Courier new,verdana;">　　<span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span> a <span style="color: #339933;">=</span><span style="color: #0000dd;">5</span><span style="color: #339933;">;</span>
　　<span style="color: #993333;">int</span> b <span style="color: #339933;">=</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">;</span>
　　<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span> a<span style="color: #339933;">+</span>b <span style="color: #339933;">&gt;=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
   　　　b<span style="color: #339933;">--;</span>
　　<span style="color: #009900;">&#125;</span></pre></div></div>

<p>　　<br />
<blockquote>C++中有符号和无符号类型之间的转换，要遵循一个原则：所定义的转换规则需要保护操作数的精度。比如long和unsigned int类型，只要机器上的long型足够表示unsigned int型的所有值，就将unsigned int转换为long型，否则，将两个操作数都转换为unsigned long。而对于包含signed 和 unsigned int型的表达式，其转换则是将signed型数值转换为unsigned型。如果此时将int转换为unsigned int，而int型数值恰好为负数，那这带来了副作用。此题就是一个例子。</p></blockquote>
</li>
<li>
　　union{<br />
　　int i;<br />
　　char x[2];<br />
　　}a;</p>
<p>　　a.x[0] = 8;<br />
　　a.x[1] = 1;<br />
　　问 a.i为多少?<br />
　　<br />
<blockquote>首先要了解的是，数据在内存中的存储方式。比如一个int型数，4个字节，表示为ABCD，在内存其实是DCBA保存的。那么看这题，内存中保存的是：00001000 00000001 00000000 00000000.根据上面的规则，那么用int来读取这段数据，即为00000000 00000000 00000001 00001000，即264.</p></blockquote>
</li>
<li>
　　map,set,hashmap和multimap,有个与其他三个数据结构不同的是哪一个?<br />
　　<br />
<blockquote>hashmap，采用和其他三种都不同的方式。</p></blockquote>
</li>
<li>
　　如果一个数列中的元素距离他们各自最终的位置都很近，那么哪一种算法最省时间？（直接插入，堆排序，快速排序，选择排序）<br />
　　<br />
<blockquote>我感觉是直接插入排序，当然还需要测试。</p></blockquote>
</li>
<li>
　　const char *和char * const 的区别。<br />
　　　<br />
<blockquote>const char *p;结合的方式是自右向左。所以p首先是个指针，然后个char型指针，然后他指向的是个const,此时，p本身的值可以改变的，但是不能通过p来修改p所指向区域A的值，但A可以通过其他指针修改。同理，char * const p，p首先是个const对象，之后才是指向char型的指针，此时p本身是不能修改的。</p></blockquote>
</li>
<li>
　　问下面的结果？<br />
　　char a = 50;<br />
　　int i = sizeof( a = (a+205));<br />
　　问 i 和 a各为多少?<br />
　　<br />
<blockquote>i为1大家都可以看出来，但a为多少相信就不是那么容易答对了。答-1的算好的，说255的就可以回去看计组了。sizeof(A)是个大难点，尤其是A如果是struct类型的时候。此题中，sizeof(A)的值其实是在编译阶段就已经确定了，所以根本没有运行a = a+205 这一步。在编译完成后，这句就相当于int i = 1;</p></blockquote>
</li>
<li>
　　计算机网络单播，组播，广播的区别。路由器和交换机的作用和原理。ARP协议的内容，以及其他相关的PPPOE协议的知识。
</li>
<li>
　　修改错误的代码：快排和堆排序。这完全的基本功了，为了面试，多练习在纸上写程序吧。
	</li>
</ol>
<p>　　类似的题目还有很多。这些题目如果不能拿分的话，给面试官的印象会很不好。这几次面试的时候，面试官手里一般都是我的笔试试卷 + 面试评分单。面试官都会拿我的基础题目说，为什么这道题目都不会？所以把握基础题目至关重要的。</p>
<p>　　计算机本身是门实践性更强的学科，所以如果平时不怎么编程，是很难发现自己的问题和未知的领域的。tencent的笔试题目考得很细很深，平时不上机code的同学可能很难会想到所考的知识点； 而遇到问题时不刨根问底或者得过且过，则会造成更大的遗憾。const char *和char * const的区别，内存的分配方式和管理方式，内存泄漏等等，平时感觉到有一丁点疑惑时，问题的背后一般藏有更多你不了解的；还有一点也很重要，像PPPOE并不是在书上，但是大家听说的就比较多了。应该及时的去了解这些前沿领域（虽然PPPOE不算前沿），保持对本专业发展方向的敏感，扩大自己的视野。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.boluor.com/2009-the-first-summary-of-writtens-and-interviews.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>woj1414 &#8211; URL 解题报告</title>
		<link>http://www.boluor.com/woj1414-url-solution-report.html</link>
		<comments>http://www.boluor.com/woj1414-url-solution-report.html#comments</comments>
		<pubDate>Sun, 30 Aug 2009 15:33:59 +0000</pubDate>
		<dc:creator>boluor</dc:creator>
				<category><![CDATA[程序设计]]></category>
		<category><![CDATA[C＋＋]]></category>
		<category><![CDATA[STL]]></category>
		<category><![CDATA[算法]]></category>

		<guid isPermaLink="false">http://www.boluor.com/?p=351</guid>
		<description><![CDATA[<p>　　原题目见：<a href="http://acm.whu.edu.cn/oak/problem/problem.jsp?problem_id=1414" class="broken_link">Problem 1414 &#8211; URL </a>。<br />
　　题目的背景是，我们在浏览器中输入URL时，浏览器会提示我们之前搜索过的，URL以当前字符为前缀的的网页，并且按照之前访问次数来递减显示。<br />
　　思路，每次Visit时将访问的页面作为KEY来保存，并且次数增1。每次Display时，搜索所有现存的网页，找到以当前字符串为前缀的字符串，并按次数逆序输出。<br />
　　虽然解题报告不提倡直接贴代码，不过我的代码没多少行，题目又比较简单，就给我AC的代码吧。这题的数据比较弱，我看前200多名都是0MS。代码是逼着自己用STL中的容器map写的，如果发现有什么改进的地方请告诉我。<span id="more-351"></span></p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:Courier new,verdana;"><span style="color: #339900;">#include &#60;i</span></pre></div></div><p>&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>　　原题目见：<a href="http://acm.whu.edu.cn/oak/problem/problem.jsp?problem_id=1414" class="broken_link">Problem 1414 &#8211; URL </a>。<br />
　　题目的背景是，我们在浏览器中输入URL时，浏览器会提示我们之前搜索过的，URL以当前字符为前缀的的网页，并且按照之前访问次数来递减显示。<br />
　　思路，每次Visit时将访问的页面作为KEY来保存，并且次数增1。每次Display时，搜索所有现存的网页，找到以当前字符串为前缀的字符串，并按次数逆序输出。<br />
　　虽然解题报告不提倡直接贴代码，不过我的代码没多少行，题目又比较简单，就给我AC的代码吧。这题的数据比较弱，我看前200多名都是0MS。代码是逼着自己用STL中的容器map写的，如果发现有什么改进的地方请告诉我。<span id="more-351"></span></p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:Courier new,verdana;"><span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;map&gt;</span>
<span style="color: #339900;">#include &lt;string&gt;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    string prompt,str<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> n,m<span style="color: #008080;">;</span>
    string visit<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Visit&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #666666;">//string display(&quot;Display&quot;);</span>
    <span style="color: #0000ff;">typedef</span> map<span style="color: #000080;">&lt;</span>string , <span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span> Urls<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">typedef</span> Urls<span style="color: #008080;">::</span><span style="color: #007788;">const_iterator</span> UrlsIter<span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">typedef</span> multimap<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span> ,string , greater<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span> <span style="color: #000080;">&gt;</span> Urlrank<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">typedef</span> Urlrank<span style="color: #008080;">::</span><span style="color: #007788;">const_iterator</span> RankIter<span style="color: #008080;">;</span>
&nbsp;
    Urls url<span style="color: #008080;">;</span>
    Urlrank urlrank<span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000dd;">cin</span><span style="color: #000080;">&gt;&gt;</span>n<span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span> n<span style="color: #000040;">--</span> <span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        <span style="color: #0000dd;">cin</span><span style="color: #000080;">&gt;&gt;</span>m<span style="color: #008080;">;</span>
&nbsp;
        url.<span style="color: #007788;">clear</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        urlrank.<span style="color: #007788;">clear</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
        <span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span> m<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
            <span style="color: #0000dd;">cin</span> <span style="color: #000080;">&gt;&gt;</span> prompt <span style="color: #000080;">&gt;&gt;</span> str<span style="color: #008080;">;</span>
&nbsp;
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span> visit.<span style="color: #007788;">compare</span><span style="color: #008000;">&#40;</span>prompt<span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
                url<span style="color: #008000;">&#91;</span>str<span style="color: #008000;">&#93;</span><span style="color: #000040;">++</span><span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span><span style="color: #0000ff;">else</span><span style="color: #008000;">&#123;</span>
                <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>UrlsIter iter <span style="color: #000080;">=</span> url.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> iter <span style="color: #000040;">!</span><span style="color: #000080;">=</span> url.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> iter<span style="color: #000040;">++</span> <span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
                    string tmp<span style="color: #008000;">&#40;</span>iter<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>first<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span> tmp.<span style="color: #007788;">find</span><span style="color: #008000;">&#40;</span>str<span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span> <span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
                        urlrank.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span> make_pair<span style="color: #008000;">&#40;</span> iter<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>second,iter<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>first <span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                    <span style="color: #008000;">&#125;</span>
                <span style="color: #008000;">&#125;</span>
&nbsp;
                <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span> RankIter iter <span style="color: #000080;">=</span> urlrank.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> iter <span style="color: #000040;">!</span><span style="color: #000080;">=</span> urlrank.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> iter<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
                    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> iter<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>second <span style="color: #000080;">&lt;&lt;</span>endl<span style="color: #008080;">;</span>
&nbsp;
                <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span>endl<span style="color: #008080;">;</span>
                urlrank.<span style="color: #007788;">clear</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.boluor.com/woj1414-url-solution-report.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>STL笔记一</title>
		<link>http://www.boluor.com/stl-notes.html</link>
		<comments>http://www.boluor.com/stl-notes.html#comments</comments>
		<pubDate>Wed, 26 Aug 2009 15:22:43 +0000</pubDate>
		<dc:creator>boluor</dc:creator>
				<category><![CDATA[程序设计]]></category>
		<category><![CDATA[C＋＋]]></category>
		<category><![CDATA[STL]]></category>
		<category><![CDATA[算法]]></category>

		<guid isPermaLink="false">http://www.boluor.com/?p=317</guid>
		<description><![CDATA[　　【题目1】三句话实现：整数的输入，排序，输出：(by Sandy)
　　【题目2】三句话实现：单词的输入，剔除其中重复的单词，并按字母顺序输出。
　　【woj1170】<a href="http://acm.whu.edu.cn/oak/problem/problem.jsp?problem_id=1170" target="_blank">Problem 1170 - Sorting </a>　　重写了遍。]]></description>
			<content:encoded><![CDATA[<p>　　	【题目1】三句话实现：整数的输入，排序，输出：(by Sandy)</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:Courier new,verdana;"><span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;vector&gt;</span>
<span style="color: #339900;">#include &lt;algorithm&gt;</span>
<span style="color: #339900;">#include &lt;iterator&gt;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    vector<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span> v1<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>istream_iterator<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">cin</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>,<span style="color: #008000;">&#40;</span>istream_iterator<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    sort<span style="color: #008000;">&#40;</span>v1.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,v1.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    copy<span style="color: #008000;">&#40;</span>v1.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,v1.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,ostream_iterator<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">cout</span>,<span style="color: #FF0000;">&quot; &quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>　　【题目2】三句话实现：单词的输入，剔除其中重复的单词，并按字母顺序输出。</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:Courier new,verdana;">	vector<span style="color: #000080;">&lt;</span>string<span style="color: #000080;">&gt;</span> v1<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>istream_iterator<span style="color: #000080;">&lt;</span>string<span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">cin</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>,<span style="color: #008000;">&#40;</span>istream_iterator<span style="color: #000080;">&lt;</span>string<span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	sort<span style="color: #008000;">&#40;</span>v1.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,v1.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	unique_copy<span style="color: #008000;">&#40;</span>v1.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,v1.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,ostream_iterator<span style="color: #000080;">&lt;</span>string<span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">cout</span>,<span style="color: #FF0000;">&quot; &quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>　　<br />
　　【woj1170】<a href="http://acm.whu.edu.cn/oak/problem/problem.jsp?problem_id=1170" target="_blank" class="broken_link">Problem 1170 &#8211; Sorting </a>　　重写了遍。</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:Courier new,verdana;">    vector<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span>  v1<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>istream_iterator<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">cin</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>,<span style="color: #008000;">&#40;</span>istream_iterator<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    v1.<span style="color: #007788;">erase</span><span style="color: #008000;">&#40;</span>v1.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    sort<span style="color: #008000;">&#40;</span>v1.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,v1.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    unique_copy<span style="color: #008000;">&#40;</span>v1.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,v1.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,ostream_iterator<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">cout</span>,<span style="color: #FF0000;">&quot; &quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>　　<strike>这题目用vector的效率不高，用list快些。</strike></p>
<p>　　【总结】<br />
　　明白Sandy的意思是让我练习下STL，我说了很久要学要学，但是好久之后依然还没动，被这个被那个事情给耽搁着。前天晚上和Sandy的聊天，让我明白了，这些知识并不是要等某一天某一大段时间再去学习，而是点滴积累的。</p>
<p>　　以上的两道题目牵涉到的有：(这几天总结下)<br />
　　
<ul>
<li>输入流迭代器</li>
<p>　　
<li>sort</li>
<p>　　
<li>vector，list，deque</li>
<p>　　
<li>unique_copy 和 copy</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.boluor.com/stl-notes.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
