﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-付翔的专栏-随笔分类-c++ </title><link>http://www.cppblog.com/397993401/category/13185.html</link><description>在鄙视中成长 记录成长的点滴</description><language>zh-cn</language><lastBuildDate>Sun, 29 May 2011 11:11:36 GMT</lastBuildDate><pubDate>Sun, 29 May 2011 11:11:36 GMT</pubDate><ttl>60</ttl><item><title>编程珠玑　－　第四章习题</title><link>http://www.cppblog.com/397993401/archive/2011/05/29/147567.html</link><dc:creator>付翔</dc:creator><author>付翔</author><pubDate>Sun, 29 May 2011 02:56:00 GMT</pubDate><guid>http://www.cppblog.com/397993401/archive/2011/05/29/147567.html</guid><wfw:comment>http://www.cppblog.com/397993401/comments/147567.html</wfw:comment><comments>http://www.cppblog.com/397993401/archive/2011/05/29/147567.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/397993401/comments/commentRss/147567.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/397993401/services/trackbacks/147567.html</trackback:ping><description><![CDATA[<p>第四章讲的是二叉搜索，然后习题中要求实现二叉搜索，并要求在一个有序的数组中，查找key，并返回第一次出现的下标。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 最初的想法<strong>&#8220;先通过正常的二分查找返回一个位置pos，然后在二分查找0-pos，如果有合适的newpos继续0-newpos，不过是log2N + log2(N/2)+。。。&#8221;</strong></p> <p><strong>&nbsp;&nbsp;&nbsp; </strong>优化后</p> <p>&nbsp;&nbsp;&nbsp; 1 正常的二分查找返回一个位置pos ，此时的pos&nbsp; 是由&nbsp; left&nbsp; right 生成 ，转到第二步</p> <p>&nbsp;&nbsp;&nbsp; 2 继续调用 二分搜索 在 left 和 pos &#8211;1 中查找key ， 如果找到 继续第二步，如果没有第三步</p> <p>&nbsp;&nbsp;&nbsp; 3 此时可以说明 left &#8211; pos &#8211;1 中 不存在 key ，那么可以说 pos 就是第一次出现的下标 </p> <p>&nbsp;</p><pre class="csharpcode"># include&lt;stdio.h&gt;
<span class="preproc">#define</span> DEBUG 
<span class="kwrd">int</span> bsearch(<span class="kwrd">int</span> array[],<span class="kwrd">int</span> &amp;start ,<span class="kwrd">int</span> &amp;end ,<span class="kwrd">int</span> key)
{
    <span class="kwrd">int</span> i,j;
    <span class="kwrd">int</span> mid;
    i = start;
    j = end ;
    <span class="kwrd">while</span>(i &lt;= j)
    {
        mid = (i+j)/2;
        #ifdef DEBUG
         <span class="rem">//   printf("now i j and mid is %d %d %d\n",i,j,mid);</span>
        <span class="preproc">#endif</span>
        
        <span class="kwrd">if</span>(array[mid] == key)
            <span class="kwrd">return</span> mid;
        <span class="kwrd">else</span> <span class="kwrd">if</span>(array[mid] &lt; key)
            i = mid + 1;
        <span class="kwrd">else</span> 
            j = mid - 1;
        
    }
    start = i,end = mid;
    <span class="kwrd">return</span> -1;
}
<span class="kwrd">int</span> FirstBsearch(<span class="kwrd">int</span> array[],<span class="kwrd">int</span> start ,<span class="kwrd">int</span> end ,<span class="kwrd">int</span> key)
{
    <span class="kwrd">int</span> i,j;
    <span class="kwrd">int</span> mid,pos;
    i = start;
    j = end ;
    mid = bsearch(array,start ,end ,key);
    <span class="kwrd">if</span>(array[mid] ==  key)<span class="rem">//如果找到了</span>
    {
        pos = mid;
        <span class="kwrd">while</span>( pos != -1 )
        {            
            j = pos -1;
            pos = bsearch(array ,i ,j ,key);
        }
        <span class="kwrd">return</span> j+1;
    } 
    <span class="kwrd">return</span> -1;
    
}
<span class="kwrd">int</span> main()
{
    <span class="kwrd">int</span> data[11] = {1,3,4,7,7,7,7,56,134,134,132487990};
    <span class="kwrd">int</span> key,i;
    <span class="kwrd">int</span> start = 0,end =10;
    <span class="kwrd">for</span>(i = 0 ; i &lt; 4; i ++)
    {
        scanf(<span class="str">"%d"</span>,&amp;key);
        printf(<span class="str">"%d"</span>,FirstBsearch(data,start,end,key));
    }
    <span class="kwrd">return</span> 0;
}</pre><br /><p>我独立博客的　<a href="http://www.fuxiang90.me/?p=85">原文</a>　　　欢迎大家访问，批评指正；</p>
<p><a href="http://www.fuxiang90.me/?p=85">http://www.fuxiang90.me/?p=85</a></p><img src ="http://www.cppblog.com/397993401/aggbug/147567.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/397993401/" target="_blank">付翔</a> 2011-05-29 10:56 <a href="http://www.cppblog.com/397993401/archive/2011/05/29/147567.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>测试类的析构函数</title><link>http://www.cppblog.com/397993401/archive/2011/02/27/140756.html</link><dc:creator>付翔</dc:creator><author>付翔</author><pubDate>Sun, 27 Feb 2011 13:23:00 GMT</pubDate><guid>http://www.cppblog.com/397993401/archive/2011/02/27/140756.html</guid><wfw:comment>http://www.cppblog.com/397993401/comments/140756.html</wfw:comment><comments>http://www.cppblog.com/397993401/archive/2011/02/27/140756.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/397993401/comments/commentRss/140756.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/397993401/services/trackbacks/140756.html</trackback:ping><description><![CDATA[<pre class="csharpcode">#include <span class="str">"thing.h"</span>

<span class="kwrd">void</span> function(Thing t) {
    Thing lt(106);//函数结束时 调用析构 
    Thing* tp1 = <span class="kwrd">new</span> Thing(107);
    Thing* tp2 = <span class="kwrd">new</span> Thing(108);// 不会调用析构
    delete tp1;
}

<span class="kwrd">int</span> main() {
    Thing t1(101), t2(102); // 在main 函数结束时 调用析构
    Thing* tp1 = <span class="kwrd">new</span> Thing(103); 
    function(t1);// 其中t1 在function 结束时调用析构
    {  <span class="rem">/* nested block/scope */</span>
        Thing t3(104);// 该作用域结束时 调用析构
        Thing* tp = <span class="kwrd">new</span> Thing(105);// 不会调用析构 
    }
    delete tp1;
    <span class="kwrd">return</span> 0;
}

</pre><pre class="csharpcode">#ifndef THING_H_
<span class="preproc">#define</span> THING_H_

#include &lt;iostream&gt;
#include &lt;<span class="kwrd">string</span>&gt;
<span class="kwrd">using</span> <span class="kwrd">namespace</span> std;

<span class="kwrd">class</span> Thing {
 <span class="kwrd">public</span>:
    Thing(<span class="kwrd">int</span> n) : m_Num(n) {
        
    }
    ~Thing() {
        cout &lt;&lt; <span class="str">"destructor called: "</span> 
             &lt;&lt; m_Num &lt;&lt; endl;
    }
    
 <span class="kwrd">private</span>:
    <span class="kwrd">string</span> m_String;
    <span class="kwrd">int</span> m_Num;
};
<span class="preproc">#endif</span>

</pre><pre class="csharpcode">运行结果</pre><pre class="csharpcode">destructor called: 107
destructor called: 106
destructor called: 101
destructor called: 104
destructor called: 103
destructor called: 102
destructor called: 101</pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>

<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style><img src ="http://www.cppblog.com/397993401/aggbug/140756.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/397993401/" target="_blank">付翔</a> 2011-02-27 21:23 <a href="http://www.cppblog.com/397993401/archive/2011/02/27/140756.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>int 最大值</title><link>http://www.cppblog.com/397993401/archive/2010/09/14/126604.html</link><dc:creator>付翔</dc:creator><author>付翔</author><pubDate>Tue, 14 Sep 2010 09:04:00 GMT</pubDate><guid>http://www.cppblog.com/397993401/archive/2010/09/14/126604.html</guid><wfw:comment>http://www.cppblog.com/397993401/comments/126604.html</wfw:comment><comments>http://www.cppblog.com/397993401/archive/2010/09/14/126604.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/397993401/comments/commentRss/126604.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/397993401/services/trackbacks/126604.html</trackback:ping><description><![CDATA[<div style="background-color: rgb(238, 238, 238); font-size: 13px; border-left-color: rgb(204, 204, 204); padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000; ">(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">31</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;</span></div><div style="background-color: rgb(238, 238, 238); font-size: 13px; border-left-color: rgb(204, 204, 204); padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><span style="color: #000000; "><br></span></div><div style="background-color: rgb(238, 238, 238); font-size: 13px; border-left-color: rgb(204, 204, 204); padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><span style="color: #000000; ">打括号是因为 - 比&lt;&lt; 优先级高&nbsp;</span></div><img src ="http://www.cppblog.com/397993401/aggbug/126604.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/397993401/" target="_blank">付翔</a> 2010-09-14 17:04 <a href="http://www.cppblog.com/397993401/archive/2010/09/14/126604.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++ 运算符优先级列表</title><link>http://www.cppblog.com/397993401/archive/2010/08/14/123410.html</link><dc:creator>付翔</dc:creator><author>付翔</author><pubDate>Sat, 14 Aug 2010 02:07:00 GMT</pubDate><guid>http://www.cppblog.com/397993401/archive/2010/08/14/123410.html</guid><wfw:comment>http://www.cppblog.com/397993401/comments/123410.html</wfw:comment><comments>http://www.cppblog.com/397993401/archive/2010/08/14/123410.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/397993401/comments/commentRss/123410.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/397993401/services/trackbacks/123410.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="border-collapse: separate; color: #000000; font-family: Simsun; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium;"><span class="Apple-style-span" style="font-family: Verdana,Geneva,Arial,Helvetica,sans-serif; font-size: 14px;">
<h2 style="margin-top: 10px; font-size: 1em;"><a  href="http://www.cppblog.com/aqazero/archive/2006/06/08/8284.html" id="viewpost1_TitleUrl" style="color: #006600; text-decoration: none;">C++ 运算符优先级列表</a></h2>
<a  href="http://www.cppreference.com/operator_precedence.html" style="color: #006600; text-decoration: none;">http://www.cppreference.com/operator_precedence.html</a><span class="Apple-converted-space">&nbsp;</span><br>
<table class="code-table" border="1">
    <tbody>
        <tr>
            <th class="code-table-th">Precedence</th><th class="code-table-th">Operator</th><th class="code-table-th">Description</th><th class="code-table-th">Example</th><th class="code-table-th">Associativity</th>
        </tr>
        <tr>
            <td class="code-table-td" style="font-size: 12px;">1</td>
            <td class="code-table-td" style="font-size: 12px;">()<br>[]<br>-&gt;<br>.<br>::<br>++<br>--</td>
            <td class="code-table-td" style="font-size: 12px;">Grouping operator<br>Array access<br>Member access from a pointer<br>Member access from an object<br>Scoping operator<br>Post-increment<br>Post-decrement</td>
            <td class="code-table-td" style="font-size: 12px;">(a + b) / 4;<br>array[4] = 2;<br>ptr-&gt;age = 34;<br>obj.age = 34;<br>Class::age = 2;<br>for( i = 0; i &lt; 10; i++ ) ...<br>for( i = 10; i &gt; 0; i-- ) ...</td>
            <td class="code-table-td" style="font-size: 12px;">left to right</td>
        </tr>
        <tr>
            <td class="code-table-td" style="font-size: 12px;">2</td>
            <td class="code-table-td" style="font-size: 12px;">!<br>~<br>++<br>--<br>-<br>+<br>*<br>&amp;<br>(type)<br><a  href="http://www.cppreference.com/keywords/sizeof.html" style="color: #006600; text-decoration: none;">sizeof</a></td>
            <td class="code-table-td" style="font-size: 12px;">Logical negation<br>Bitwise complement<br>Pre-increment<br>Pre-decrement<br>Unary minus<br>Unary plus<br>Dereference<br>Address of<br>Cast to a given type<br>Return size in bytes</td>
            <td class="code-table-td" style="font-size: 12px;">if( !done ) ...<br>flags = ~flags;<br>for( i = 0; i &lt; 10; ++i ) ...<br>for( i = 10; i &gt; 0; --i ) ...<br>int i = -1;<br>int i = +1;<br>data = *ptr;<br>address = &amp;obj;<br>int i = (int) floatNum;<br>int size = sizeof(floatNum);</td>
            <td class="code-table-td" style="font-size: 12px;">right to left</td>
        </tr>
        <tr>
            <td class="code-table-td" style="font-size: 12px;">3</td>
            <td class="code-table-td" style="font-size: 12px;">-&gt;*<br>.*</td>
            <td class="code-table-td" style="font-size: 12px;">Member pointer selector<br>Member pointer selector</td>
            <td class="code-table-td" style="font-size: 12px;">ptr-&gt;*var = 24;<br>obj.*var = 24;</td>
            <td class="code-table-td" style="font-size: 12px;">left to right</td>
        </tr>
        <tr>
            <td class="code-table-td" style="font-size: 12px;">4</td>
            <td class="code-table-td" style="font-size: 12px;">*<br>/<br>%</td>
            <td class="code-table-td" style="font-size: 12px;">Multiplication<br>Division<br>Modulus</td>
            <td class="code-table-td" style="font-size: 12px;">int i = 2 * 4;<br>float f = 10 / 3;<br>int rem = 4 % 3;</td>
            <td class="code-table-td" style="font-size: 12px;">left to right</td>
        </tr>
        <tr>
            <td class="code-table-td" style="font-size: 12px;">5</td>
            <td class="code-table-td" style="font-size: 12px;">+<br>-</td>
            <td class="code-table-td" style="font-size: 12px;">Addition<br>Subtraction</td>
            <td class="code-table-td" style="font-size: 12px;">int i = 2 + 3;<br>int i = 5 - 1;</td>
            <td class="code-table-td" style="font-size: 12px;">left to right</td>
        </tr>
        <tr>
            <td class="code-table-td" style="font-size: 12px;">6</td>
            <td class="code-table-td" style="font-size: 12px;">&lt;&lt;<br>&gt;&gt;</td>
            <td class="code-table-td" style="font-size: 12px;">Bitwise shift left<br>Bitwise shift right</td>
            <td class="code-table-td" style="font-size: 12px;">int flags = 33 &lt;&lt; 1;<br>int flags = 33 &gt;&gt; 1;</td>
            <td class="code-table-td" style="font-size: 12px;">left to right</td>
        </tr>
        <tr>
            <td class="code-table-td" style="font-size: 12px;">7</td>
            <td class="code-table-td" style="font-size: 12px;">&lt;<br>&lt;=<br>&gt;<br>&gt;=</td>
            <td class="code-table-td" style="font-size: 12px;">Comparison less-than<br>Comparison less-than-or-equal-to<br>Comparison greater-than<br>Comparison geater-than-or-equal-to</td>
            <td class="code-table-td" style="font-size: 12px;">if( i &lt; 42 ) ...<br>if( i &lt;= 42 ) ...<br>if( i &gt; 42 ) ...<br>if( i &gt;= 42 ) ...</td>
            <td class="code-table-td" style="font-size: 12px;">left to right</td>
        </tr>
        <tr>
            <td class="code-table-td" style="font-size: 12px;">8</td>
            <td class="code-table-td" style="font-size: 12px;">==<br>!=</td>
            <td class="code-table-td" style="font-size: 12px;">Comparison equal-to<br>Comparison not-equal-to</td>
            <td class="code-table-td" style="font-size: 12px;">if( i == 42 ) ...<br>if( i != 42 ) ...</td>
            <td class="code-table-td" style="font-size: 12px;">left to right</td>
        </tr>
        <tr>
            <td class="code-table-td" style="font-size: 12px;">9</td>
            <td class="code-table-td" style="font-size: 12px;">&amp;</td>
            <td class="code-table-td" style="font-size: 12px;">Bitwise AND</td>
            <td class="code-table-td" style="font-size: 12px;">flags = flags &amp; 42;</td>
            <td class="code-table-td" style="font-size: 12px;">left to right</td>
        </tr>
        <tr>
            <td class="code-table-td" style="font-size: 12px;">10</td>
            <td class="code-table-td" style="font-size: 12px;">^</td>
            <td class="code-table-td" style="font-size: 12px;">Bitwise exclusive OR</td>
            <td class="code-table-td" style="font-size: 12px;">flags = flags ^ 42;</td>
            <td class="code-table-td" style="font-size: 12px;">left to right</td>
        </tr>
        <tr>
            <td class="code-table-td" style="font-size: 12px;">11</td>
            <td class="code-table-td" style="font-size: 12px;">|</td>
            <td class="code-table-td" style="font-size: 12px;">Bitwise inclusive (normal) OR</td>
            <td class="code-table-td" style="font-size: 12px;">flags = flags | 42;</td>
            <td class="code-table-td" style="font-size: 12px;">left to right</td>
        </tr>
        <tr>
            <td class="code-table-td" style="font-size: 12px;">12</td>
            <td class="code-table-td" style="font-size: 12px;">&amp;&amp;</td>
            <td class="code-table-td" style="font-size: 12px;">Logical AND</td>
            <td class="code-table-td" style="font-size: 12px;">if( conditionA &amp;&amp; conditionB ) ...</td>
            <td class="code-table-td" style="font-size: 12px;">left to right</td>
        </tr>
        <tr>
            <td class="code-table-td" style="font-size: 12px;">13</td>
            <td class="code-table-td" style="font-size: 12px;">||</td>
            <td class="code-table-td" style="font-size: 12px;">Logical OR</td>
            <td class="code-table-td" style="font-size: 12px;">if( conditionA || conditionB ) ...</td>
            <td class="code-table-td" style="font-size: 12px;">left to right</td>
        </tr>
        <tr>
            <td class="code-table-td" style="font-size: 12px;">14</td>
            <td class="code-table-td" style="font-size: 12px;">? :</td>
            <td class="code-table-td" style="font-size: 12px;">Ternary conditional (if-then-else)</td>
            <td class="code-table-td" style="font-size: 12px;">int i = (a &gt; b) ? a : b;</td>
            <td class="code-table-td" style="font-size: 12px;">right to left</td>
        </tr>
        <tr>
            <td class="code-table-td" style="font-size: 12px;">15</td>
            <td class="code-table-td" style="font-size: 12px;">=<br>+=<br>-=<br>*=<br>/=<br>%=<br>&amp;=<br>^=<br>|=<br>&lt;&lt;=<br>&gt;&gt;=</td>
            <td class="code-table-td" style="font-size: 12px;">Assignment operator<br>Increment and assign<br>Decrement and assign<br>Multiply and assign<br>Divide and assign<br>Modulo and assign<br>Bitwise AND and assign<br>Bitwise exclusive OR and assign<br>Bitwise inclusive (normal) OR and assign<br>Bitwise shift left and assign<br>Bitwise shift right and assign</td>
            <td class="code-table-td" style="font-size: 12px;">int a = b;<br>a += 3;<br>b -= 4;<br>a *= 5;<br>a /= 2;<br>a %= 3;<br>flags &amp;= new_flags;<br>flags ^= new_flags;<br>flags |= new_flags;<br>flags &lt;&lt;= 2;<br>flags &gt;&gt;= 2;</td>
            <td class="code-table-td" style="font-size: 12px;">right to left</td>
        </tr>
        <tr>
            <td class="code-table-td" style="font-size: 12px;">16</td>
            <td class="code-table-td" style="font-size: 12px;">,</td>
            <td class="code-table-td" style="font-size: 12px;">Sequential evaluation operator</td>
            <td class="code-table-td" style="font-size: 12px;">for( i = 0, j = 0; i &lt; 10; i++, j++ ) ...</td>
            <td class="code-table-td" style="font-size: 12px;">left to right</td>
        </tr>
    </tbody>
</table>
</span></span><br class="Apple-interchange-newline"><img src ="http://www.cppblog.com/397993401/aggbug/123410.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/397993401/" target="_blank">付翔</a> 2010-08-14 10:07 <a href="http://www.cppblog.com/397993401/archive/2010/08/14/123410.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>map的一个用法</title><link>http://www.cppblog.com/397993401/archive/2010/06/26/118780.html</link><dc:creator>付翔</dc:creator><author>付翔</author><pubDate>Sat, 26 Jun 2010 09:08:00 GMT</pubDate><guid>http://www.cppblog.com/397993401/archive/2010/06/26/118780.html</guid><wfw:comment>http://www.cppblog.com/397993401/comments/118780.html</wfw:comment><comments>http://www.cppblog.com/397993401/archive/2010/06/26/118780.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/397993401/comments/commentRss/118780.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/397993401/services/trackbacks/118780.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">map 中嵌套map 使用 <br><br>#include</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">iostream</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">map</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;std;<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;ss,ss1;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;k,n,m,t</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;cin</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">n;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(n</span><span style="color: #000000;">--</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">,map</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">mm;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;可以嵌套map</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(t</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">k;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(k</span><span style="color: #000000;">--</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">ss1</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">ss</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">m;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mm[ss][ss1]</span><span style="color: #000000;">+=</span><span style="color: #000000;">m;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;map内部是默认排序的</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">,map</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">::iterator&nbsp;itr;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;::iterator&nbsp;itr1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(itr</span><span style="color: #000000;">=</span><span style="color: #000000;">mm.begin();itr</span><span style="color: #000000;">!=</span><span style="color: #000000;">mm.end();itr</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">(</span><span style="color: #000000;">*</span><span style="color: #000000;">itr).first</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(itr1</span><span style="color: #000000;">=</span><span style="color: #000000;">(</span><span style="color: #000000;">*</span><span style="color: #000000;">itr).second.begin();itr1</span><span style="color: #000000;">!=</span><span style="color: #000000;">(</span><span style="color: #000000;">*</span><span style="color: #000000;">itr).second.end();itr1</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;|----</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">(</span><span style="color: #000000;">*</span><span style="color: #000000;">itr1).first</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">'</span><span style="color: #000000;">(</span><span style="color: #000000;">'</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">(</span><span style="color: #000000;">*</span><span style="color: #000000;">itr1).second</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">'</span><span style="color: #000000;">)</span><span style="color: #000000;">'</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}</span></div>
<br><img src ="http://www.cppblog.com/397993401/aggbug/118780.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/397993401/" target="_blank">付翔</a> 2010-06-26 17:08 <a href="http://www.cppblog.com/397993401/archive/2010/06/26/118780.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有道资格赛 有道搜索框</title><link>http://www.cppblog.com/397993401/archive/2010/05/30/116713.html</link><dc:creator>付翔</dc:creator><author>付翔</author><pubDate>Sat, 29 May 2010 16:03:00 GMT</pubDate><guid>http://www.cppblog.com/397993401/archive/2010/05/30/116713.html</guid><wfw:comment>http://www.cppblog.com/397993401/comments/116713.html</wfw:comment><comments>http://www.cppblog.com/397993401/archive/2010/05/30/116713.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/397993401/comments/commentRss/116713.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/397993401/services/trackbacks/116713.html</trackback:ping><description><![CDATA[<div id="problemPageTitleDescrip" style="border: 1px solid #d0ddf9; margin: 0px; padding: 0px; height: 39px; background-image: url(http://poj.youdao.com/styles/images/section_nav_background.png); background-attachment: scroll; background-color: transparent; background-position: 0px 99%;">昨天断网 博客没有写全 呵呵 <br>
<div id="bottomMenu" style="margin: 0px; padding: 9px 16px 0px; overflow: hidden; font-size: 14px;">
<ul style="margin: 0pt; padding: 0pt; list-style-image: none; list-style-position: outside; list-style-type: none;">
    <li style="margin: 0pt 8px 0pt 0pt; padding: 0pt; list-style-type: none; float: left; line-height: 24px;"><a href="http://poj.youdao.com/nanti1/B/" style="border-style: solid; border-color: #9b898e #9b898e black; border-width: 1px; padding: 4px 10px 0px; text-decoration: none; color: #4ca6cf; font-weight: normal; outline-style: none; display: block;">查看</a></li>
    <li style="margin: 0pt 8px 0pt 0pt; padding: 0pt; list-style-type: none; float: left; line-height: 24px;"><a href="http://poj.youdao.com/nanti1/B/submit/" style="border-style: solid; border-color: #9b898e #9b898e black; border-width: 1px; padding: 4px 10px 0px; text-decoration: none; color: #4ca6cf; font-weight: normal; outline-style: none; display: block;">提交</a></li>
    <li style="margin: 0pt 8px 0pt 0pt; padding: 0pt; list-style-type: none; float: left; line-height: 24px;"><a href="http://poj.youdao.com/nanti1/B/statistics/" style="border-style: solid; border-color: #9b898e #9b898e black; border-width: 1px; padding: 4px 10px 0px; text-decoration: none; color: #686868; font-weight: normal; outline-style: none; display: block;">统计</a></li>
    <li style="margin: 0pt 8px 0pt 0pt; padding: 0pt; list-style-type: none; float: left; line-height: 24px;"><a href="http://poj.youdao.com/nanti1/clarify/B/" style="border-style: solid; border-color: #9b898e #9b898e black; border-width: 1px; padding: 4px 10px 0px; text-decoration: none; color: #686868; font-weight: normal; outline-style: none; display: block;">讨论</a></li>
</ul>
</div>
<br>
</div>
<div class="col-12" style="margin: 0px 10px; padding: 0px; float: left; display: inline; width: 700px;"><dl class="problem-params" style="margin: 0px; padding: 0px;"><dt style="margin: 0px; padding: 0px; color: white; display: inline; font-size: 12px; font-weight: bold; left: 613px; position: relative; top: -75px;">时间限制:&nbsp;</dt><dd style="margin: 0px; padding: 0px; color: white; display: inline; font-size: 12px; font-weight: bold; left: 613px; position: relative; top: -75px;">1000ms</dd>&nbsp;<dt style="margin: 0px; padding: 0px; color: white; display: inline; font-size: 12px; font-weight: bold; left: 613px; position: relative; top: -75px;">内存限制:&nbsp;</dt><dd style="margin: 0px; padding: 0px; color: white; display: inline; font-size: 12px; font-weight: bold; left: 613px; position: relative; top: -75px;">131072kB</dd></dl><dl class="problem-content" style="margin: 0px; padding: 0px;"><dt style="margin: 0px; padding: 0px; font-weight: bold; font-size: 16px;">描述</dt><dd style="margin: 12px 0px; padding: 0px;">在有道搜索框中，当输入一个或者多个字符时，搜索框会出现一定数量的提示，如下图所示：<br><img src="http://poj.youdao.com/groups/youdao/suggest.jpg" style="border-width: 0px;"><br><br>现在给你N个单词和一些查询，请输出提示结果，为了简化这个问题，只需要输出以查询词为前缀的并且按字典序排列的最前面的8个单词，如果符合要求的单词一个也没有请只输出当前查询词。</dd><dt style="margin: 0px; padding: 0px; font-weight: bold; font-size: 16px;">输入</dt><dd style="margin: 12px 0px; padding: 0px;">第一行是一个正整数N，表示词表中有N个单词。<br>接下来有N行，每行都有一个单词，注意词表中的单词可能有重复，请忽略掉重复单词。所有的单词都由小写字母组成。<br>接下来的一行有一个正整数Q，表示接下来有Q个查询。<br>接下来Q行，每行有一个单词，表示一个查询词，所有的查询词也都是由小写字母组成，并且所有的单词以及查询的长度都不超过20，且都不为空<br>其中：N&lt;=10000,Q&lt;=10000</dd><dt style="margin: 0px; padding: 0px; font-weight: bold; font-size: 16px;">输出</dt><dd style="margin: 12px 0px; padding: 0px;">对于每个查询，输出一行，按顺序输出该查询词的提示结果，用空格隔开。</dd><dt style="margin: 0px; padding: 0px; font-weight: bold; font-size: 16px;">样例输入</dt><dd style="margin: 12px 0px; padding: 0px;">
<pre style="border: 1px solid #dadada; margin: 0px; padding: 11px; overflow: auto; background-color: #f5f5f5; font-size: 12px; line-height: 1.3em;">10<br>a<br>ab<br>hello<br>that<br>those<br>dict<br>youdao<br>world<br>your<br>dictionary<br>6<br>bob<br>d<br>dict<br>dicti<br>yo<br>z<br></pre>
</dd><dt style="margin: 0px; padding: 0px; font-weight: bold; font-size: 16px;">样例输出</dt><dd style="margin: 12px 0px; padding: 0px;">
<pre style="border: 1px solid #dadada; margin: 0px; padding: 11px; overflow: auto; background-color: #f5f5f5; font-size: 12px; line-height: 1.3em;">bob<br>dict dictionary<br>dict dictionary<br>dictionary<br>youdao your<br>z</pre>
</dd></dl></div>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>用的是trie 树<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdio.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdlib.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">iostream</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">vector</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">map</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">queue</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">algorithm</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;std;<br><br></span><span style="color: #008000;">/*</span><span style="color: #008000;"><br>*<br></span><span style="color: #008000;">*/</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;node{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;next[</span><span style="color: #000000;">26</span><span style="color: #000000;">];</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;对于某一层而言&nbsp;&nbsp;next【i】&nbsp;中i就表示该层有的字符了&nbsp;next【i】的值指向他所指向的结构</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;flag;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;用来标记节点有没有被使用</span><span style="color: #008000;"><br></span><span style="color: #000000;">}trie[</span><span style="color: #000000;">210000</span><span style="color: #000000;">];<br></span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;str[</span><span style="color: #000000;">100</span><span style="color: #000000;">];<br></span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;ans[</span><span style="color: #000000;">100</span><span style="color: #000000;">];<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;totle</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;insert(){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;p</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;k</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(str[k]){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;v</span><span style="color: #000000;">=</span><span style="color: #000000;">str[k]</span><span style="color: #000000;">-</span><span style="color: #000000;">'</span><span style="color: #000000;">a</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(trie[p].next[v]</span><span style="color: #000000;">==-</span><span style="color: #000000;">1</span><span style="color: #000000;">)trie[p].next[v]</span><span style="color: #000000;">=</span><span style="color: #000000;">totle</span><span style="color: #000000;">++</span><span style="color: #000000;">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p</span><span style="color: #000000;">=</span><span style="color: #000000;">trie[p].next[v];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;trie[p].flag</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>}<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;cur;<br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;dfs(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;k,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;p)</span><span style="color: #008000;">//</span><span style="color: #008000;">此树在组织的时候&nbsp;就是按字典来排的&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(cur</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">8</span><span style="color: #000000;">)</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(trie[p].flag</span><span style="color: #000000;">!=-</span><span style="color: #000000;">1</span><span style="color: #000000;">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans[k]</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(cur</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">)printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%s</span><span style="color: #000000;">"</span><span style="color: #000000;">,ans);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;%s</span><span style="color: #000000;">"</span><span style="color: #000000;">,ans);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">26</span><span style="color: #000000;">;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(trie[p].next[i]</span><span style="color: #000000;">!=-</span><span style="color: #000000;">1</span><span style="color: #000000;">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans[k]</span><span style="color: #000000;">=</span><span style="color: #000000;">i</span><span style="color: #000000;">+</span><span style="color: #000000;">'</span><span style="color: #000000;">a</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfs(k</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">,trie[p].next[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br>}<br></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;find(){<br>&nbsp;&nbsp;&nbsp;&nbsp;cur</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;p</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">,k</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(str[k]</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">p</span><span style="color: #000000;">!=-</span><span style="color: #000000;">1</span><span style="color: #000000;">)</span><span style="color: #008000;">//</span><span style="color: #008000;">比如&nbsp;abc&nbsp;按根开始&nbsp;找到匹配&nbsp;c&nbsp;第三层的&nbsp;P&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p</span><span style="color: #000000;">=</span><span style="color: #000000;">trie[p].next[str[k]</span><span style="color: #000000;">-</span><span style="color: #000000;">'</span><span style="color: #000000;">a</span><span style="color: #000000;">'</span><span style="color: #000000;">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans[k]</span><span style="color: #000000;">=</span><span style="color: #000000;">str[k];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k</span><span style="color: #000000;">++</span><span style="color: #000000;">;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(p</span><span style="color: #000000;">==-</span><span style="color: #000000;">1</span><span style="color: #000000;">)</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;没有匹配的&nbsp;那么直接打印&nbsp;按题意来</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%s\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,str);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;dfs(k,p);</span><span style="color: #008000;">//</span><span style="color: #008000;">继续搜&nbsp;str[k]个字符</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>}<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()&nbsp;<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;freopen(</span><span style="color: #000000;">"</span><span style="color: #000000;">in.txt</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">r</span><span style="color: #000000;">"</span><span style="color: #000000;">,stdin);<br>&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;my;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n;<br>&nbsp;&nbsp;&nbsp;&nbsp;memset(trie,</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(trie));<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">n);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">n;i</span><span style="color: #000000;">++</span><span style="color: #000000;">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%s</span><span style="color: #000000;">"</span><span style="color: #000000;">,str);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;q;<br>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">q);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(q</span><span style="color: #000000;">--</span><span style="color: #000000;">){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%s</span><span style="color: #000000;">"</span><span style="color: #000000;">,str);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;find();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}</span></div>
<br><br>同时还看到一位牛人 用stl 写的 那个牛叉 也贴上了 以供自己参考 <br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;std;<br><br></span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;ts;<br><br></span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;issub(</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;c)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(ts.length()&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;c.length())&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;ts&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;c.substr(</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;ts.length());</span><span style="color: #008000;">//</span><span style="color: #008000;">c字串中要存在ts&nbsp;返回true</span><span style="color: #008000;"><br></span><span style="color: #000000;">}<br><br>typedef&nbsp;vector</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;DIC;<br><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;DIC&nbsp;dict;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;str;<br>&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;dsize,&nbsp;ssize;<br>&nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;dsize;<br>&nbsp;&nbsp;&nbsp;&nbsp;dict.reserve(dsize);</span><span style="color: #008000;">//</span><span style="color: #008000;">确保dict&nbsp;的容量至少为dsize</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(size_t&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;dsize;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;str;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dict.push_back(str);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;std::sort(dict.begin(),&nbsp;dict.end());</span><span style="color: #008000;">//</span><span style="color: #008000;">排序</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;dict.erase(std::unique(dict.begin(),&nbsp;dict.end()),&nbsp;dict.end());</span><span style="color: #008000;">//</span><span style="color: #008000;">去除重复的</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;ssize;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(size_t&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;ssize;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DIC::iterator&nbsp;iter;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;ts;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;found&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iter&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;lower_bound(dict.begin(),&nbsp;dict.end(),ts);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">此函数在msdn&nbsp;的解释为&nbsp;在dict&nbsp;中插入ts&nbsp;最小的位置并维持序列有序</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(size_t&nbsp;j</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;j</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">8</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;iter</span><span style="color: #000000;">!=</span><span style="color: #000000;">dict.end();</span><span style="color: #000000;">++</span><span style="color: #000000;">j,</span><span style="color: #000000;">++</span><span style="color: #000000;">iter)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(issub(</span><span style="color: #000000;">*</span><span style="color: #000000;">iter)){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000;">&lt;&lt;*</span><span style="color: #000000;">iter</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;found</span><span style="color: #000000;">=</span><span style="color: #0000ff;">true</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">found)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;ts;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}<br></span></div>
<br> <img src ="http://www.cppblog.com/397993401/aggbug/116713.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/397993401/" target="_blank">付翔</a> 2010-05-30 00:03 <a href="http://www.cppblog.com/397993401/archive/2010/05/30/116713.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdu 1027 next_permutation</title><link>http://www.cppblog.com/397993401/archive/2010/05/26/116426.html</link><dc:creator>付翔</dc:creator><author>付翔</author><pubDate>Wed, 26 May 2010 15:48:00 GMT</pubDate><guid>http://www.cppblog.com/397993401/archive/2010/05/26/116426.html</guid><wfw:comment>http://www.cppblog.com/397993401/comments/116426.html</wfw:comment><comments>http://www.cppblog.com/397993401/archive/2010/05/26/116426.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/397993401/comments/commentRss/116426.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/397993401/services/trackbacks/116426.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">next_permutation&nbsp;
求全排列的的下一个 <br><br>#include</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">iostream</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">algorithm</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">functional</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;std;<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;data[</span><span style="color: #000000;">1010</span><span style="color: #000000;">];<br><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n,m;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d%d</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">n,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">m)</span><span style="color: #000000;">!=</span><span style="color: #000000;">EOF)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;n;&nbsp;i&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(data,data</span><span style="color: #000000;">+</span><span style="color: #000000;">n);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m&nbsp;</span><span style="color: #000000;">--</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(m</span><span style="color: #000000;">--</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next_permutation(data,data</span><span style="color: #000000;">+</span><span style="color: #000000;">n);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">n;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(i&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">?</span><span style="color: #000000;">"</span><span style="color: #000000;">%d</span><span style="color: #000000;">"</span><span style="color: #000000;">:</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;%d</span><span style="color: #000000;">"</span><span style="color: #000000;">,data[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}</span></div>
<br><img src ="http://www.cppblog.com/397993401/aggbug/116426.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/397993401/" target="_blank">付翔</a> 2010-05-26 23:48 <a href="http://www.cppblog.com/397993401/archive/2010/05/26/116426.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>partial_sort  二  重载cmp（）运算符</title><link>http://www.cppblog.com/397993401/archive/2010/05/26/116352.html</link><dc:creator>付翔</dc:creator><author>付翔</author><pubDate>Wed, 26 May 2010 01:14:00 GMT</pubDate><guid>http://www.cppblog.com/397993401/archive/2010/05/26/116352.html</guid><wfw:comment>http://www.cppblog.com/397993401/comments/116352.html</wfw:comment><comments>http://www.cppblog.com/397993401/archive/2010/05/26/116352.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/397993401/comments/commentRss/116352.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/397993401/services/trackbacks/116352.html</trackback:ping><description><![CDATA[<br>呵呵 直接看代码 就可以知道 C++ 很好很强大 自己受C 的影响太大额 <br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;"><br>#include</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">iostream</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">algorithm</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">vector</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">functional</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><br></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;std;<br><br></span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;maxn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">3000</span><span style="color: #000000;">+</span><span style="color: #000000;">10</span><span style="color: #000000;">;<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;data[maxn];<br></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;node<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;x,y;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;name[</span><span style="color: #000000;">20</span><span style="color: #000000;">];<br>}&nbsp;re[maxn];<br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;bool&nbsp;cmp(const&nbsp;struct&nbsp;node&nbsp;a,const&nbsp;struct&nbsp;node&nbsp;b)<br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;{<br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(a).x&nbsp;-&nbsp;(b).x;<br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;}</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;cmp{<br></span><span style="color: #0000ff;">public</span><span style="color: #000000;">:<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">operator</span><span style="color: #000000;">()(</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;node&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">a,</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;node&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">b)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">return&nbsp;a.x&nbsp;&gt;&nbsp;b.x;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(strcmp(a.name,b.name)&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>};<br><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;N,M,i;<br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;vector&lt;int&nbsp;&gt;&nbsp;re(maxn*maxn/2);</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d%d</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">N,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">M)</span><span style="color: #000000;">!=</span><span style="color: #000000;">EOF)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;N;&nbsp;i&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">)</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;输入n个数字</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%s</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">re[i].name);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;partial_sort(re,re</span><span style="color: #000000;">+</span><span style="color: #000000;">M,re</span><span style="color: #000000;">+</span><span style="color: #000000;">M,cmp());</span><span style="color: #008000;">//</span><span style="color: #008000;">排出前M大个数字</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;M;&nbsp;i&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(i&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">re[i].name;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">re[i].name;<br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;M;&nbsp;i&nbsp;++)<br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i&nbsp;==0)&nbsp;cout&lt;&lt;re[i].x;<br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;cout&lt;&lt;"&nbsp;"&lt;&lt;re[i].x;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span></div>
<br><br><img src ="http://www.cppblog.com/397993401/aggbug/116352.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/397993401/" target="_blank">付翔</a> 2010-05-26 09:14 <a href="http://www.cppblog.com/397993401/archive/2010/05/26/116352.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>partial_sort </title><link>http://www.cppblog.com/397993401/archive/2010/05/25/116313.html</link><dc:creator>付翔</dc:creator><author>付翔</author><pubDate>Tue, 25 May 2010 11:00:00 GMT</pubDate><guid>http://www.cppblog.com/397993401/archive/2010/05/25/116313.html</guid><wfw:comment>http://www.cppblog.com/397993401/comments/116313.html</wfw:comment><comments>http://www.cppblog.com/397993401/archive/2010/05/25/116313.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/397993401/comments/commentRss/116313.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/397993401/services/trackbacks/116313.html</trackback:ping><description><![CDATA[再用stl 模板的时候 有时候我们只要前n 的排位就可以 而不需要全部的 用sort 就太浪费了 <br>结合之前在hdu 上做的 一道排序题 <a  href="http://www.cppblog.com/397993401/archive/2010/05/24/116261.html">http://www.cppblog.com/397993401/archive/2010/05/24/116261.html</a> 用sort 的代码<br><br>这里则需要46MS 相比先前的600多秒 显然是快了很多 。。。<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;"><br></span><span style="color: #000000;"></span><br><br></div>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;"><br>#include</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">iostream</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">algorithm</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">vector</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">functional</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><br></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;std;<br><br></span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;maxn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">3000</span><span style="color: #000000;">+</span><span style="color: #000000;">10</span><span style="color: #000000;">;<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;data[maxn];<br></span><span style="color: #008000;">//</span><span style="color: #008000;">int&nbsp;re[maxn*maxn/2];</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;cmp(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;a,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;b)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;a</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">b;<br>}<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;N,M,ans,i;<br>&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;re(maxn</span><span style="color: #000000;">*</span><span style="color: #000000;">maxn</span><span style="color: #000000;">/</span><span style="color: #000000;">2</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d%d</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">N,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">M)</span><span style="color: #000000;">!=</span><span style="color: #000000;">EOF)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;N;&nbsp;i&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">data[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">sort(data,data+N,cmp);</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;N;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;j&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">;j</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">N;j</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;re[ans]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;data[i]</span><span style="color: #000000;">+</span><span style="color: #000000;">data[j];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">re.p&nbsp;(data[i]+data[j]);</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">for(&nbsp;vector&lt;int&gt;::iterator&nbsp;&nbsp;it1&nbsp;=&nbsp;re.begin();&nbsp;&nbsp;it1&nbsp;!=&nbsp;re.end()&nbsp;;&nbsp;it1&nbsp;++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;*it1&lt;&lt;"&nbsp;";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">printf("\n");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">partial_sort(re.begin(),re.begin()+M,re.end());</span><span style="color: #008000;">//</span><span style="color: #008000;">因为申请了axn*maxn/2&nbsp;空间&nbsp;所以有很多是0值&nbsp;</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">&nbsp;这是导致排序后&nbsp;出现0&nbsp;值的原因</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;partial_sort(re.begin(),re.begin()</span><span style="color: #000000;">+</span><span style="color: #000000;">M,re.begin()</span><span style="color: #000000;">+</span><span style="color: #000000;">ans,cmp);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(&nbsp;vector</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">::iterator&nbsp;&nbsp;it&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;re.begin();&nbsp;it&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;re.begin()</span><span style="color: #000000;">+</span><span style="color: #000000;">M</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;it&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;re.end()&nbsp;;&nbsp;it&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(it&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">re.begin())&nbsp;cout</span><span style="color: #000000;">&lt;&lt;*</span><span style="color: #000000;">it;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;*</span><span style="color: #000000;">it;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;endl;// printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}<br></span></div>
<br> <img src ="http://www.cppblog.com/397993401/aggbug/116313.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/397993401/" target="_blank">付翔</a> 2010-05-25 19:00 <a href="http://www.cppblog.com/397993401/archive/2010/05/25/116313.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdu 1280</title><link>http://www.cppblog.com/397993401/archive/2010/05/24/116261.html</link><dc:creator>付翔</dc:creator><author>付翔</author><pubDate>Mon, 24 May 2010 15:52:00 GMT</pubDate><guid>http://www.cppblog.com/397993401/archive/2010/05/24/116261.html</guid><wfw:comment>http://www.cppblog.com/397993401/comments/116261.html</wfw:comment><comments>http://www.cppblog.com/397993401/archive/2010/05/24/116261.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/397993401/comments/commentRss/116261.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/397993401/services/trackbacks/116261.html</trackback:ping><description><![CDATA[简单题 这次用c++ stl 的模板做的 但是效率很低啊 600Ms 过的<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;"><br>#include</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">iostream</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">algorithm</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;std;<br><br></span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;maxn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">3000</span><span style="color: #000000;">+</span><span style="color: #000000;">10</span><span style="color: #000000;">;<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;data[maxn];<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;re[maxn</span><span style="color: #000000;">*</span><span style="color: #000000;">maxn</span><span style="color: #000000;">/</span><span style="color: #000000;">2</span><span style="color: #000000;">];<br></span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;cmp(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;a,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;b)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;a</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">b;<br>}<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;N,M,ans;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d%d</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">N,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">M)</span><span style="color: #000000;">!=</span><span style="color: #000000;">EOF)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;N;&nbsp;i&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">data[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">sort(data,data+N,cmp);</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;N;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;j&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">;j</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">N;j</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;re[ans</span><span style="color: #000000;">++</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;data[i]</span><span style="color: #000000;">+</span><span style="color: #000000;">data[j];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(re,re</span><span style="color: #000000;">+</span><span style="color: #000000;">N</span><span style="color: #000000;">*</span><span style="color: #000000;">(N</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">)</span><span style="color: #000000;">/</span><span style="color: #000000;">2</span><span style="color: #000000;">,cmp);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;M;&nbsp;i&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(i&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">?</span><span style="color: #000000;">"</span><span style="color: #000000;">%d</span><span style="color: #000000;">"</span><span style="color: #000000;">:</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;%d</span><span style="color: #000000;">"</span><span style="color: #000000;">,re[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}<br></span></div>
摘自 <a href="http://hi.baidu.com/topman3758/blog/item/859b18da6222623933fa1cd8.html">hi.baidu.com/topman3758/blog/item/859b18da6222623933fa1cd8.html</a>
<br><br>做ACM题的时候，排序是一种经常要用到的操作。如果每次都自己写个冒泡之类的O(n^2)排序，不但程序容易超时，而且浪费宝贵的比赛时间，还很有可能写错。STL里面有个sort函数，可以直接对数组排序，复杂度为n*log2(n)。使用这个函数，需要包含头文件。<br>&nbsp;&nbsp;&nbsp; 这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址，第二个参数是区间尾地址的下一地址。也就是说，排序的区间是[a,b)。简单来说，有一个数组int a[100]，要对从a[0]到a[99]的元素进行排序，只要写sort(a,a+100)就行了，默认的排序方式是升序。<br>&nbsp;&nbsp;&nbsp; 拿我出的&#8220;AC的策略&#8221;这题来说，需要对数组t的第0到len-1的元素排序，就写sort(t,t+len);<br>&nbsp;&nbsp;&nbsp; 对向量v排序也差不多，sort(v.begin(),v.end());<br>&nbsp;&nbsp;&nbsp; 排序的数据类型不局限于整数，只要是定义了小于运算的类型都可以，比如字符串类string。<br>&nbsp;&nbsp;&nbsp; 如果是没有定义小于运算的数据类型，或者想改变排序的顺序，就要用到第三参数——比较函数。比较函数是一个自己定义的函数，返回值是bool型，它规定了什么样的关系才是&#8220;小于&#8221;。想把刚才的整数数组按降序排列，可以先定义一个比较函数cmp<br>bool cmp(int a,int b)<br>{<br>&nbsp;&nbsp;&nbsp; return a&gt;b;<br>}<br>&nbsp;&nbsp; 排序的时候就写sort(a,a+100,cmp);<br><br>&nbsp;&nbsp; 假设自己定义了一个结构体node<br>struct node{<br>&nbsp;&nbsp;&nbsp; int a;<br>&nbsp;&nbsp;&nbsp; int b;<br>&nbsp;&nbsp;&nbsp; double c;<br>}<br>&nbsp;&nbsp; 有一个node类型的数组node arr[100]，想对它进行排序：先按a值升序排列，如果a值相同，再按b值降序排列，如果b还相同，就按c降序排列。就可以写这样一个比较函数：<br><br>以下是代码片段：<br>bool cmp(node x,node y)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp; if(x.a!=y.a) return x.a<br><br>if(x.b!=y.b) return x.b&gt;y.b;<br>&nbsp;&nbsp;&nbsp;&nbsp; return return x.c&gt;y.c;<br>}&nbsp; &nbsp;
<br><br><img src ="http://www.cppblog.com/397993401/aggbug/116261.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/397993401/" target="_blank">付翔</a> 2010-05-24 23:52 <a href="http://www.cppblog.com/397993401/archive/2010/05/24/116261.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>