﻿<?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>IT博客-尘封阁-随笔分类-玩转编程</title><link>http://www.cnitblog.com/cockerel/category/3077.html</link><description>多想相邀再次喝酒，待葡萄成熟透</description><language>zh-cn</language><lastBuildDate>Mon, 26 Sep 2011 06:39:58 GMT</lastBuildDate><pubDate>Mon, 26 Sep 2011 06:39:58 GMT</pubDate><ttl>60</ttl><item><title>[C++]早就该想到了～</title><link>http://www.cnitblog.com/cockerel/archive/2009/02/22/54798.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Sun, 22 Feb 2009 06:50:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2009/02/22/54798.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/54798.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2009/02/22/54798.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/54798.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/54798.html</trackback:ping><description><![CDATA[要重新建立一组条件反射了：<br>&nbsp;&nbsp;&nbsp; pure virtual method called（纯虚函数被调用）=&gt; object destroyed（对象已析构）=&gt; std::vector reallocated（std::vector发生了重新分配内存）<br>&nbsp;&nbsp;&nbsp; 思维还是太死板啊！其实早就应该想到了～<br><br>&nbsp;&nbsp;&nbsp; 事情呢，其实是这样子滴：<br>
<ul>
    <li>首先呢，我写了一门类似JavaScript的脚本语言，给它取了个华丽丽的名字叫做VScript；</li>
    <li>然后呢，这个脚本语言支持函数调用，可以调用C++编写的函数；</li>
    <li>调用函数的时候呢，不小心掉了一个参数；</li>
    <li>参数列表呢，是使用std::vector来传递的；</li>
    <li>于是呢，当C++函数体使用到没有传过来的参数时，就导致了std::vector的自动增长；</li>
    <li>这个自动增长呢，刚好又遇上了内存重新分配（std::vector每增长两倍重分配一次内存）</li>
    <li>所以呢，前面的参数就华丽丽地析构掉了～（啊！！！）</li>
    <li>最后呢，我使用前面的参数就会导致纯虚函数被调用啦～</li>
    <li>解决的办法呢，很简单：把std::vector换成std::deque就搞定啦～<br></li>
</ul>
<br>P.S.: 太奇怪的问题，问google，比问GDB要好。<br><br><br><img src ="http://www.cnitblog.com/cockerel/aggbug/54798.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2009-02-22 14:50 <a href="http://www.cnitblog.com/cockerel/archive/2009/02/22/54798.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在百度三个半月啦｜Jash rocks! Firefox 3.1 rocks! And I become a web developer!</title><link>http://www.cnitblog.com/cockerel/archive/2008/10/19/50391.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Sat, 18 Oct 2008 20:19:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2008/10/19/50391.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/50391.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2008/10/19/50391.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/50391.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/50391.html</trackback:ping><description><![CDATA[按：博主太懒，决定把四篇博客合成一篇，大家将就将就～<br /><br />     弹指之间，已经在百度里工作了三个半月了（不过实习），在这三个半月，我很幸运地迎来了百度里的"C++的春天“，可以用自己最喜欢的语言来写代码真是非常惬意的一件事～在这三个半月里，我写了很多稀奇古怪的C＋＋代码。比如说会在被抛出和接住里打log和打印栈的异常类体系啦；比如说能够保管一切C风格的资源和创造并托管一切C++对象的资源池啦；比如能够保存一切类型的指针并提供强类型检查的指针容器AnyPointer啦（后来发现与boost::Any暗合）；为C++类提供编译时和运行时的基类查找，从而加强C++的反射能力的元类啦；支持按事件冒泡的事件管理器啦；与Json等价的动态对象（被称为Var）树啦；定位Var的某个子孙结点的，相当于简单版的XPath，但支持子查询的VPath啦，等等。这些好玩的代码，我之前甚至没有想过可以在C++里实现，而它竟然真的被我实现了，呵呵～<br /><br />      不过，从下星期开始，我做后台C＋＋程序库的工作就要告一段落啦，接下来的一段时间里，我将主要做前端页面开发，html、javascript和CSS将成为我最亲密的三大语言。不过，目前来说，我对前端开发来说基本上就是一个小白，书是看过一些，不过实战经验基本上就是一片空白。any way，正如金庸金大侠所说，我们这些南蛮子最大的好处就是有种“顶硬上，几大就几大啦”的精神，所以一定能搞定的～再说了，我身边还有个微软MVP和puddingpedia做智囊团呢～此时，又想起<a target="_blank" href="http://www.youtube.com/watch?v=Wftxoo77toA">Ballmar（鲍尔默）老兄的经典大吼</a>"Web Developer! Web Developer!! Web DEVELOPER!!! "，顿觉精神百倍，气聚丹田，简直就是万人敌啊～<br /><br />      工欲善其事，必先利其器。于是，今天就动手去到处找好用的IDE。（写C++的话，我基本上有vim就够了，前端就不行了，记不住一大堆的dom属性、CSS属性什么的）刚好发现自己有dreamweaver 2004的安装碟，一试之下发现有点过时，而且只能对HTML做代码提示，javascript就无能为力了。dreamweaver CS3好像也没什么变化。又装了一下Visual Studio 2005，却可耻的失败了，而且那动辄2、3G的硬盘占用也实在太令我心疼了。最后再试了一下<a target="_blank" href="http://www.aptana.com/">Aptana</a>，这个IDE是在eclipse上改过来的，对html和javascript都能够有较好的提示，而且因为是java写的，自然windows与linux上的版本都有，爽啊！就用它了～<br /><br />      除了IDE外，我想我还需要一些浏览器上的调试器来帮助一下，Firefox上的两大著名开发工具扩展－－<a target="_blank" href="https://addons.mozilla.org/zh-CN/firefox/addon/1843">firebug</a>和<a target="_blank" href="https://addons.mozilla.org/zh-CN/firefox/addon/60">webdeveloper toolbar</a>自然是早就装上了的。不过它们都只能在Firefox上用，如果要调其它浏览器就没用了。关于IE听说过<a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?familyid=e59c3964-672d-4511-bb3e-2d5e1db91038&amp;displaylang=en">IE devloper toolbar</a>，看看如果需要也打算装一个来玩玩。今天还通过一个非常偶然的机会了解到了一个叫做<a target="_blank" href="http://www.billyreisinger.com/jash/">Jash</a>的工具，非常好玩，它提供与个类似python的交互式javascript命令行界面，可以把javascript对象或dom dump出来，而最重要的是它只是一个js脚本，因此它可以在任何的浏览器上运行。<br /><br />      不过，把一个javascript的大对象（如document之类的）dump成字符串是一件很耗CPU的操作，Firefox 3.0的速度直接让我受不了（虽然平时也不觉得太慢，不过我很不幸地用<a target="_blank" href="http://www.google.com/chrome">google chrome</a>来对比一下，就……），幸好此时想起那个<a target="_blank" href="http://www.mozilla.com/en-US/firefox/all-beta.html">Firefox3.1的第一个beta版</a>发布了，赶紧去下一个来玩玩，用了trace monkey引擎的Firefox3.1真是无敌快啊，能否像广告中说的比google chrome还快30％我不知道，但至少是同一数量级的，Firefox的粉丝们赶快去升级吧～<br /><br />      <br /><br />     <br /><img src ="http://www.cnitblog.com/cockerel/aggbug/50391.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2008-10-19 04:19 <a href="http://www.cnitblog.com/cockerel/archive/2008/10/19/50391.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程序员幽默[原创]</title><link>http://www.cnitblog.com/cockerel/archive/2008/03/17/41036.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Mon, 17 Mar 2008 07:39:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2008/03/17/41036.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/41036.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2008/03/17/41036.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/41036.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/41036.html</trackback:ping><description><![CDATA[有一天，C++程序员和C程序员一起吃饭。<br />C++程序员和C程序员一起吃饭。<br />C++程序员：我夹了个鱼头给你，可你怎么老在鱼头后面夹来夹去？<br />C程序员：  我想吃鱼腩，它不是总是跟在鱼头后面的吗？<br /><br />又有一天，C++程序员和C程序员又一起吃饭。<br />C++程序员：请我吃饭吧<br />C程序员：好啊<br />C++程序员：怎么都是饭没有菜的？<br />C程序员：你不是叫我请你吃饭吗？<br /><br />P.S.:如果大家还记得并且不理解我这个鱼头鱼身的故事的话，这里就有一个“很鱼头”的C实现~~~ http://www.cppblog.com/johndragon/archive/2008/04/11/46817.html<br /><img src ="http://www.cnitblog.com/cockerel/aggbug/41036.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2008-03-17 15:39 <a href="http://www.cnitblog.com/cockerel/archive/2008/03/17/41036.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C风格输出格式化字符串语法[转]</title><link>http://www.cnitblog.com/cockerel/archive/2007/12/07/37435.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Thu, 06 Dec 2007 17:10:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2007/12/07/37435.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/37435.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2007/12/07/37435.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/37435.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/37435.html</trackback:ping><description><![CDATA[<h4 class="sol">按：寻寻觅觅了许久，终于找到了一个比较详细的版本，来源是sun公司的文档，应该都比较权威。原文见<a href="http://docs.sun.com/app/docs/doc/806-7023/6jfu564ks?l=zh_TW&amp;a=view">http://docs.sun.com/app/docs/doc/806-7023/6jfu564ks?l=zh_TW&amp;a=view</a></h4>
<h4 class="sol">NAME</h4>
<ul>printf, sprintf, snprintf, printerr- print formatted output</ul>
    <a name="SYNOPSIS"></a>
    <h4 class="sol">SYNOPSIS</h4>
    <ul>
        <p>
        </p>
        <pre>$(NUCLEUS_DIR)/lib/embedded/libebd.s.a<br>#include &lt;stdio.h&gt;</pre>
        int
        printf(const char *
        <var>format</var>, ... /* args */);<br>
        int
        sprintf(char *
        <var>s</var>, const char *
        <var>format</var>, ... /* args */);<br>
        int
        snprintf(char *
        <var>s</var>, size_t
        <var>size</var>, const char *
        <var>format</var>, ... /* args */);<br>
        int
        printerr(const char *
        <var>format</var>, ... /* args */);<br></ul>
        <a name="API RESTRICTIONS"></a>
        <h4 class="sol">API RESTRICTIONS</h4>
        <ul>
            <p>The function or functions documented here may not be used safely in
            all application contexts with all APIs provided in the ChorusOS 5.0
            product.</p>
            <p>See
            <a href="http://docs.sun.com/app/docs/doc/816-0349/6m6rfpka9?l=zh_TW&amp;a=view">API(5FEA)</a>
            for details.</p>
        </ul>
        <a name="DESCRIPTION"></a>
        <h4 class="sol">DESCRIPTION</h4>
        <ul>
            <p>The
            <kbd><strong>printf()</strong></kbd>
            function sends output to the standard
            output channel, which is system defined. The
            <kbd><strong>printerr()</strong></kbd>
            function sends output to the standard error channel, which is system-defined.
            The
            <kbd><strong>sprintf()</strong></kbd>
            function sends output, followed by the null
            character (
            <tt>\\0</tt>
            ), in consecutive bytes starting at *
            <var>s</var>
            ; it is the user's responsibility to ensure that enough storage
            is available. Each function returns the number of characters transmitted (not
            including the
            <tt>\\0</tt>
            in the case of
            <kbd><strong>sprintf()</strong></kbd>
            ),
            or a negative value if an output error was encountered.</p>
            <p>The
            <kbd><strong>snprintf()</strong></kbd>
            function writes at most
            <var>size-1</var>
            of the characters printed to the output string (the
            <var>size</var>
            character then gets the terminating zero). If the return
            value is greater than or equal to the
            <var>size</var>
            argument,
            the string was too short and some of the printed characters have been discarded.</p>
            <p>Each of these functions converts, formats, and prints its
            <var>arg</var>
            s under control of the
            <var>format</var>
            .</p>
            <p>The format has the general form:</p>
            <p>
            </p>
            <pre>%[flags] [width] [.precision] [{h | l | ll | q | L }]conversion_code</pre>
            <p>This
            <var>format</var>
            is a character string that contains
            two types of objects: plain characters, which are simply copied to the output
            channel, and conversion specifications, each of which results in obtaining
            zero or more
            <var>arg</var>
            s. The results are undefined if there
            are insufficient
            <var>arg</var>
            s for the format. If the format
            is exhausted while
            <var>arg</var>
            s remain, the excess
            <var>arg</var>
            s are simply ignored.</p>
            <a name="Flags"></a>
            <h4 class="sol">Flags</h4>
            <ul>
                <p>The flag characters and their meanings are:</p>
                <p>
                </p>
                <dl><dt>
                <tt>-</tt>
                </dt><dd>
                <p>The result of the conversion will be left-justified
                within the field.</p>
                </dd><dt>
                <tt>+</tt>
                </dt><dd>
                <p>The result
                of a signed conversion will always begin with a sign (
                <tt>+</tt>
                or
                <tt>-</tt>
                ).</p>
                </dd><dt>
                <tt>blank</tt>
                </dt><dd>
                <p>If the
                first character of a signed conversion is not a sign, a blank will be prefixed
                to the result. This implies that if the blank and
                <tt>+</tt>
                flags
                both appear, the blank flag will be ignored.</p>
                </dd><dt>
                <tt>#</tt>
                </dt><dd>
                <p>This flag
                specifies that the value is to be converted to an ``alternate form.''
                For
                <tt>c</tt>
                ,
                <tt>d</tt>
                ,
                <tt>s</tt>
                , and
                <tt>u</tt>
                conversions, the flag has no effect. For
                <tt>o</tt>
                conversion, it increases the precision to force the first digit of the result
                to be a zero. For
                <tt>x</tt>
                or
                <tt>X</tt>
                conversion,
                a non-zero result will have
                <tt>0x</tt>
                or
                <tt>0X</tt>
                prefixed to it. For
                <tt>e</tt>
                ,
                <tt>E</tt>
                ,
                <tt>f</tt>
                ,
                <tt>g</tt>
                , and
                <tt>G</tt>
                conversions, the
                result will always contain a decimal point, even if no digits follow the point
                (normally, a decimal point appears in the result of these conversions only
                if a digit follows it). For
                <tt>g</tt>
                and
                <tt>G</tt>
                conversions, trailing zeroes will not be removed from the result (which they
                normally are).</p>
                </dd></dl></ul>
                <a name="Width"></a>
                <h4 class="sol">Width</h4>
                <ul>
                    <p>The
                    <var>width</var>
                    field is an optional decimal digit
                    string specifying a minimum  field width. If the converted value has fewer
                    characters than the field width, it  will be padded on the left (or right,
                    if the left-adjustment flag `-', described above, has been set) to the  field
                    width. If the field width for an
                    <tt>s</tt>
                    conversion is preceded
                    by a
                    <tt>0</tt>
                    , the string is right adjusted with zero-padding
                    on the left.</p>
                    <p>The
                    <var>width</var>
                    field may be indicated by an asterisk
                    (
                    <tt>*</tt>
                    ) instead of a digit string. In this case, an integer
                    <var>arg</var>
                    supplies the field width or precision. The
                    <var>arg</var>
                    that is actually converted is not fetched until the conversion
                    letter is seen, so the
                    <var>arg</var>
                    s specifying field width
                    or precision must appear before the
                    <var>arg</var>
                    (if any) to
                    be converted.</p>
                </ul>
                <a name="Precision"></a>
                <h4 class="sol">Precision</h4>
                <ul>
                    <p>The
                    <var>precision</var>
                    field is an optional field that
                    gives the minimum number of digits to appear for the
                    <tt>d</tt>
                    ,
                    <tt>o</tt>
                    ,
                    <tt>u</tt>
                    ,
                    <tt>x</tt>
                    , or
                    <tt>X</tt>
                    conversions, the number of digits to appear after the decimal point for the
                    <tt>e</tt>
                    and
                    <tt>f</tt>
                    conversions, the maximum number of significant
                    digits for the
                    <tt>g</tt>
                    conversion, or the maximum number of characters
                    to be printed from a string in an
                    <tt>s</tt>
                    conversion. The precision
                    takes the form of a dot (
                    <tt>.</tt>
                    ) followed by a decimal digit
                    string. A null digit string is treated as zero.</p>
                    <p>As for the
                    <var>width</var>
                    field, the
                    <var>precision</var>
                    field may be indicated by an asterisk (*). The meaning is the
                    same as in the width field above.</p>
                </ul>
                <a name="Argument Size"></a>
                <h4 class="sol">Argument Size</h4>
                <ul>
                    <p>An optional
                    <tt>h</tt>
                    ,
                    <tt>l</tt>
                    (ell),
                    <tt>q</tt>
                    , or
                    <tt>ll</tt>
                    (ell ell) specifies the expected size
                    of the actual argument for the
                    <tt>d</tt>
                    ,
                    <tt>i</tt>
                    ,
                    <tt>o</tt>
                    ,
                    <tt>u</tt>
                    ,
                    <tt>x</tt>
                    or
                    <tt>X</tt>
                    conversion codes. Ignored if specified before any other conversion code.</p>
                    <p>Their meanings are:</p>
                    <p>
                    </p>
                    <dl><dt>
                    <tt>h</tt>
                    </dt><dd>
                    <p>The argument is a short integer.</p>
                    </dd><dt>
                    <tt>l</tt>
                    </dt><dd>
                    <p>The argument
                    is a long integer.</p>
                    </dd><dt>
                    <tt>q</tt>
                    </dt><dd>
                    <p>The argument
                    is a quad integer.</p>
                    </dd><dt>
                    <tt>ll</tt>
                    </dt><dd>
                    <p>The argument
                    is a long long integer.</p>
                    </dd></dl>
                    <p>An optional
                    <tt>l</tt>
                    (ell), or
                    <tt>L</tt>
                    specifies
                    the expected size  of the actual argument for the
                    <tt>e</tt>
                    ,
                    <tt>f</tt>
                    , or
                    <tt>g</tt>
                    conversion codes.</p>
                    <p>They are ignored if specified before any other conversion code.</p>
                    <p>Their meanings are:</p>
                    <p>
                    </p>
                    <dl><dt>
                    <tt>l</tt>
                    </dt><dd>
                    <p>The argument is a double.</p>
                    </dd><dt>
                    <tt>L</tt>
                    </dt><dd>
                    <p>   The argument
                    is a long double.</p>
                    </dd></dl></ul>
                    <a name="Conversion Codes"></a>
                    <h4 class="sol">Conversion Codes</h4>
                    <ul>
                        <p>The conversion characters and their meanings are:</p>
                        <p>
                        </p>
                        <dl><dt>
                        <tt>d</tt>
                        ,
                        <tt>i</tt>
                        ,
                        <tt>o</tt>
                        ,
                        <tt>u</tt>
                        ,
                        <tt>x</tt>
                        ,
                        <tt>X</tt>
                        </dt><dd>
                        <p>The integer
                        <var>arg</var>
                        is
                        converted to signed decimal (
                        <tt>d</tt>
                        or i
                        <tt>),</tt>
                        unsigned octal (
                        <tt>o</tt>
                        ), decimal (
                        <tt>u</tt>
                        ), or
                        hexadecimal notation (
                        <tt>x</tt>
                        and
                        <tt>X</tt>
                        ), respectively.
                        The letters
                        <tt>abcdef</tt>
                        are used for
                        <tt>x</tt>
                        conversion
                        and the letters
                        <tt>ABCDEF</tt>
                        for
                        <tt>X</tt>
                        conversion. The precision specifies the minimum number of digits
                        to appear; if the value being converted can be represented in fewer digits,
                        it will be expanded with leading zeroes. (For compatibility with older versions,
                        padding with leading zeroes may alternatively be specified by prepending a
                        zero to the field width. This does not imply an octal value for the field
                        width.) The default precision is 1. The result of converting a zero value
                        with a precision of zero is a null string.</p>
                        </dd><dt>
                        <tt>D,O,U</tt>
                        </dt><dd>
                        <p>These notations
                        are  semantically  equivalent  to, respectively,
                        <tt>ld</tt>
                        ,
                        <tt>lo</tt>
                        ,
                        <tt>lu</tt>
                        .</p>
                        </dd><dt>
                        <tt>n</tt>
                        </dt><dd>
                        <p>The arg should
                        be a pointer  to  an  integer  into which is written the number  of  bytes
                        written  to  the standard output I/O stream so far by this call. No argument
                        is converted.</p>
                        </dd><dt>
                        <tt>p</tt>
                        </dt><dd>
                        <p>The arg should
                        be a pointer to void. The value  of the pointer is converted to  a  set  of
                        sequences  of printable characters.</p>
                        </dd><dt>
                        <tt>f</tt>
                        </dt><dd>
                        <p>The float
                        or double
                        <var>arg</var>
                        is converted to decimal notation in the
                        style ``[
                        <tt>-</tt>
                        ]ddd
                        <tt>.</tt>
                        ddd,'' where the
                        number of digits after the decimal point is equal to the precision specification.
                        If the precision is not specified, six digits are output; if the precision
                        is explicitly 0, no decimal point appears.</p>
                        </dd><dt>
                        <tt>e</tt>
                        ,
                        <tt>E</tt>
                        </dt><dd>
                        <p>The float or double
                        <var>arg</var>
                        is converted in the style
                        ``[
                        <tt>-</tt>
                        ]d
                        <tt>.</tt>
                        ddd
                        <tt>e+-</tt>
                        dd,''
                        where there is one digit before the decimal point and the number of digits
                        after it is equal to the precision. If  the precision is not specified, six
                        digits are produced; if the precision is explicitly 0, no decimal point appears.
                        The
                        <tt>E</tt>
                        format code will produce a number with
                        <tt>E</tt>
                        instead of
                        <tt>e</tt>
                        introducing the exponent. The
                        exponent always contains at least two digits.</p>
                        </dd><dt>
                        <tt>g</tt>
                        ,
                        <tt>G</tt>
                        </dt><dd>
                        <p>The float or double
                        <var>arg</var>
                        is printed in style
                        <tt>f</tt>
                        or
                        <tt>e</tt>
                        (or in style
                        <tt>E</tt>
                        in the
                        case of a
                        <tt>G</tt>
                        format code), with the precision specifying
                        the number of significant digits. The style used depends on the value converted:
                        style
                        <tt>e</tt>
                        will be used only if the exponent resulting from
                        the conversion is less than -4 or greater than the precision. Trailing
                        zeroes are removed from the result; a decimal point appears only if it is
                        followed by a digit.</p>
                        </dd><dt>
                        <tt>c</tt>
                        </dt><dd>
                        <p>The character
                        <var>arg</var>
                        is printed.</p>
                        </dd><dt>
                        <tt>s</tt>
                        </dt><dd>
                        <p>The
                        <var>arg</var>
                        is taken to be a string (character pointer) and characters
                        from the string are printed until a null character (
                        <tt>\\0</tt>
                        )
                        is encountered, or until the number of characters indicated by the precision
                        specification is reached. If the precision is not specified, it is assumed
                        to be infinite and all characters up to the first null character are printed.
                        A
                        <tt>NULL</tt>
                        value for
                        <var>arg</var>
                        will yield
                        undefined results.</p>
                        </dd><dt>
                        <tt>%</tt>
                        </dt><dd>
                        <p>Print a
                        <tt>%</tt>
                        ; no argument is converted.</p>
                        </dd></dl>
                        <p>A non-existent or small field width will never cause truncation of a
                        field; if the result of a conversion is wider than the field width, the field
                        is simply expanded to contain the conversion result. Characters generated
                        by
                        <kbd><strong>printf()</strong></kbd>
                        are printed in the same way as if
                        <kbd>putchar</kbd>
                        (3STDC) had been called.</p>
                        <p>Each conversion specification is introduced by the character
                        <tt>%</tt>
                        . After the
                        <tt>%</tt>
                        , the following appear in sequence:</p>
                        <ul>
                            <li>
                            <p>Zero or more
                            <var>flags</var>
                            , which modify the
                            meaning of the conversion specification.</p>
                            </li>
                            <li>
                            <p>An optional decimal digit string specifying a minimum
                            <var>field width</var>
                            . If the converted value has fewer characters than
                            the field width, it will be padded on the left (or right, if the left-adjustment
                            flag `
                            <var>&amp;ndash</var>
                            ;', described below, has been set)
                            to the field width. If the field width for an s conversion is preceded by
                            a 0, the string is right-adjusted with zero-padding on the left.</p>
                            </li>
                            <li>
                            <p>An optional
                            <tt>l</tt>
                            (ell) specifying that a following
                            <tt>d</tt>
                            ,
                            <tt>o</tt>
                            ,
                            <tt>u</tt>
                            ,
                            <tt>x</tt>
                            ,
                            or
                            <tt>X</tt>
                            conversion character applies to a long integer
                            <var>arg</var>
                            . An
                            <tt>l</tt>
                            before any other conversion character
                            is ignored.</p>
                            </li>
                            <li>
                            <p>A character that indicates the type of conversion to be applied.</p>
                            </li>
                        </ul>
                    </ul>
                </ul>
                <a name="EXAMPLES"></a>
                <h4 class="sol">EXAMPLES</h4>
                <ul>
                    <p>To print a date and time in the form ``Sunday, July 3, 10:02,'' where
                    <var>weekday</var>
                    and
                    <var>month</var>
                    are pointers to null-terminated
                    strings:</p>
                    <p>
                    </p>
                    <table border="1" cellpadding="1" width="100%">
                        <tbody>
                            <tr>
                                <td nowrap="1">
                                <br>
                                <pre><samp>printf("%s, %s %d, %d<tt>:</tt>%<tt>.</tt>2d", weekday, month, day, hour, min);</samp>
                                </pre>
                                </td>
                            </tr>
                        </tbody>
                    </table>
                </ul>
                <a name="ATTRIBUTES"></a>
                <h4 class="sol">ATTRIBUTES</h4>
                <ul>
                    <p>See
                    <strong>attributes(5)</strong>
                    for descriptions of the following attributes:</p>
                    <table border="1" cellpadding="10" cellspacing="0" width="100%">
                        <thead>
                            <tr>
                                <th scope="col" align="center" valign="top">ATTRIBUTE TYPE</th><th scope="col" align="center" valign="top">ATTRIBUTE VALUE</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td align="left" valign="top">Interface Stability</td>
                                <td align="left" valign="top">Evolving</td>
                            </tr>
                        </tbody>
                    </table>
                    <p>
                    </p>
                    <p>
                    </p>
                </ul>
                <a name="SEE ALSO"></a><img src ="http://www.cnitblog.com/cockerel/aggbug/37435.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2007-12-07 01:10 <a href="http://www.cnitblog.com/cockerel/archive/2007/12/07/37435.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C风格输入格式化字符串语法[转]</title><link>http://www.cnitblog.com/cockerel/archive/2007/12/07/37434.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Thu, 06 Dec 2007 17:05:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2007/12/07/37434.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/37434.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2007/12/07/37434.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/37434.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/37434.html</trackback:ping><description><![CDATA[<h4 class="sol">按：寻寻觅觅了许久，终于找到了一个比较详细的版本，来源是sun公司的文档，应该都比较权威。原文见<a  href="http://docs.sun.com/app/docs/doc/806-7023/6jfu564ls?l=zh_TW&amp;a=view">http://docs.sun.com/app/docs/doc/806-7023/6jfu564ls?l=zh_TW&amp;a=view</a></h4>
<br><br>
<h4 class="sol">NAME</h4>
<ul>scanf, sscanf- convert formatted input</ul>
    <a name="SYNOPSIS"></a>
    <h4 class="sol">SYNOPSIS</h4>
    <ul>
        <p>
        </p>
        <pre>$(NUCLEUS_DIR)/lib/embedded/libebd.s.a<br>#include &lt;stdio.h&gt;</pre>
        int
        scanf(const char *
        <var>format</var>, ... );<br>
        int
        sscanf(const char *
        <var>s</var>, const char *
        <var>format</var>, ... );<br></ul>
        <a name="API RESTRICTIONS"></a>
        <h4 class="sol">API RESTRICTIONS</h4>
        <ul>
            <p>The function or functions documented here may not be used safely in
            all application contexts with all APIs provided in the ChorusOS 5.0
            product.</p>
            <p>See
            <a href="http://docs.sun.com/app/docs/doc/816-0349/6m6rfpka9?l=zh_TW&amp;a=view">API(5FEA)</a>
            for details.</p>
        </ul>
        <a name="DESCRIPTION"></a>
        <h4 class="sol">DESCRIPTION</h4>
        <ul>
            <p>The
            <kbd><strong>scanf()</strong></kbd>
            function reads from the standard input
            channel, which is operating system dependent. The
            <kbd><strong>sscanf()</strong></kbd>
            function reads from the character string
            <var>s</var>
            . Each function
            reads characters, interprets them according to a format, and stores the results
            in its arguments. The functions require, as arguments, a control string
            <var>format</var>
            described below, and a set of pointer arguments indicating
            where the converted input should be stored.</p>
            <p>The control string usually contains conversion specifications, which
            are used to direct interpretation of input sequences. The control string may
            contain:</p>
            <p>
            </p>
            <ol type="1">
                <li>
                <p>White-space characters (blanks, tabs, new-lines, or form-feeds)
                which, except in two cases described below, cause input to be read up to the
                next non-white-space character.</p>
                </li>
                <li>
                <p>An ordinary character (not
                <tt>%</tt>
                ), which must
                match the next character of the input channel.</p>
                </li>
                <li>
                <p>Conversion specifications, consisting of the character
                <tt>%</tt>
                , an optional assignment suppression character
                <tt>*</tt>
                ,
                an optional numerical maximum field width, an optional
                <tt>l</tt>
                (ell) or
                <tt>h</tt>
                indicating the size of the receiving variable,
                and a conversion code.</p>
                </li>
            </ol>
            <p>The format of the conversion specification has  the  general form:</p>
            <p>
            </p>
            <pre>%[*] [width] [{h | l | ll | q | L}]conversion_code</pre>
            <p>A conversion specification directs the conversion of the next input
            field; the result is placed in the variable pointed to by the corresponding
            argument, unless assignment suppression was indicated using
            <tt>*</tt>
            .
            The suppression of assignment allows you to define an input field to be ignored.
            An input field is defined as a string of non-space characters; it extends
            to the next inappropriate character or until the field width, if specified,
            is exhausted. For all descriptors except ``['' and ``c'', white space leading
            an input field is ignored.</p>
            <a name="Argument Size"></a>
            <h4 class="sol">Argument Size</h4>
            <ul>
                <p>An optional
                <tt>h</tt>
                ,
                <tt>l</tt>
                (ell),
                <tt>q</tt>
                , and
                <tt>ll</tt>
                (ell ell) specifies the expected size
                of the actual argument for the
                <tt>d</tt>
                ,
                <tt>i</tt>
                ,
                <tt>o</tt>
                ,
                <tt>u</tt>
                , or
                <tt>x</tt>
                conversion
                codes. They are ignored if specified before  any  other conversion code.</p>
                <p>Their meanings are:</p>
                <p>
                </p>
                <dl><dt>
                <tt>h</tt>
                </dt><dd>
                <p>The argument is a pointer to a short integer.</p>
                </dd><dt>
                <tt>l</tt>
                </dt><dd>
                <p>The argument
                is a pointer to a long integer.</p>
                </dd><dt>
                <tt>q</tt>
                </dt><dd>
                <p>The argument
                is a pointer to a quad integer.</p>
                </dd><dt>
                <tt>ll</tt>
                </dt><dd>
                <p>The argument
                is a pointer to a long long integer.</p>
                </dd></dl>
                <p>An optional
                <tt>l</tt>
                (ell), or
                <tt>L</tt>
                specifies
                the expected size  of  the actual argument for  the
                <tt>e</tt>
                ,
                <tt>f</tt>
                ,  or
                <tt>g</tt>
                conversion  codes.</p>
                <p>They are ignored if specified before any other conversion code.</p>
                <p>Their meanings are:</p>
                <p>
                </p>
                <dl><dt>
                <tt>l</tt>
                </dt><dd>
                <p>The argument is a pointer to a double.</p>
                </dd><dt>
                <tt>L</tt>
                </dt><dd>
                <p>The argument
                is a pointer to a long double.</p>
                </dd></dl></ul>
                <a name="Conversion Codes"></a>
                <h4 class="sol">Conversion Codes</h4>
                <ul>
                    <p>The conversion code indicates the interpretation of the input field;
                    the corresponding pointer argument must be of a restricted type. For a suppressed
                    field, no pointer argument is given. The following conversion codes are legal:</p>
                    <p>
                    </p>
                    <dl><dt>
                    <tt>%</tt>
                    </dt><dd>
                    <p>A single
                    <tt>%</tt>
                    is expected in the input
                    at this point; no assignment is performed.</p>
                    </dd><dt>
                    <tt>d</tt>
                    </dt><dd>
                    <p>A decimal
                    integer is expected; the corresponding argument should be an integer pointer.</p>
                    </dd><dt>
                    <tt>u</tt>
                    </dt><dd>
                    <p>An unsigned
                    decimal integer is expected; the corresponding argument should be an unsigned
                    integer pointer.</p>
                    </dd><dt>
                    <tt>o</tt>
                    </dt><dd>
                    <p>An octal integer
                    is expected; the corresponding argument should be an integer pointer.</p>
                    </dd><dt>
                    <tt>x</tt>
                    </dt><dd>
                    <p>A hexadecimal
                    integer is expected; the corresponding argument should be an integer pointer.</p>
                    </dd><dt>
                    <tt>p</tt>
                    </dt><dd>
                    <p>Same as the
                    <tt>x</tt>
                    conversion code, except that the corresponding argument must
                    be  a  pointer  to  a pointer to be voided.</p>
                    </dd><dt>
                    <tt>i</tt>
                    </dt><dd>
                    <p>An integer
                    is expected; the corresponding argument should be an integer pointer. It will
                    store the value of the next input item interpreted according to C conventions:
                    a leading "0" implies octal; a leading "0x" implies hexadecimal; otherwise,
                    decimal.</p>
                    </dd><dt>
                    <tt>n</tt>
                    </dt><dd>
                    <p>Stores into
                    an integer (whose address is specified in the argument) the total number of
                    characters (including white space) that have been scanned since the function
                    call. No input is consumed.</p>
                    </dd><dt>
                    <tt>e</tt>
                    ,
                    <tt>f</tt>
                    ,
                    <tt>g</tt>
                    </dt><dd>
                    <p>A floating point number is expected; the next field is converted
                    accordingly and stored through the corresponding argument, which should be
                    a pointer to a
                    <var>float</var>
                    . The input format for floating
                    point numbers is an optionally signed string of digits, possibly containing
                    a decimal point, followed by an optional exponent field consisting of an
                    <tt>E</tt>
                    or an
                    <tt>e</tt>
                    , followed by an optional +, -,
                    or space, followed by an integer.</p>
                    </dd><dt>
                    <tt>s</tt>
                    </dt><dd>
                    <p>A character
                    string is expected; the corresponding argument should be a character pointer
                    pointing to an array of characters large enough to accept the string and a
                    terminating
                    <tt>\\0</tt>
                    , which will be added automatically. The
                    input field is terminated by a white-space character.</p>
                    </dd><dt>
                    <tt>c</tt>
                    </dt><dd>
                    <p>A character
                    is expected; the corresponding argument should be a character pointer. The
                    usual skipping over white space is suppressed in this case; to read the next
                    non-space character, use
                    <tt>%1s</tt>
                    . If a field width is given,
                    the corresponding argument should refer to a character array; the number of
                    characters indicated is read.</p>
                    </dd><dt>
                    <tt>D,O,X,E,F</tt>
                    </dt><dd>
                    <p>Are
                    semantically equivalent to, respectively,
                    <tt>ld</tt>
                    ,
                    <tt>lo</tt>
                    ,
                    <tt>lx</tt>
                    ,
                    <tt>le</tt>
                    ,
                    <tt>lf</tt>
                    .</p>
                    </dd><dt>
                    <tt>[</tt>
                    </dt><dd>
                    <p>Indicates
                    string data and the usual skipping over leading white space is suppressed.
                    The left bracket is followed by a set of characters, called the
                    <var>scanset</var>
                    , and a right bracket; the input field is the maximaum
                    sequence of input characters consisting entirely of characters in the scanset.
                    The circumflex (
                    <tt>^</tt>
                    ), when it appears
                    as the first character in the scanset, serves as a complement operator and
                    redefines the scanset as the set of all characters not contained in the remainder
                    of the scanset string. There are certain conventions used in the construction
                    of the scanset. A range of characters may be represented by the construct
                    <var>first-last</var>
                    , thus [0123456789] may be expressed [0-9].
                    Using this convention,
                    <var>first</var>
                    must be lexically
                    less than or equal to
                    <kbd>last</kbd>
                    , otherwise the dash will stand
                    for itself.  The dash will also stand for itself whenever it is the first
                    or the last character in the scanset. To include the right square bracket
                    as an element of the scanset, it must appear as the first character (possibly
                    preceded by a circumflex) of the scanset, and in this case it will not be
                    syntactically interpreted as the closing bracket. The corresponding argument
                    must point to a character array large enough to hold the data field and the
                    terminating
                    <tt>\\0</tt>
                    , which will be added automatically. At least
                    one character must match for this conversion to be considered successful.</p>
                    </dd></dl>
                    <p>The
                    <kbd><strong>scanf()</strong></kbd>
                    conversion terminates at
                    EOF,
                    at the end of the control string, or when an input character
                    conflicts with the control string. In the latter case, the offending character
                    is left unread in the input channel.</p>
                    <p>Reaching the end of the character string
                    <tt>s</tt>
                    for
                    <kbd><strong>sscanf()</strong></kbd>
                    is equivalent to encountering
                    EOF
                    for
                    <kbd><strong>scanf()</strong></kbd>
                    .</p>
                    <p>The
                    <kbd><strong>scanf()</strong></kbd>
                    function returns the number of successfully
                    matched and assigned input items; this number can be zero in the event of
                    an early conflict between an input character and the control string. If the
                    input ends before the first conflict or conversion,
                    EOF
                    is returned.</p>
                </ul>
            </ul>
            <a name="EXAMPLES"></a>
            <h4 class="sol">EXAMPLES</h4>
            <ul>
                <p>The call:</p>
                <p>
                </p>
                <table border="1" cellpadding="1" width="100%">
                    <tbody>
                        <tr>
                            <td nowrap="1">
                            <br>
                            <pre><samp>int i, n; float x; char name[50];<br>n = scanf("%d%f%s", &amp;i, &amp;x, name);</samp>
                            </pre>
                            </td>
                        </tr>
                    </tbody>
                </table>
                <p>with the input line:</p>
                <p>
                </p>
                <table border="1" cellpadding="1" width="100%">
                    <tbody>
                        <tr>
                            <td nowrap="1">
                            <br>
                            <pre><samp>25 54.32E-1 thompson</samp>
                            </pre>
                            </td>
                        </tr>
                    </tbody>
                </table>
                <p>will assign to
                <var>n</var>
                the value
                <var>3</var>
                ,
                to
                <var>i</var>
                the value
                <tt>25</tt>
                , to
                <var>x</var>
                the value
                <tt>5.432</tt>
                , and
                <var>name</var>
                will contain
                <tt>thompson\\0</tt>
                .</p>
                <p>Or:</p>
                <p>
                </p>
                <table border="1" cellpadding="1" width="100%">
                    <tbody>
                        <tr>
                            <td nowrap="1">
                            <br>
                            <pre><samp>int i; float x; char name[50];<br>(void) scanf("%2d%f%*d %[0-9]", &amp;i, &amp;x, name);</samp>
                            </pre>
                            </td>
                        </tr>
                    </tbody>
                </table>
                <p>with input:</p>
                <p>
                </p>
                <table border="1" cellpadding="1" width="100%">
                    <tbody>
                        <tr>
                            <td nowrap="1">
                            <br>
                            <pre><samp>56789 0123 56a72</samp>
                            </pre>
                            </td>
                        </tr>
                    </tbody>
                </table>
                <p>will assign
                <tt>56</tt>
                to
                <var>i</var>
                ,
                <tt>789.0</tt>
                to
                <var>x</var>
                , skip
                <tt>0123</tt>
                ,
                and place the string
                <tt>56\\0</tt>
                in
                <var>name</var>
                .
                The next call to
                <kbd>getchar</kbd>
                (3STDC) will return
                <tt>a</tt>
                .</p>
            </ul>
            <a name="NOTE"></a>
            <h4 class="sol">NOTE</h4>
            <ul>
                <p>Trailing white space (including a new-line) is left unread unless matched
                in the control string.</p>
            </ul>
            <a name="DIAGNOSTICS"></a>
            <h4 class="sol">DIAGNOSTICS</h4>
            <ul>
                <p>These functions return
                EOF
                on end of
                input and a short count for missing or illegal data items.</p>
            </ul>
            <a name="ATTRIBUTES"></a>
            <h4 class="sol">ATTRIBUTES</h4>
            <ul>
                <p>See
                <strong>attributes(5)</strong>
                for descriptions of the following attributes:</p>
                <table border="1" cellpadding="10" cellspacing="0" width="100%">
                    <thead>
                        <tr>
                            <th scope="col" align="center" valign="top">ATTRIBUTE TYPE</th><th scope="col" align="center" valign="top">ATTRIBUTE VALUE</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td align="left" valign="top">Interface Stability</td>
                            <td align="left" valign="top">Evolving</td>
                        </tr>
                    </tbody>
                </table>
                <p>
                </p>
                <p>
                </p>
            </ul>
            <a name="SEE ALSO"></a><img src ="http://www.cnitblog.com/cockerel/aggbug/37434.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2007-12-07 01:05 <a href="http://www.cnitblog.com/cockerel/archive/2007/12/07/37434.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Acumon的成都比赛报告</title><link>http://www.cnitblog.com/cockerel/archive/2007/11/27/36897.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Mon, 26 Nov 2007 19:20:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2007/11/27/36897.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/36897.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2007/11/27/36897.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/36897.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/36897.html</trackback:ping><description><![CDATA[<p><strong>前言</strong><br>　　其实这篇报告一早就规划好了，就是一直都没有时间把它敲下来。回到广州后，又是签三方又是体检又是办理退宿，之后又坐了一天的火车来北京，直到今晚在室友代黎明同学的帮助下终于可以上网敲报告了，在此先谢谢代黎明同学。</p>
<p><strong>经历</strong><br>　　上回说到我们Alioth在长春很郁闷了一下。于是这次谁也不敢大意，临出发前大家都狠做了一些题，也狠积了一些ＲＰ。当时我有个预感，我们队应该不会卡题（调不过）。<br>　　这次比赛的策略与在长春时略有不同，大致来说，由我来负责敲水题与中等难度的题或模拟题，德健主攻比较繁难的题，德健的推导能力比较强，数论题与比较难的ＤＰ就靠他了。<br>　　比赛开始时，德健看ＡＢＣ，枫耀看ＤＥＦ，我看ＧＨＩＪ。<br>　　Ｇ题一看便知是一道很繁琐的计算几何题，我们都不太熟，于是先放下。然后ＨＩＪ中Ｉ题很短，便先看Ｉ题，看完之后觉得很难（这个判断之后证明是正确的），想了一下觉得没头绪便也放下了。此时刷board发现Ｊ题有人过，便马上看Ｊ，果然很水，立敲之，过。然后枫耀觉得Ｄ题可以用线段树做，便把题意告诉了我，我想了一下觉得用STL set只要重定义一下排序函数就可以很简单地过掉，而用线段树或平衡树反而会很繁。此时德健与枫耀讨论一下后发现Ａ题可以做，但比较繁，于是我决定先让我过Ｄ题，不出预料，Ｄ题很快也被过掉了。<br>　　这时德健发现Ａ题有个地方没有处理好，同时发现Ｈ题有很多队过，便看Ｈ题，发现是水题，敲之，ＷＡ，于是打印，发现有小bug，改之，也过了。这时我们过了三题，排名较前。<br>　　此时德健继续敲Ａ，枫耀把Ｂ题的题意告诉了我。十分可惜的是，我鬼使神差地记错了题目的规模，竟以为只有NlogN以下的复杂度才能过，苦思了一段时间，没任何有意义的结果，于是继续规划Ｇ题，此时德健交了一次Ａ题，ＷＡ，发现题目输出上限是１０亿，刚好爆int，狂晕后改long long交，过，暂时排第一，而Ｃ题是一道类似Apple Tree的树形ＤＰ，很有信心能过，形势一片大好，众皆乐。<br>　　Ｃ题代码量也不小，于是给德健敲，期间枫耀在想Ｆ题，很神奇地想到一种3<sup>9</sup>*3<sup>9</sup>*9*50的ＤＰ方法，可惜我当时没有给予足够的关注，后来我发现只要稍加一些改进就可以把3<sup>9</sup>变成2<sup>9</sup>，但那已经是比赛结束以后的事了。<br>　　德健敲Ｃ题时很小心，再加上平时大量做题换来的丰富经验，魔术般地１AC了这道很繁的ＤＰ题，这时离比赛结束还有大约一个半小时。<br>　　这时我们比较了一下剩下的题目，Ｂ题没想法，Ｆ题复杂度太高，Ｇ题敲起来太烦。想了想还是攻Ｇ题比较好。规划讨论了二十分钟左右时我们发现Ｂ题很多队过，便重新看了Ｂ题，发现了一种Ｎ<sup>2</sup>的算法，便决定改为全力攻Ｂ题。德健负责敲，我在旁边看，枫耀验证算法。很快地，我们就把程序敲完，交，ＷＡ了。这个ＷＡ来的很诡异，集训时当我们一起攻题时很少遇到这种情况。于是我让德健去看程序，我和枫耀出数据检验，但大家都没能发现问题。一直郁闷到比赛结束。回到酒店后我与ＡＣ一讨论，才发现原来我们把题意理解错了，有一句模棱两可的话把德健和枫耀都骗过了。<br>　　最终，我们队队排名第４，学校排名第３，虽然还有不少遗憾，但终于能拿到一块金牌，而且还能出线，已经可以算是完美的结局了。</p>
<p><strong>教训</strong><br>　　我们队的数论，组合数学，博弈方面的能力还是太弱，热身赛时一道ＳＧ定理的水题就把我们ＢＳ掉了。这次比赛能够取得较好的成绩，其实不过是因为没有出到这方面的难题罢了。<br>　　题目过不了时一定要找人重新审查题目描述，最好能找没有看过题的人来看。假如当时我能重新看一下Ｂ题，很可能我们就能把Ｂ过掉了。<br>　　<br><strong>感言</strong><br>　　这次比赛，是我两年的ACM/ICPC生涯的最后一战，非常感谢我的队友德健与枫耀，是他们的努力使我能够以最好的成绩退役。两年以前，我还没有意识到算法对我会有多重要，那时候，我只是觉得学算法很好玩，做ＯＪ题很有趣而已。而两年之后，当我要到处面试、找工作的时候，才发现原来算法是这么重要，它使我在参加各大公司的面试时都能一路绿灯。因此我非常感激郭老师，给了一个很好的平台去学习算法，去检验学习的成果，给了我很多证明自己能力的机会。还要特别感谢虫子，他给了我最多的帮助，是真正的&#8220;有问必答&#8221;，没有这个Final级大牛的帮助，我是不可能在短短两年内学到这么多东西的。还有老战友狐狸和飞飞，我永远不会忘记那段一边吃ＢＢＱ一边讨论各种算法难题的日子。感谢所有帮助过我的牛人们。最后还要勉励一下各位师弟师妹，多花点时间和精力研究一下算法吧，保证你不会后悔的～</p>
<strong>花絮</strong>
<ul>
    <li>这次比赛筹办得非常好，特别是赛后的晚会非常精彩，表演啦啦操的同学们都是&#8220;去过Final的&#8221;。
    </li>
    <li>吃早餐时千万不要坐错别人的位置，否则会大损ＲＰ的（幸亏我们的德健同学是被坐错那个，于是ＲＰ大升，呵呵）。
    </li>
    <li>我一共参加了三场ＡＣＭ亚洲赛，刚好得到一金一银一铜，真可谓&#8220;完满&#8221;了。呵呵～ </li>
</ul><img src ="http://www.cnitblog.com/cockerel/aggbug/36897.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2007-11-27 03:20 <a href="http://www.cnitblog.com/cockerel/archive/2007/11/27/36897.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Acumon的长春比赛报告</title><link>http://www.cnitblog.com/cockerel/archive/2007/11/12/36156.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Sun, 11 Nov 2007 18:10:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2007/11/12/36156.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/36156.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2007/11/12/36156.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/36156.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/36156.html</trackback:ping><description><![CDATA[<p align="center">
				<strong>
						<span>Acumon</span>
						<span>的长春比赛报告</span>
				</strong>
		</p>
		<p>
				<strong>
						<span>行程</span>
				</strong>
		</p>
		<ul>
				<li>
						<span>
								<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="1" month="11" year="2007">11<span><span>月</span></span>1<span><span>日</span></span></st1:chsdate>
								<span>下午</span>~<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="3" month="11" year="2007">11<span><span>月</span></span>3<span><span>日</span></span></st1:chsdate><span>早上　在火车上度过比较无聊的</span>36</span>
						<span>小时</span>
				</li>
				<li>
						<span>
								<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="4" month="11" year="2007">11<span><span>月</span></span>4<span><span>日</span></span></st1:chsdate>
								<span>　试机</span>
						</span>
				</li>
				<li>
						<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="5" month="11" year="2007">
								<span>11</span>
								<span>月</span>
								<span>5</span>
								<span>日</span>
						</st1:chsdate>
						<span>　比赛</span>
				</li>
				<li>
						<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="6" month="11" year="2007">
								<span>11</span>
								<span>月</span>
								<span>6</span>
								<span>日</span>
						</st1:chsdate>
						<span>　在长春游玩，但长春实在没什么好玩</span>
				</li>
				<li>
						<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="6" month="11" year="2007">
								<span>11</span>
								<span>月</span>
								<span>6</span>
								<span>日</span>
						</st1:chsdate>
						<span>晚</span>
						<span>~<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="8" month="11" year="2007">11<span><span>月</span></span>8<span><span>日</span></span></st1:chsdate><span>上午　在火车上度过比较无聊的</span>36</span>
						<span>小时</span>
				</li>
		</ul>
		<p> </p>
		<p>
				<strong>
						<span>比赛</span>
				</strong>
		</p>
		<p>
				<span>　　比赛一开始，我开屏幕调配置。发现试机时的配置全部被保留。大喜，遂去看题。我看</span>
				<span>ABC</span>
				<span>，基宏看</span>
				<span>DEF</span>
				<span>，德健看</span>
				<span>GHI</span>
				<span>。按照之前的作战布署，此时我们首要的目标是找出最水的题并予以消灭。我很快地看完</span>
				<span>A</span>
				<span>，发现是一条计算几何题，应该不是水题，便先放在一旁，转而看</span>
				<span>B</span>
				<span>。</span>
				<span>B</span>
				<span>题大意是给你一个数</span>
				<span>n</span>
				<span>，要你找出</span>
				<span>k</span>
				<span>个数</span>
				<span>a<sub>1</sub>~a<sub>k</sub></span>
				<span>，使得所有</span>
				<span>1~n</span>
				<span>之间的自然数都可以用</span>
				<span>a<sub>i</sub>, a<sub>j</sub>-a<sub>i</sub>, a<sub>j</sub>+a<sub>k</sub>-a<sub>i</sub></span>
				<span>三种方式表示出来，并使得</span>
				<span>k</span>
				<span>最小。乍看之后像是一条数论构造题，便交给基宏想。此时德健正在看</span>
				<span>F</span>
				<span>和</span>
				<span>H</span>
				<span>，前者是一条图论题，后者是一条数据结构题，都不是传说中的最水的题，而且属于德健擅长的类型，我便留给他继续想，继续扫其它题，也帮助基宏一齐想</span>
				<span>B</span>
				<span>，此时基宏先后找到一些构造的方案，但没能证明它们，而</span>
				<span>judge</span>
				<span>的返回也说明它们并不正确。</span>
		</p>
		<p>
				<span>　　比赛一小时后，开始有零星的队过</span>
				<span>A</span>
				<span>，大多数队还是</span>
				<span>0</span>
				<span>题。于是拉德健一起讨论</span>
				<span>A</span>
				<span>。</span>
				<span>A</span>
				<span>题题意是给出</span>
				<span>20</span>
				<span>个平面上的点，要求你选取其中一些点，连成一个多边形，使得式子周长平方除以面积取得最小值。马上证得最优的多边形是简单多边形，并且是一个凸包，考虑到点数较少，便想枚举所有凸包，但直接枚举复杂度太高，又无法找到一种遍历凸包的算法。稍后，我们发现一种遍历所有简单多边形的算法，复杂度为</span>
				<span>n</span>
				<span>2<sup>n</sup></span>
				<span>，</span>
				<span>10s</span>
				<span>的限时绝对能过，便交给德健敲，在经历了几次小</span>
				<span>bug</span>
				<span>带来的</span>
				<span>TLE</span>
				<span>后，我们终于迎来了第一个</span>
				<span>yes</span>
				<span>。此时暂时排名十几，很多队过了的</span>
				<span>E</span>
				<span>题我们还未过，形势看来不错。二队和六队还未过题。为他们祈祷了一下，继续做题。</span>
		</p>
		<p>
				<span>　　E</span>
				<span>题又是一道数论题：给出一个复数，判断是否高斯素数。我便和基宏一起想</span>
				<span>E</span>
				<span>，并写了一个暴力枚举的程序来把小范围的高斯素数打印出来找规律，然后我去想</span>
				<span>D</span>
				<span>，</span>
				<span>D</span>
				<span>题目较长，但其实是一个很容易想到的一个</span>
				<span>DP</span>
				<span>。看完题后不久便想到了算法。但觉得有点繁琐，而且复杂度好像有些高而且不容易算出准确的复杂度，便等到德健过</span>
				<span>A</span>
				<span>后再交给他敲。另外</span>
				<span>E</span>
				<span>题我们在《初等数论》上也找到一些结论，可惜我们看不懂证明。后来我写了一个</span>
				<span>n<sup>2</sup></span>
				<span>的水的方法，却水了几次都没有水过。</span>
		</p>
		<p>
				<span>　　这时评委看到</span>
				<span>A</span>
				<span>题过的人太少，便做了件最令人匪夷所思的事：对</span>
				<span>A</span>
				<span>题连续多次</span>
				<span>rejudge</span>
				<span>，最终把时限改为用最强大的布鲁特福斯算法都可以过的题，一下子哗啦啦地过倒一大片，我们一个小时的努力换来的的优势顿时化为乌有。</span>
		</p>
		<p>
				<span>　　不幸中的万幸是，当我用了各种预处理和水的方法都过不了</span>
				<span>E</span>
				<span>而打算放弃之时，基宏很神奇地修改了其中的一个参数，改大了枚举量，就把</span>
				<span>E</span>
				<span>过掉了。</span>
		</p>
		<p>
				<span>　　这时德健已经敲了一部分</span>
				<span>D</span>
				<span>题，但似乎遇到一些困难，却又无法说出来。之后他便去想</span>
				<span>F</span>
				<span>，然后决定先水一下</span>
				<span>F</span>
				<span>。这是一个有关最短路的问题，很不幸地我们选择了使用</span>
				<span>Floyd</span>
				<span>来求最短路，结果无论怎样改都没法水掉道这题（后来六队用对所有点求</span>
				<span>Dijikstra</span>
				<span>的方式过掉了这题，实在太神奇，膜拜orz~）。在比赛结束前</span>
				<span>40</span>
				<span>分钟左右，我们终于放弃</span>
				<span>F</span>
				<span>来继续做</span>
				<span>D</span>
				<span>，由于此前我已算出准确的复杂度是</span>
				<span>O(500*270*12*case</span>
				<span>数</span>
				<span>)</span>
				<span>左右，所以那时我觉得把</span>
				<span>D</span>
				<span>过掉的希望还是很大的。这时德健终于说出了他遇到的困难，原来他把我的算法和他之前的一些想法搞混了，结果我们花了很大力气才取得了一致。最后的时间是在我和德健一齐敲</span>
				<span>D</span>
				<span>题、调</span>
				<span>D</span>
				<span>题中度过的，可惜最后都没调过。</span>
		</p>
		<p> </p>
		<p>
				<strong>
						<span>教训</span>
				</strong>
		</p>
		<p>
				<span>
						<span>1、 </span>
				</span>
				<span>不要以为</span>
				<span>g++</span>
				<span>一定会对简单的</span>
				<span>inline</span>
				<span>函数进行展开。这次比赛的</span>
				<span>g++</span>
				<span>对我们测试的所有的简单</span>
				<span>inline</span>
				<span>函数都不展开。</span>
		</p>
		<p>
				<span>
						<span>2、 </span>
				</span>
				<span>不要以为题目的标准解法不用打表。本次比赛花了我们很多时间的</span>
				<span>B</span>
				<span>题的标准解法就是花几个小时去暴力打表。</span>
		</p>
		<p>
				<span>
						<span>3、 </span>
				</span>
				<span>作为队长，我应该更清楚队员的状态，并且更灵活地调整策略。今次比赛德健明显状态不佳，我应该在更早的时候意识到这个问题。</span>
		</p>
		<p>
				<span>
						<span>4、 </span>
				</span>
				<span>数论和组合数学是我们队的弱项，这次我们的数论题过得很险，相信随后的成都之战会更加艰苦。必须在接下来的休整时间里尽力恶补一下。</span>
		</p>
		<p>
				<span>
						<span>5、 </span>
				</span>
				<span>我们队的交流还是做得不够。其实那条花了德健很多时间的</span>
				<span>H</span>
				<span>题，正是我擅长的线段树题目，而事后也证实那道题真的很容易想出来，但我却因为各种原因没有认真去想。</span>
		</p>
		<p> </p>
		<p>
				<strong>
						<span>花絮</span>
				</strong>
		</p>
		<p>
				<span>
						<span>1、 </span>
				</span>
				<span>在去长春的火车上，大家都在努力看书和论文，还讨论一些以前的题目，其间我发现某题可以用</span>
				<span>O(n(nlogn)<sup>1/2</sup> )</span>
				<span>的复杂度过。这是我想过的题中“最复杂”的一个复杂度。</span>
		</p>
		<p>
				<span>
						<span>2、 </span>
				</span>
				<span>去长春的路上大家都没有打太多牌，怕伤</span>
				<span>RP</span>
				<span>。很不幸地我连胜了几局，赶紧收手去睡觉。回广州的路上终于可以放手打牌了，大败而归。</span>
		</p>
		<p>
				<span>
						<span>3、 </span>
				</span>
				<span>由于是第一次在深秋时节跑到北方去（假如前几天飞去北京面微软不算的话，但显然长春要比北京冷多了）所以大家都准备了很多御寒衣物。去到后发现其实也没有想像中那么冷，我的围巾和最厚的绵袄都没有用过。</span>
		</p>
		<p>
				<span>
						<span>4、 </span>
				</span>
				<span>王磊在火车上开玩笑地说他在实验室研究“布鲁特福斯”（</span>
				<span>brute force</span>
				<span>）算法。我们的德健更号称“系数之王”。很不幸地，这次我们遇上了更加暴力的评委，方知“强中还有强中手”。</span>
		</p>
		<p>
				<span>
						<span>5、 </span>
				</span>
				<span>在去长春火车上的第一晚，我接连推掉了百度、网易和腾讯的面试，当时感觉心痛无比。不过很幸运地，最终我还是赶在百度团队飞回北京前获得了面试的机会，并很顺利地拿到了</span>
				<span>offer</span>
				<span>。</span>
				<span>^_^</span>
		</p>
		<p>
				<span>
						<span>6、 </span>
				</span>
				<span>比完赛后二队<st1:personname w:st="on" productid="和郭">和郭</st1:personname>老师随即飞回了广州，剩下六个大男人在长春逛沃尔玛，囧。<br /></span>
		</p>
		<p>7、比赛服装的size除了印的码数不同外几乎没有什么差别，导致我们的基宏同学选了件XXL，而肥东师兄却选了件M。</p>
		<p>
				<strong>
						<span>发现</span>
				</strong>
		</p>
		<p>
				<span>
						<span>1、 </span>
				</span>
				<span>东北有很多西南菜，尤其是云南过桥米线。</span>
		</p>
		<p>
				<span>
						<span>2、 </span>
				</span>
				<span>在北方千万不要乱点“清淡”的菜，它可能辣得令你无法下咽。一个较好的做法是叫师傅“绝对不放辣椒”，但这时师傅很可能会跟你说那道菜他不会做了。</span>
		</p>
		<p>
				<span>
						<span>3、 </span>
				</span>
				<span>坐火车千万不要坐车厢两边，除非你不介意车上那帮烟鬼们日夜不停地轮番轰炸。</span>
		</p>
		<p>
				<span>
						<span>4、 </span>
				</span>
				<span>一个城市的空气和饮用水质量真的很重要的，为了这两个原因我打死都不会到长春去生活。</span>
		</p>
		<p>
				<span>
						<span>5、 </span>
				</span>
				<span>长春的轻轨很慢，而且车站很密，一两分钟就停一次站，使我们怀疑步行是否会比坐轻轨更快。</span>
		</p>
		<p>
				<span>
						<span>6、 </span>
				</span>
				<span>原来在手机</span>
				<span>QQ</span>
				<span>上是看不到对我可见的密友的，由于大家都习惯隐身，结果我经常觉得</span>
				<span>Q</span>
				<span>上一片冷清。<br /></span>
		</p>
		<p>
				<strong>
						<span>
								<br />鸣谢</span>
				</strong>
		</p>
		<ul>
				<li>
						<st1:personname w:st="on" productid="谢谢郭">
								<span>谢谢郭</span>
						</st1:personname>
						<span>老师给了我代表中山大学到长春比赛的难得的机会。</span>
				</li>
				<li>
						<span>谢谢队友德健和基宏给了我这个菜鸟队长许多支持和帮助。和你们一起并肩奋斗是我毕生难忘的一段经历。</span>
				</li>
				<li>
						<span>谢谢嘉慧借给我手机，使我没有错过任何一个重要的面试电话，并且在旅途中可以一直用</span>
						<span>QQ跟大家</span>
						<span>聊天。我那只肥猪仔现在经常“智能悭电”了。</span>
				</li>
				<li>
						<span>谢谢在这次旅程中帮助过我、关心过我的所有人，谢谢你们。</span>
				</li>
		</ul><img src ="http://www.cnitblog.com/cockerel/aggbug/36156.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2007-11-12 02:10 <a href="http://www.cnitblog.com/cockerel/archive/2007/11/12/36156.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>终于申请到一个个人网站空间了~</title><link>http://www.cnitblog.com/cockerel/archive/2007/09/18/33686.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Tue, 18 Sep 2007 14:11:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2007/09/18/33686.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/33686.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2007/09/18/33686.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/33686.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/33686.html</trackback:ping><description><![CDATA[<p>　　不到填简历的时候我不会感觉到，原来我能够拿得出手的技术是这么的少，如果不想一而再，再而三地被BS，我还要下多点工夫去充电才行。<br>　　最近玩起了asp.net，一直就想弄个个人网站来搞搞，但是网上免费的动态空间非常的少，能支持数据库的更绝无仅有（如果你不同意这句话，我会很高兴地请你给出一个支持<a href="ftp://ftp.net/">FTP、.net</a>、MS-SQL的免费空间的注册地址<img height=20 src="http://www.cnitblog.com/Emoticons/QQ/icon17.gif" width=20 border=0>）如果只是用自己电脑上的IIS来搞，又觉得有点不爽，因为这样如果我写了些什么好玩的东西就不能贴在blog里给大家玩玩了。<br>　　后来博客园QQ群里有个朋友介绍了一个空间给我，虽然不是完全免费，但看起来还算公道。免费的静态不限容量空间，送ACCESS数据库支持，付款可以获得一些升级功能，比如支持FTP收1元，支持.net收5元，支持SQL数据库收5元，支持php收1元等等，看上去功能还挻多的，可以通过网银或支持宝等网上支付方式来支付。交足11大元后，我终于拥有了这个支持FTP、ap.net、MS-SQL的个人空间了。<br>　　希望很快能够做点有趣的东西给大家玩玩啦~~<br>　　如果你也想做申请一下这个网站可以点<a href="http://web.thec.cn/sysweb/RegTrans.aspx?CodeProvider=acumon">这里</a>。记得一齐交流哈~</p><img src ="http://www.cnitblog.com/cockerel/aggbug/33686.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2007-09-18 22:11 <a href="http://www.cnitblog.com/cockerel/archive/2007/09/18/33686.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>将 Java 应用程序迁移到 .NET[转]</title><link>http://www.cnitblog.com/cockerel/archive/2007/08/16/31932.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Thu, 16 Aug 2007 06:34:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2007/08/16/31932.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/31932.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2007/08/16/31932.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/31932.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/31932.html</trackback:ping><description><![CDATA[<div class="text2"><font color="#333399" face="Tahoma" size="2">什么是 .NET？</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">Microsoft
.NET（读作&#8220;dot
net"）既是软件编写方法，又是一套开发实现这些方法的软件的工具。我们来看一些有关连接性和互操作性的常见业务问题，以说明促使 .NET
方法的发展的原因：大多数企业都与其他企业合作，但是它们的信息系统运作却是孤立的。没有建立起贯穿供应商的产品供应链；供应商与买方之间的联系常常只局
限于传真或简单的文本文件交换。人们通常将这一点看作提高生产率的障碍。更好地沟通可以使企业实现更高的效率。当供应链中的所有供应商都彼此连接起来时，
每个供应商都能够将库存降低到最低水平、根据需求生产和更有效地协调。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">与此相关的是互操作性问题。当企业承诺互相连接起来时，如果他们的操作系统处于不同的再开发状态或处于不断变化中，他们就会面临艰难的设计及实现连接的策划工作。此外数据安全也是个复杂问题，因为通过企业防火墙与其交换数据的既是合作伙伴又是竞争对手。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">.NET
方法能更好地启用这种能力，它使得编写能够在任意时间、任意地点和任意设备上安全地彼此连接和互操作的系统变得非常简单。实现这一点的核心技术是
XML Web Service。这项技术既是一种方法，也是在不同机器、不同网络及不同操作系统的组件之间传递信息的传输层。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">XML
Web Service 得到了广泛的支持。许多公司已经使用 XML Web Service 与合作伙伴连接。Microsoft
正在所有产品上加大对 XML Web Service 的支持。从开发人员的角度看，.NET 使得利用 Microsoft Visual
Studio .NET、.NET Framework 以及 XML Web Service 编写彼此连接的系统变得非常简单。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">.NET Framework</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">.NET 绝不仅仅是 XML Web Service。.NET 的核心是 .NET Framework，它由公共语言运行库和类库组成。这两个组件为构建 .NET 应用程序提供了执行引擎和编程 API。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">为
.NET 编译的应用程序不是被直接编译成本机代码，而是被编译成一种称为 Microsoft 中间语言 (MSIL)
的中间语言。当首次运行一个应用程序时，公共语言运行库实时编译器在程序执行前将 MSIL 代码编译成本机代码。公共语言运行库不是一个简单的
JIT
编译器，它还负责提供内存回收、异常处理、安全服务、运行时类型安全检查等底层执行服务。由于公共语言运行库在管理执行方面的作用，因此有时将以
.NET Framework 为目标的程序称为&#8220;托管"应用程序。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">.NET
Framework 是一组类，它们用于构建在公共语言运行库上运行的应用程序。这些类库为包括数据访问、安全性、文件 IO、XML
操作、消息传送、类反射、XML Web Service、ASP.NET 和 Microsoft Windows
服务在内的各种任务提供强大的支持。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">也
许 .NET 最独特的属性是它的多语言支持。Microsoft 已经为 .NET Framework 发布了四种商业语言：Visual C#
.NET、Visual Basic .NET、C++ 托管扩展及 Visual J# .NET。许多其他兼容 .NET
的语言也正在开发中，其中包括 Perl、Python 及 COBOL。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">为
了帮助创建兼容 .NET Framework 的语言，Microsoft 设计了公共语言规范 (CLS)。每种语言要使用 .NET
Framework 和公共语言运行库，以及与用其他语言编写的组件进行互操作，就必须提供 CLS
所描述的功能。如果一种语言实现了必需的功能，那么它就被称为兼容 .NET。每种兼容 .NET 的语言都支持相同的数据类型，使用相同的 .NET
Framework 类，编译为相同的 MSIL，并且使用相同的公共语言运行库管理执行过程。因此，各种兼容 .NET
的语言之间没有优劣之别。开发人员可以自由地为特定的组件选择最好的语言同时又不损失该平台的能力和自由度。另外，使用一种语言编写的组件也能够很容易地
与用另外一种语言编写的组件进行互操作。例如，您可以用 C# 编写一个从用 Visual Basic 编写的基类继承而来的类。CLS
已经被提交给 ECMA 进行标准化，这鼓励许多语言开发人员为许多语言创建兼容 .NET 的版本。在撰写本文时有 20 多种兼容 .NET
的语言正在开发中。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">图 1 展示了在操作系统之上的各种 .NET 组件。.NET Framework 由四个蓝框组成，这些蓝框分别代表 ASP.Net、Windows 窗体、ADO.NET 和 XML 以及子组件。</font></div>
<font color="#333399" face="Tahoma" size="2"><img alt="" src="http://www.microsoft.com/china/community/images/TechArticleImages/java2dotnet01.gif"><br></font>
<div class="text4"><font color="#333399" face="Tahoma" size="2">图 1：.NET Framework 体系结构</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">Visual Studio .NET</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">为
了能够进行 .NET 开发，Microsoft 重新编写了其开发工具并重新将其组合为 Visual Studio .NET。Visual
Studio .NET 支持使用一种或多种语言开发应用程序。设计、开发、调试和部署 .NET 组件均使用同一个集成开发环境 (IDE)。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">这
个开发环境支持控制台应用程序、Windows 应用程序、DLL、Web 应用程序、XML Web Service
以及手持设备应用程序的开发。该开发环境提供了一些独特的高生产率功能：智能感知；针对 Web 窗体、Windows 窗体、XML
架构及数据的可视化设计器；可以无缝地从用一种语言编写的代码转到用另一种语言编写的代码的跨语言调试器；与 .NET Framework
的紧密集成；能在键入时持续提供上下文相关帮助的动态帮助；显示编译器错误以及任务的任务列表；体系结构设计功能，例如 Visio
集成，以及用于可视化访问数据库的服务器资源管理器、Windows 服务、性能计数器和服务器端应用程序组件。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">Microsoft
Visual Studio .NET 是一个获奖的开发工具。到撰写本文时，Visual Studio .NET
已经获得了多种奖项，其中包括两次 2002 SD Magazine 效率奖和 PC Magazine 的 2001
年度卓越技术奖（尽管该产品当时仍处于 Beta 阶段）。</font></div>
<font color="#333399" face="Tahoma" size="2"><hr color="#cccccc" size="1"></font>
<div class="text2"><font color="#333399" face="Tahoma" size="2">比较 .NET 和 Java</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">在经验丰富的 Java 开发人员看来，.NET 可能与 Java 平台很相似，它们都提供了一种创建应用程序的结构化方法，都有编译为中间代码的语言，都为应用程序开发提供了一个大型 API 库。但实际上，.NET 的核心有一套与 Java 平台不同的目标。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">从
概念上讲，Java 是两样东西：Java 平台（运行时和 API）和 Java 语言。Java 平台的用途是支持用 Java
语言编写并被编译为 Java 字节码的应用程序。尽管进行了许多试图将其他语言编译为 Java
字节码的工作，但是这些工作大部分都是学术活动。Java 的理想目标一直是&#8220;在多种平台上使用一种语言"。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">.NET 也是两样东西：.NET Framework（运行时和 API）和大量支持它的编程语言。.NET Framework 的用途是支持用任一种语言编写并被编译为 MSIL 的应用程序。.NET 的目标是&#8220;多种语言共享一种平台"。 </font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">.NET 与 Java 相比的优点</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">与 Java 相比，除了语言自由度之外，.NET 还有许多其他优点。下面总结了一些最重要的优点：</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">框架类</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">由
于 Java
是多平台的，因此传统上其框架类被局限于那些所有平台都提供的类。这影响了类的范围和丰富度：类的范围被局限于可用计算机和操作系统最通用的类。另外还影
响了类本身的丰富度。内建 Java 类一般都非常简单，开发人员常常在它们上面构建自己的框架或不得不寻找 XML
文件语法分析等第三方框架。在发行 JDK 1.4 之前必须使用第三方库或编写自己的语法分析程序来对 Java 中的 XML
文件进行语法分析。编写自己的语法分析程序通常需要 100 多行代码。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">.NET
Framework 构建于 Windows 平台之上。还有一个用于 FreeBSD 的公共语言运行库和 .NET Framework
类库版本。这些类包括了该平台上的所有框架类。另外，这些类也比 Java 所能提供的类更丰富。.NET
提供了一个编程框架而不是一个构建编程框架的基础。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">下面的 C# 例子说明在 .NET 中如何对 XML 文件进行语法分析。注意，.NET Framework 中已经提供了辅助类。这使得代码编写非常简单：</font></div>
<div style="background-color: #eeeeee;" width="100%">
<pre class="text5"><font color="#333399" face="Tahoma" size="2">XmlTextReader myXmlTextReader = new XmlTextReader ("textToValidate.xml");XmlValidatingReader myReader = new XmlValidatingReader(myXmlTextReader);myReader.Schemas.Add(myXmlSchemaCollection);myReader.ValidationEventHandler += new ValidationEventHandler (this.ValidationFailureHandler);// 读取 XML 数据。while (myReader.Read()){}</font></pre>
</div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">.NET Framework 的保真度比 Java 平台高。.NET 程序可以使用 Windows 的所有功能，而不象 Java 那样只能使用 Windows 最通用的功能。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">&#8220;&#8230;&#8230;真正的底线是：.NET 方法意味着 Microsoft 提供了 90% 以上开发人员都可能需要的符合标准的工具，而 Java 方法仍然意味着从各种来源搜集而来的各种碎片组合成的一个解决方案。"</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">Bornstein, Niel。2002 年 5 月。Pull Parsing in C# and Java（英文）。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">一次编写，到处调试</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">尽
管 Java 的&#8220;一次编写，到处运行"的理想很有吸引力，但是现在编写的大多数应用程序都仅针对一个操作系统。造成这种情况的技术原因有两个：由于
Java 框架在范围和丰富度上受到局限，因此开发人员常常使用专有类来访问目标平台的可用功能。第二，由于各种 Java
执行程序之间无法消除的不兼容性继续给真正的跨平台工作带来困难，因此开发人员必须在想要支持的所有平台上测试代码。因此，有些开发人员半开玩笑地将
Java 称为&#8220;一次编写，到处调试"的平台。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">安全性</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">.NET
的安全功能更丰富。除了加密 API、安全 cookie 和身份验证之外，.NET
还是一个能够根据代码来源给不同用户群分配不同权限等级的丰富的可扩展机制。例如，所有来自 Microsoft
的代码都被看作是安全的。可以允许或禁止所有来自特定 URL
的代码读/写临时目录或屏幕等特定资源。另外，应用程序可以被标志为需要某种权限（例如需要访问文件系统）。如果没有这些权限，那么该应用程序就不会被加
载。由于安全检查是在加载时进行的，因此开发人员不必在整个应用程序中编写安全失败检查逻辑。这一点是通过一项称为&#8220;代码访问安全"的新技术管理的，这种
技术对从 Internet 或本地机器加载的代码都有效。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">版本控制</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">.NET
Framework 有一个比 Java 更强大的版本控制系统。在 Java 中，如果安装了同一个类的两个版本，那么 Java
运行时将简单地加载在类路径上找到的第一个类而不管它是哪个版本。而 .NET 则具有丰富的版本支持。通过并行执行，.NET
可以在同一时刻加载和执行同一个类的两个或更多不同版本。各应用程序都可以选择自己的绑定机制：无论是绑定在一个类库的特定版本上、库的最新版本上，还是
绑定在特定位置的版本上。另外，可以按不同的机器应用规则，以便替代或进一步优化版本控制。这种版本控制方法也适用于编程语言。例如，在 C#
语言中，默认情况下方法不是虚函数，因此开发人员必须明确声明可被替代的方法。这意味着组件不能在基类中偶然中断行为。C#
不要求开发人员明确声明一种方法会引起哪些异常。如果异常列表发生变化，客户端代码仍能正常运行。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">性能</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">.NET
胜过 Java 之处还在于其深入调整应用程序行为和性能的能力。核心应用程序构建模块是为可伸缩性和高吞吐量设计的。例如，在 ADO.NET
数据访问断开的情况下，可以在内存内完成更多函数，而这些函数在 Java 数据库连接 (JDBC) 中要求来回访问数据库。另外，.NET
应用体系结构设计目标是更快的速度。例如，ASP.NET Web 页的性能比 Active Server Page (ASP)、Java
Server Page (JSP) 和 HTML 内嵌脚本语言提高了很多。与 Java 平台相比，.NET
无论在单用户情况还是在多用户情况，性能都更好。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">&#8220;Microsoft 的 .NET 应用程序的性能明显优于 Java 应用程序。如果有 5,000 个虚拟用户，则在没有缓存时，前者比后者快 10 倍以上；在有缓存时，前者比后者快 1 倍以上。"</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">VeriTest。
2002 年 5 月。VeriTest(R) Benchmark and Performance Testing Microsoft(R)
.NET Pet Shop http://www.gotdotnet.com/team/compare/veritest.aspx（英文）。</font></div>
<font color="#333399" face="Tahoma" size="2"><hr color="#cccccc" size="1"></font>
<div class="text2"><font color="#333399" face="Tahoma" size="2">如何将 Java 应用程序迁移到 .NET</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">有
两种方法可以将 Java 应用程序迁移到 .NET：将它们升级到 Visual J# .NET 或将它们转换到 Visual C#
.NET。如下所述，这两种方法要求进行不同的工作，各有自己的优点。由于 NDP 的完整版本只能在 Microsoft Windows
上使用，因此两种方法都意味着将应用程序迁移到 Microsoft Windows。尽管 NDP 中包含面向 Visual C#
.NET、Visual Basic .NET 及 Visual J# .NET 的命令行编译器，但我们在下文中假设开发人员使用 Visual
Studio .NET 将应用程序迁移到 .NET。如前所述，Visual Studio .NET 是效率最高的 .NET 应用程序开发工具。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">升级到 Visual J# .NET</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">Visual J# .NET 是针对 .NET Framework 的 Java 语言实现，可以从 MSDN 的 Visual J# 站点（英文）获得。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">J#
是 Microsoft 独立开发的，它将 Java 语言代码编译为 MSIL。Visual J# .NET 包括一个 Java
语言编译器、JDK 1.1.4 类库和一个将编译好的 Java 字节码升级为 MSIL 的工具（这个工具可用于将类库升级为可以从 .NET
应用程序使用的格式）。除了 JDK 1.1.4 类库，和其他兼容 .NET 的语言一样，Visual J# .NET 可以充分访问 .NET
Framework，包含用于 Windows 窗体和 Web 窗体开发的设计器。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">升
级到 Visual J# .NET 是将 Java 应用程序迁移到 .NET Framework 的最简单、最快速的方法。Visual J#
.NET 有开发人员熟悉的语法和类库，因此开发人员可以利用有关 Java 的原有知识，.NET Framework
很快就能上手。应用程序升级到 Visual J# .NET 后可以立即带来一些好处：升级速度很快，开发人员可以开始添加 .NET
Framework 和 Microsoft 扩展给 Java 语言带来的新功能。使用 Visual Studio .NET 打开一个
Visual J++ 6.0 项目，即可激活 Visual J# .NET Upgrade Wizard（Visual J# .NET
升级向导）。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">转换到 Visual C# .NET</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">Java
Language Conversion Assistant（Java 语言转换助手）可以从 Java Language Conversion
Assistant 站点（英文）下载。Java Language Conversion Assistant（Java 语言转换助手）可将
Java 应用程序转换为 Visual C# .NET 应用程序。调用 Java API 的代码被转换为使用 .NET Framework
的相应 C# 代码。由于这种转换很复杂，因此不是所有 Java API 都能被转换。Java Language Conversion
Assistant（Java 语言转换助手）能转换 90% 的 JDK 1.1.4 调用，而其余 10%
则会在代码中标出问题。每个问题都链接到一个主题，指导完成转换应作哪些修改。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">转
换到 C# 的应用程序可以获得最大的灵活性：尽管转换到 C# 比升级到 Visual J# .NET 慢，但是由于应用程序转换后使用本机
.NET Framework API，这带来了更多机会。修改完成后，转换后的代码可以立即象 Visual J# .NET 那样利用 .NET
Framework 的高性能、可伸缩性、安全性及版本控制能力。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">与
Visual J# .NET 不同，Java Language Conversion Assistant（Java 语言转换助手）支持
Visual J++ 6.0 松散文件和基于目录的项目的转换。从 Visual Studio .NET 菜单中选择 File（文件），再选择
Open（打开），然后选择 Convert（转换），即可激活 Java Language Conversion Assistant（Java
语言转换助手）。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">在 J# 和 C# 之间选择</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">决定使用哪个兼容 .NET 的语言迁移 Java 应用程序主要是一个个人选择问题。如前所述，Visual J# .NET 和 Visual C# .NET 都编译为相同的 MSIL，这两种语言都访问相同的 .NET Framework，提供相对一致的功能。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">为了帮助您进行选择，下面是在选择是升级到 Visual J# .NET 还是转换到 Visual C# .NET 时应该考虑的三个主要决定因素：</font></div>
<font color="#333399" face="Tahoma" size="2"><img alt="" src="http://www.microsoft.com/china/community/images/TechArticleImages/java2dotnet02.gif"><br></font>
<div class="text4"><font color="#333399" face="Tahoma" size="2">为了更深入地理解这两种选择，下一节讨论了应用程序被迁移到 .NET 后会发生什么情况。</font></div>
<font color="#333399" face="Tahoma" size="2"><hr color="#cccccc" size="1"></font>
<div class="text2"><font color="#333399" face="Tahoma" size="2">技术映射</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">两种迁移方法得到的结果不同。下面的两个表说明了 Java 项目的组成要素被迁移到 .NET 时的变化。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">表 1：Java 迁移到 .NET 组件</font></div>
<font color="#333399" face="Tahoma" size="2"><img alt="" src="http://www.microsoft.com/china/community/images/TechArticleImages/java2dotnet03.gif"><br></font>
<div class="text4"><font color="#333399" face="Tahoma" size="2">表 2：单个软件包的迁移</font></div>
<font color="#333399" face="Tahoma" size="2"><img alt="" src="http://www.microsoft.com/china/community/images/TechArticleImages/java2dotnet041.gif"><br></font><font color="#333399" face="Tahoma" size="2"><img alt="" src="http://www.microsoft.com/china/community/images/TechArticleImages/java2dotnet042.gif"><br></font><font color="#333399" face="Tahoma" size="2"><hr color="#cccccc" size="1"></font>
<div class="text2"><font color="#333399" face="Tahoma" size="2">混合式迁移和迁移 Swing、JSP</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">混合式迁移</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">用
兼容 .NET 的不同语言编写的组件可以很容易地彼此互操作，这样就能够从 Java
进行混合式迁移。在混合式迁移中，您将应用程序的一个组件升级为 Visual J# .NET 而将另一个组件转换到
C#。实际例子包括：将中间层组件升级为 Visual J# .NET，并从转换到 C# 的客户端访问它。您可以使用 Visual J#
.NET 二进制转换器将库转换为任何兼容 .NET 的语言都能使用的格式。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">不使用自动迁移功能的技术</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">Visual
J# .NET 和 Java Language Conversion Assistant（Java 语言转换助手）的目标都是 Java
语言、JDK 1.1.4 库以及 Visual J++ 6.0 附带的 Microsoft 库。有些应用程序还使用 J2EE、J2SE 等新
Java 版本的技术。这些应用程序在迁移到 .NET 时常常需要进行一些额外修改。这些修改通常非常简单：迁移后，应用程序的大部分（业务逻辑和
JDK 1.1.4 类）都会得到完美的迁移。在迁移后的代码中，不支持的技术将保留不变。您必须使用类似的 .NET 技术替换未迁移的 Java
技术以完成迁移。由于 .NET 提供了一套比 Java 更丰富的类，因此在进行技术替换时您常常可以进行一些重大改进。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">Swing 窗体软件包的迁移是一个很好的例子。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">迁移 Swing</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">Java
包含两个竞争的窗体软件包：Abstract Windowing Toolkit (AWT) 和 Swing。JDK 1.1.4 提供
AWT。Visual J# .NET 支持 AWT，可以通过 Java Language Conversion Assistant（Java
语言转换助手）将 AWT 转换为 Windows 窗体。JDK 1.1.4 可以使用一个附加的 Swing 库，这个库是 J2SE 和
J2EE 类库的一部分。Swing 窗体布局不能自动迁移到 .NET。在迁移过程中，代码中的 Javax.Swing 类保留不变，您必须用
Windows 窗体类来替换它。为此，请在被迁移的应用程序中对各 Swing 窗体执行以下步骤：</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">1. 向被迁移应用程序中添加一个新的 Windows 窗体</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">2. 向窗体中添加控件以获得与原有 Swing 窗体相同的布局</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">3. 将事件逻辑代码从被迁移的 Swing 窗体复制到新的 Windows 窗体中的事件处理程序</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">4. 从应用程序中删除被迁移的 Swing 窗体</font></div>
<font color="#333399" face="Tahoma" size="2"><img alt="" src="http://www.microsoft.com/china/community/images/TechArticleImages/java2dotnet05.gif"><br></font>
<div class="text4"><font color="#333399" face="Tahoma" size="2">图 2：在 Visual Studio 中重画 Swing 窗体</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">Windows
窗体提供了比 AWT 或 Swing 更丰富的环境，并且几乎在所有方面都包含 Java 平台中所能找到的功能的超集。例如，Windows
窗体使得控制窗体布局更加容易。Java
中的布局管理器常常会带来困难。获得所需的窗体布局需要了解布局管理器，并且即使是最基本的布局都需要编写许多代码。Windows
窗体通过为所有控件提供绝对定位而简化了窗体管理。另外，Windows
窗体可以通过靠接和锚定轻易地调整窗体大小。靠接规定一个控件应该始终占据屏幕的特定区域。锚定将窗体控件的一个或多个角&#8220;钉住"。调整窗体大小时使用这
些&#8220;钉"确定控件的位置。使用靠接和锚定通常可以彻底消除复杂的窗体大小调整代码。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">将 Swing 窗体迁移到 .NET 不仅非常简单，而且还可以利用 .NET Framework 更丰富的类改善应用程序。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">迁移 Java Server Page</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">Java
Server Page (JSP) 和 Servlet 都是创建支持 Java 的 Web 页的技术。JSP 提供了与 ASP
相似的脚本嵌入式 HTML 体系结构。Servlet 为没有 HTML 代码的编译后 JSP 页提供了一个机制。两项技术都使用 Java
代码，都为 Web 页提供基于事件的编程。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">JSP
和 Servlet 可以迁移到 ASP.NET，这么做有很多好处：ASP.NET 是一种更加强大的技术，它比 JSP、PHP（PHP
超文本预处理器）、ASP 及其他解释型脚本嵌入式 HTML 体系结构具有更高的可伸缩性和性能。但是，在撰写本文时还没有将 JSP 迁移到
ASP.NET 的自动系统。Microsoft 已经宣布在 2002 年下半年推出将 JSP 转换为 C# ASP.NET 的 Java
Language Conversion Assistant（Java 语言转换助手）扩展。同时也在考虑今后推出 JSP 到 Visual J#
.NET ASP.NET 的转换。</font></div>
<font color="#333399" face="Tahoma" size="2"><hr color="#cccccc" size="1"></font>
<div class="text2"><font color="#333399" face="Tahoma" size="2">Java 迁移到 .NET 实战演练 </font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">本节演练从 Visual J++ 6.0 到 Visual J# .NET 的升级和从 Java 到 C# 的转换。两个演练的目的都是介绍迁移技术。显然，两种迁移都远远不止这里介绍的内容。另外，可以使用任意一种迁移技术很好地迁移这两个应用程序示例。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">如何将 Visual J++ 6.0 项目升级到 Visual J# .NET</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">本节将一步步演练 Visual J++ 6.0 应用程序升级到 Visual J# .NET 和 .NET 的过程。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">要
升级的应用程序是 MDIWordPad 项目。这是 Visual J++ 6.0 附带的 MSDN 示例，可以作为 Visual J++
6.0 产品示例的一部分下载。此应用程序的功能与 WordPad
相似。它提供打开和编辑多个文本文件的功能。它还提供简单的格式化功能。这些功能是通过菜单或工具栏提供的。图 3 是 MDIWordpad
应用程序的 Visual J++ 版本。</font></div>
<font color="#333399" face="Tahoma" size="2"><img alt="" src="http://www.microsoft.com/china/community/images/TechArticleImages/java2dotnet06.gif"><br></font>
<div class="text4"><font color="#333399" face="Tahoma" size="2">图 3：用 J++ 编写的应用程序 MDIWordPad</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">为了得到最佳结果，应该使用 Visual J# .NET Upgrade Wizard（Visual J# .NET 升级向导）将 Visual J++ 6.0 项目升级到 Visual J# .NET。请按以下步骤进行升级：</font></div>
<ul class="list1">
    <li class="list2"><strong> </strong> <font color="#333399" face="Tahoma" size="2">在 Visual Studio .NET 中，从菜单中选择 File（文件），再选择 Open（打开），然后选择 Project（项目）。 </font></li>
    <li class="list2"><strong> </strong> <font color="#333399" face="Tahoma" size="2">找
    到 MDIWordPad.vjp 项目文件的位置并单击 Open（打开）。Visual Studio .NET 检测到您要打开的文件是
    Visual J++ 6.0 项目并打开 Visual J# .NET Upgrade Wizard（Visual J# .NET
    升级向导）。 </font></li>
    <li class="list2"><strong> </strong> <font color="#333399" face="Tahoma" size="2">阅
    读完介绍文字后，单击下一步进入向导的第二页。此页面要求提供您正在升级的项目的类型信息。MDIWordPad 示例是一个 Windows
    应用程序，因此默认值是正确的。如果您要升级的项目是一个控制台应用程序或类库，您就应该选择一个选项。确认选定了 Windows
    应用程序后，单击下一步进入升级向导的下一页。图 4：Visual J# .NET Upgrade Wizard（Visual J# .NET
    升级向导）提示选择项目目标类型</font> </li>
</ul>
<ul class="list1">
    <li class="list2"><strong> </strong> <font color="#333399" face="Tahoma" size="2">对
    于使用 Active X 控件或其他 COM
    引用的应用程序，您可以在这一页上明确添加对这些组件的引用。添加这些引用可以帮助升级向导找到项目中使用的附加类型。虽然即使您不在这里指定它们，升级
    向导也可以找到并将这些引用添加到项目中，但是现在添加它们可以加快升级速度。MDIWordPad 没有使用任何外部组件，因此请单击
    Next（下一步）而不需要做任何改动。 </font></li>
    <li class="list2"><strong> </strong> <font color="#333399" face="Tahoma" size="2">现在，升级向导开始评估项目并将项目文件和引用升级到 Visual J# .NET。会显示一个状态条和变化的文本，提示向导目前的进度。处理结束之后，升级向导将自动进入最后一页。 </font></li>
    <li class="list2"><strong> </strong> <font color="#333399" face="Tahoma" size="2">在
    向导的最后一页中，您可以使用一个复选框选择是否查看项目升级报告。单击
    Finish（完成）显示升级报告。升级报告列出了有关应用程序及升级进程的信息。如果在项目转换中发现了问题或丢失的引用，它们将在这里列出。该报告中
    还包括有关升级向导向新解决方案中添加的文件的信息。 </font></li>
    <li class="list2"><strong> </strong> <font color="#333399" face="Tahoma" size="2">在
    Solution Explorer（解决方案资源管理器）中双击文件 MDIWordPad.java 以便在 Code
    Editor（代码编辑器）中将其打开。通过浏览该文件，您会发现源代码看起来与原先完全相同。事实上，将一个项目升级到 Visual J#
    .NET 并不要求任何形式的源代码修改，所要求修改的只是解决方案、项目和资源文件。源代码文件本身的内容保持不变。 </font></li>
    <li class="list2"><strong> </strong> <font color="#333399" face="Tahoma" size="2">按
    F5 运行升级后的应用程序。应用程序的表现没有变化，您可以通过编辑一些文本来验证这一点。应用程序的操作与升级前完全相同，只是它现在是运行在
    .NET 上。图 5：MDIWordPad 的升级版本，运行在 Visual Studio .NET 上，使用 .NET</font> </li>
</ul>
<div class="text4"><font color="#333399" face="Tahoma" size="2">将
应用程序升级到 Visual J# .NET
是一个非常简单的过程。升级向导会帮助您提供顺利升级所需的信息，并且升级后项目的源代码没有任何变化。通过 Visual J# .NET
提供的工具升级到 .NET 是一个极其快速和简单的过程。由于二者有相似的语言和类库，因此升级到 Visual J# .NET 是将 J++
项目迁移到 .NET 的最快方法。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">如何将 Java 项目转换到 C#</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">本
节将一步步演练将一个 Visual J++ 6.0 应用程序转换到 C# 和 .NET 的过程。要转换的应用程序是一个称为 Island
Book Sales 的简单的最终用户购买程序。该应用程序演示转换的各个方面（AWT 到 Windows 窗体、JDBC 到
ADO.NET、Java 到 C#）。它还演示转换后需要解决的一些问题。Island Book Sales
有两个窗体。第一个窗体向用户展示可供出售的书的列表。所提供的书包含在一个 Access 数据库中，可使用 JDBC
读取该数据库。用户可以选择要购买的物品并将它放入购物车中。用户的购物车显示在第二个窗体中。该窗体使用户能够取消或购买购物车中的物品。图 6
是运行中的应用程序。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">注意：您必须将数据库 bookstore.mdb 注册为 ODBC DSN 才能运行 Bookstore 应用程序。</font></div>
<font color="#333399" face="Tahoma" size="2"><img alt="" src="http://www.microsoft.com/china/community/images/TechArticleImages/java2dotnet09.gif"><br></font>
<div class="text4"><font color="#333399" face="Tahoma" size="2">图 6：Island Book Sales 应用程序</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">以下是将应用程序转换到 C# 和 .NET 所需的步骤：</font></div>
<ul class="list1">
    <li class="list2"><strong> </strong> <font color="#333399" face="Tahoma" size="2">在 Visual Studio 中的 File（文件）菜单上单击 Open（打开），然后单击 Convert（转换）。这将启动 Conversion（转换）对话框。 </font></li>
    <li class="list2"><strong> </strong> <font color="#333399" face="Tahoma" size="2">选定 Java Language Conversion Assistant（Java 语言转换助手）图标后单击 OK（确定），启动 Java Language Conversion Assistant（Java 语言转换助手）。 </font></li>
    <li class="list2"><strong> </strong> <font color="#333399" face="Tahoma" size="2">虽然原应用程序是使用 Visual J++ 编写的，但本例中将它视作一个基于目录的转换。在向导的第二页中选择进行基于目录的转换选项，然后单击 Next（下一步）。 </font></li>
    <li class="list2"><strong> </strong> <font color="#333399" face="Tahoma" size="2">在 Java Language Conversion Assistant（Java 语言转换助手）的第三页中，选择包含应用程序源代码的目录，然后单击 Next（下一步）。 </font></li>
    <li class="list2"><strong> </strong> <font color="#333399" face="Tahoma" size="2">向导的第四页要求您输入一些有关应用程序的信息。键入&#8220;Bookstore"作为项目名。其他两个选项使用默认值，然后单击 Next（下一步）。图 7：提供有关您的项目的信息</font> </li>
</ul>
<ul class="list1">
    <li class="list2"><strong> </strong> <font color="#333399" face="Tahoma" size="2">现
    在，Java Language Conversion Assistant（Java
    语言转换助手）询问将转换后的项目文件写到哪里。选择要使用的目录后单击 Next（下一步），必要时让 Java Language
    Conversion Assistant（Java 语言转换助手）创建目录。 </font></li>
    <li class="list2"><strong> </strong> <font color="#333399" face="Tahoma" size="2">再次单击 Next（下一步）开始转换。转换完成后向导结束。单击 Close（关闭）按钮关闭向导。 </font></li>
    <li class="list2"><strong> </strong> <font color="#333399" face="Tahoma" size="2">按
    SHIFT+F7 打开窗体设计器。请注意，在设计器中可以看到窗体及其组件。Java Language Conversion
    Assistant（Java 语言转换助手）将 AWT 组件转换成了 Windows 窗体组件。可以使用 Windows
    窗体设计器查看转换后的窗体。图 8：AWT 框架被转换成了 Windows 窗体</font> </li>
</ul>
<ul class="list1">
    <li class="list2"><strong> </strong> <font color="#333399" face="Tahoma" size="2">从 View（视图）菜单中选择 Task List（任务列表）。您将看到转换后的文件中添加了几条升级说明。必须先解决这些问题应用程序才能正常运行。（如果现在生成和运行该应用程序，您将会发现该应用程序能够出现但是没有可用数据。） </font></li>
    <li class="list2"><strong> </strong> <font color="#333399" face="Tahoma" size="2">双
    击 Task List（任务列表）中的第一条注释，这将通过 retrieveData()
    方法将光标移到第一条错误。此方法负责查询数据库并将有关可用标题的信息返回给应用程序。浏览此方法的代码会发现 JDBC 调用被转换成了
    ADO.NET 调用。必须做些必要的修改后此代码才能正确运行。 </font></li>
    <li class="list2"><strong> </strong> <font color="#333399" face="Tahoma" size="2">在
    retrieveData 中，第一条注释 Upgrade_ToDo 说方法 Class.forName
    参数的格式已改变。这条注释下面的代码行用于加载原代码中的 JDBC 驱动程序，但是对于 ADO.NET
    不必这样做。请删除这条转换说明及其下面的代码行。 </font></li>
    <li class="list2"><strong> </strong> <font color="#333399" face="Tahoma" size="2">下一条转换注释告诉您 ADO.NET 中的连接字符串格式改变。如果您已经知道新的连接字符串格式，就将它输入到变量 URL 的声明中。 您还可以使用 Visual Studio .NET 中的工具编写字符串，而不必记住连接字符串的格式。 </font></li>
    <li class="list2"><strong> </strong> <font color="#333399" face="Tahoma" size="2">按
    SHIFT+F7 在设计器中打开窗体。从 ToolBox（工具箱）的 Data（数据）选项卡中，将一个 OleDbConnection
    对象拖到窗体上。在 Properties（属性）窗口中，单击 ConnectionString 属性的下拉列表并选择 New
    Connection（新连接）。这将显示 Data Link Properties（数据链接属性）对话框，帮助您指定一个数据库连接。 </font></li>
    <li class="list2"><strong> </strong> <font color="#333399" face="Tahoma" size="2">保
    存所提供书籍的信息的数据库是一个 Access 数据库。当从一个 ADO.NET 的 Access 数据库中读取数据时，您可以使用
    Microsoft Jet 4.0 OLE DB 提供程序。在 Data Link Properties（数据链接属性）对话框中单击
    Provider（提供程序）选项卡选择该数据提供程序，然后单击 Next（下一步）。找到该示例数据库的 .mdb 文件，然后单击
    OK（确定）。 </font></li>
    <li class="list2"><strong> </strong> <font color="#333399" face="Tahoma" size="2">DataAdapter
    的 ConnectionString 属性现在包含格式正确的示例数据库连接字符串。将此字符串复制并粘贴到 retrieveData 方法的
    URL 变量的声明中。在字符串前添加一个 @ 符号，以告诉 C# 应该按字面解释该字符串。修改后，声明或 URL 应该如下所示： String
    URL = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source =..\..\db.mdb;";
    现在，这个升级问题已经解决，您可以删除这条转换注释。后面的两条升级注释不影响本应用程序，可以忽略或删除它们。 </font></li>
    <li class="list2"><strong> </strong> <font color="#333399" face="Tahoma" size="2">按 F5 运行该应用程序。该应用程序将被加载，您可以看到它的工作状态与原应用程序相同。我们以最容易的方式将这个两层的应用程序从 Java 转换成了 C#。虽然该应用程序很小，但是上面介绍的方法适用于所有转换项目。</font> </li>
</ul>
<font color="#333399" face="Tahoma" size="2"><hr color="#cccccc" size="1"></font>
<div class="text2"><font color="#333399" face="Tahoma" size="2">小结</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">Java
到 Visual J# .NET 和 Java 到 C# 的迁移工具可以简便有效地将 Java 应用程序迁移到
.NET。另外，您迁移后的应用程序可以立即利用 .NET 的所有优点，这使开发人员能够向原有应用程序中添加新的功能，使最终用户能够享受到
.NET 应用程序比 Java 应用程序高得多的性能。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">在
迁移到 .NET 的过程中，开发人员可以将应用程序升级到 Visual J# .NET 或将其转换到 C#。这两种方法各有其优点：升级到
Visual J# .NET 速度最快、最简单，Java 应用程序可以迅速地获得 .NET 提供的功能；转换到 C#
速度较慢，但是转换后的应用程序可以获得最大程度的灵活性。是使用 Visual J# .NET 还是使用 Visual C#
.NET，这主要是一个个人选择问题。</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">选择任何一种迁移技术都能为您的旧应用程序注入新的活力。Visual Studio .NET 和 .NET Framework 标志着软件开发的新纪元。</font></div>
<font color="#333399" face="Tahoma" size="2"><hr color="#cccccc" size="1"></font>
<div class="text4"><font color="#333399" face="Tahoma" size="2">微软公司</font></div>
<div class="text4"><font color="#333399" face="Tahoma" size="2">2005年6月</font></div>
<br><img src ="http://www.cnitblog.com/cockerel/aggbug/31932.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2007-08-16 14:34 <a href="http://www.cnitblog.com/cockerel/archive/2007/08/16/31932.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IKVM使用笔记</title><link>http://www.cnitblog.com/cockerel/archive/2007/08/10/31595.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Fri, 10 Aug 2007 08:46:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2007/08/10/31595.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/31595.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2007/08/10/31595.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/31595.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/31595.html</trackback:ping><description><![CDATA[<p><a href="http://www.ikvm.net/"><font color="#1d58d1">IKVM</font></a>&nbsp;是一个.NET实现的java虚拟机及中间码翻译工具，它的0.34.0.2 Release版貎似有RPWT，用了一个Bruise传给我的hybrid-0.35.2769 才可以开始工作。</p>
&nbsp;
<p>它能够实现的功能： <br></p>
<ol>
    <li>与Java.exe功能类似的java虚拟机ikvm.exe
    </li>
    <li>通过ikvmc.exe将class文件或jar包转换成dll或exe文件（取决于类里边是否有main方法和参数设置），这时会作一些转换，包括： <br>
    <ul>
        <li>类型的映射，比如将java.lang.Object映射到System.Object等
        </li>
        <li>一些语言元素的对应转换，package对应namespace，jar文件对应dll文件<br></li>
    </ul>
    </li>
    <li>通过ikvmstub.exe来根据.net程序集生成对应的java存根类（有声明没有实现的类），使得引用到.net库的java代码能够被编译成.class文件。 </li>
</ol>
已解决的问题：<br>
<ol>
    <li>将java类转换成dll程序集或exe文件，从而被用C＃编写的类调用，或者独立运行。
    <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">C#貎似不能引用其它dll里的默认namespace里边的内容，所以java文件必须声明包，以便被转换成命名空间。</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">br</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">此外，因为&nbsp;java中默认访问权限的方法会被转换成internal方法，所以在java中必须将这些方法显式地声明为public</span></div>
    <br></li>
</ol>
已经发现的问题：<br>
<ol>
    <li>在java中，没有声明访问权限的方法默认是public的，但转换后的方法访问权限是internal的。
    </li>
    <li>0.34.0.2 Release版的问题：当被编译的类中有main()方法时，ikvm会自动将其编译成exe文件，但这个exe文件不可执行。不过该版本将类库编译成dll貌似没有问题，而且ikvm.Runtime.dll等可以放进全局程序集缓存（GAC）。
    </li>
    <li>hybrid-0.35.2769版的问题：该版本编译生成exe没有问题，但IKVM.Runtime.dll等自身的dll文件无法放入GAC，比较麻烦。
    </li>
    <li>在java部分使用了java.io.File类时会引发异常（仅测试了hybrid-0.35.2769版），（ <a href="http://www.frijters.net/ikvmbin-hybrid-0.35.2777.zip" _base_href="http://weblog.ikvm.net/">ikvmbin-hybrid-0.35.2777.zip</a>
    解决了这个问题）
    <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img id="Code_Closed_Image_165056" onclick="this.style.display='none'; code_closed_text_165056.style.display=" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" ?="" code_open_text_165056.style.display="'inline';" code_open_image_165056.style.display="'inline';" ?none?;?="" align="top" height="16" width="11"><img id="Code_Open_Image_165056" style="display: none;" onclick="this.style.display='none'; code_open_text_165056.style.display=" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" ?="" ?none?;?="" code_closed_text_165056.style.display="'inline';" code_closed_image_165056.style.display="'inline';" align="top" height="16" width="11"><span id="Code_Closed_Text_165056" style="border: 1px solid #808080; background-color: #ffffff;">异常输出</span><span id="Code_Open_Text_165056" style="display: none;"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">未处理的异常:&nbsp;&nbsp;System.TypeInitializationException:&nbsp;&#8220;java.lang.ClassLoader&#8221;的类<br>型初始值设定项引发异常。&nbsp;</span><span style="color: #000000;">---&gt;</span><span style="color: #000000;">&nbsp;System.TypeInitializationException:&nbsp;&#8220;IKVM.NativeC<br>ode.java.lang.Thread&#8221;的类型初始值设定项引发异常。&nbsp;</span><span style="color: #000000;">---&gt;</span><span style="color: #000000;">&nbsp;System.Reflection.Target<br>InvocationException:&nbsp;调用的目标发生了异常。&nbsp;</span><span style="color: #000000;">---&gt;</span><span style="color: #000000;">&nbsp;System.ArgumentNullException:<br>值不能为空。<br>&nbsp;&nbsp;&nbsp;在&nbsp;System.Threading.Monitor.Enter(Object&nbsp;obj)<br>&nbsp;&nbsp;&nbsp;在&nbsp;java.lang.ClassLoader.loadLibrary0(Class&nbsp;,&nbsp;File&nbsp;)<br>&nbsp;&nbsp;&nbsp;在&nbsp;java.lang.ClassLoader.loadLibrary(Class&nbsp;,&nbsp;String&nbsp;,&nbsp;Boolean&nbsp;)<br>&nbsp;&nbsp;&nbsp;在&nbsp;java.lang.Runtime.loadLibrary0(Class&nbsp;,&nbsp;String&nbsp;)<br>&nbsp;&nbsp;&nbsp;在&nbsp;java.lang.System.loadLibrary(String&nbsp;libname)<br>&nbsp;&nbsp;&nbsp;在&nbsp;java.lang.System.initializeSystemClass()<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;内部异常堆栈跟踪的结尾&nbsp;</span><span style="color: #000000;">---</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;在&nbsp;System.RuntimeMethodHandle._InvokeMethodFast(Object&nbsp;target,&nbsp;Object[]&nbsp;argum<br>ents,&nbsp;SignatureStruct</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;sig,&nbsp;MethodAttributes&nbsp;methodAttributes,&nbsp;RuntimeTypeHandle<br>&nbsp;typeOwner)<br>&nbsp;&nbsp;&nbsp;在&nbsp;System.RuntimeMethodHandle.InvokeMethodFast(Object&nbsp;target,&nbsp;Object[]&nbsp;argume<br>nts,&nbsp;Signature&nbsp;sig,&nbsp;MethodAttributes&nbsp;methodAttributes,&nbsp;RuntimeTypeHandle&nbsp;typeOwn<br>er)<br>&nbsp;&nbsp;&nbsp;在&nbsp;System.Reflection.RuntimeMethodInfo.Invoke(Object&nbsp;obj,&nbsp;BindingFlags&nbsp;invoke<br>Attr,&nbsp;Binder&nbsp;binder,&nbsp;Object[]&nbsp;parameters,&nbsp;CultureInfo&nbsp;culture,&nbsp;Boolean&nbsp;skipVisib<br>ilityChecks)<br>&nbsp;&nbsp;&nbsp;在&nbsp;System.Reflection.RuntimeMethodInfo.Invoke(Object&nbsp;obj,&nbsp;BindingFlags&nbsp;invoke<br>Attr,&nbsp;Binder&nbsp;binder,&nbsp;Object[]&nbsp;parameters,&nbsp;CultureInfo&nbsp;culture)<br>&nbsp;&nbsp;&nbsp;在&nbsp;System.Reflection.MethodBase.Invoke(Object&nbsp;obj,&nbsp;Object[]&nbsp;parameters)<br>&nbsp;&nbsp;&nbsp;在&nbsp;IKVM.NativeCode.java.lang.Thread..cctor()<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;内部异常堆栈跟踪的结尾&nbsp;</span><span style="color: #000000;">---</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;在&nbsp;IKVM.NativeCode.java.lang.ClassLoader.registerNatives()<br>&nbsp;&nbsp;&nbsp;在&nbsp;java.lang.ClassLoader.registerNatives()<br>&nbsp;&nbsp;&nbsp;在&nbsp;java.lang.ClassLoader..cctor()<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">---</span><span style="color: #000000;">&nbsp;内部异常堆栈跟踪的结尾&nbsp;</span><span style="color: #000000;">---</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;在&nbsp;java.lang.ClassLoader.getCallerClassLoader()<br>&nbsp;&nbsp;&nbsp;在&nbsp;java.lang.Class.forName(String&nbsp;className)<br>&nbsp;&nbsp;&nbsp;在&nbsp;fileTest.FileTest.mkdir(String&nbsp;str)<br>&nbsp;&nbsp;&nbsp;在&nbsp;FileTestMain.Main(String[]&nbsp;arg)</span></span><br></div>
    </li>
</ol>
<br><br><img src ="http://www.cnitblog.com/cockerel/aggbug/31595.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2007-08-10 16:46 <a href="http://www.cnitblog.com/cockerel/archive/2007/08/10/31595.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最近使用过的开源或免费工具(不断更新...)</title><link>http://www.cnitblog.com/cockerel/archive/2007/08/09/31545.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Thu, 09 Aug 2007 05:05:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2007/08/09/31545.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/31545.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2007/08/09/31545.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/31545.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/31545.html</trackback:ping><description><![CDATA[<p><a href="http://lucene.apache.org/java/docs/index.html">Lucene</a>&nbsp;[java]<br>一个优秀的全文检索工具<br><br><a href="http://www.getopt.org/luke/">Luke</a>&nbsp;[java]<br>Lucene索引查看器<br><br><a href="http://www.ikvm.net/">IKVM</a>&nbsp;[.net]<br>.NET实现的java虚拟机及中间码翻译工具<br><br><a href="http://poi.apache.org/">POI</a>&nbsp;[java]<br>操作Office文档的Java API（DOM模式）<br><br><a href="http://jxls.sourceforge.net/">JXLS</a>&nbsp;[java]<br>操作xls文档的Java API （Template模式）<br><br><a href="http://www.aisto.com/roeder/dotnet/">Reflector for .NET</a>&nbsp;[vc++]<br>优秀的.NET反编译器<br><br><a href="http://www.kpdus.com/jad.html">JAD</a> [c++]<br>优秀的java反编译器<br></p>
<p><a href="http://maven.apache.org/">Maven</a> [java]<br>Java项目管理工具</p>
<p><a  href="http://jarbrowser.sourceforge.net/">jarbrowser</a> [java]<br>包查找给管理工具，能够通过类名或包名反查jar包路径(本地)<br>如果是在线查找可通过<a  href="http://www.whatjar.net/">http://www.whatjar.net/</a><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<br>
<p>&#160;</p>
<br>
<p><br></p>
<p><br><br></p>
<p><br></p>
<p><br><br><br></p><img src ="http://www.cnitblog.com/cockerel/aggbug/31545.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2007-08-09 13:05 <a href="http://www.cnitblog.com/cockerel/archive/2007/08/09/31545.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>轻松设置classpath变量的方法</title><link>http://www.cnitblog.com/cockerel/archive/2007/07/31/31022.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Tue, 31 Jul 2007 09:23:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2007/07/31/31022.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/31022.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2007/07/31/31022.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/31022.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/31022.html</trackback:ping><description><![CDATA[最近老是要跟java打交道，最烦就是一天到黑要设置classpath变量了。搞到windows那个classpath环境变量鬼死那么长，都不知道怎么改。可不可以只把jar包复制到某个地方就大功告成呢？当然可以啦！首先写个cp.bat：<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: #008000;">REM</span><span style="color: #008000;">&nbsp;%windir%\system32\cp.bat</span><span style="color: #008000;"><br></span><span style="color: #000000;">@echo&nbsp;off<br></span><span style="color: #0000ff;">set</span><span style="color: #000000;">&nbsp;CLASSPATH</span><span style="color: #000000;">=</span><span style="color: #000000;">.<br></span><span style="color: #0000ff;">FOR</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">R&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">C:\Program&nbsp;Files\Java\jdk1.5.0_06\lib</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;%%F&nbsp;IN&nbsp;(</span><span style="color: #000000;">*</span><span style="color: #000000;">.jar)&nbsp;</span><span style="color: #0000ff;">DO</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">call</span><span style="color: #000000;">&nbsp;:addcp&nbsp;%%~sF<br></span><span style="color: #0000ff;">FOR</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">R&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">f:\acumon\pro\jars</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;%%F&nbsp;IN&nbsp;(</span><span style="color: #000000;">*</span><span style="color: #000000;">.jar)&nbsp;</span><span style="color: #0000ff;">DO</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">call</span><span style="color: #000000;">&nbsp;:addcp&nbsp;%%~sF<br><br></span><span style="color: #0000ff;">goto</span><span style="color: #000000;">&nbsp;extlibe<br><br>:addcp<br></span><span style="color: #0000ff;">set</span><span style="color: #000000;">&nbsp;CLASSPATH</span><span style="color: #000000;">=</span><span style="color: #000000;">%CLASSPATH%;%</span><span style="color: #000000;">1</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">goto</span><span style="color: #000000;">&nbsp;:eof<br><br>:extlibe<br></span><span style="color: #008000;">REM</span><span style="color: #008000;">&nbsp;echo&nbsp;%classpath%</span><span style="color: #008000;"><br></span></div>
<br>其中"f:\acumon\pro\jars" 是放jar包的文件路径，/R参数表示递归添加其下所有子文件夹里边的jar包，然后把它保存到path变量关照到的地方去（比如%windir%\system32），需要设置classpath就cp一下，是不是很简单？<img  src="http://www.cnitblog.com/images/cnitblog_com/cockerel/5112/o_4.gif" border="0"><br><img src ="http://www.cnitblog.com/cockerel/aggbug/31022.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2007-07-31 17:23 <a href="http://www.cnitblog.com/cockerel/archive/2007/07/31/31022.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL数据库与Lucene数据库性能测试报告[原] by 踏雪赤兔</title><link>http://www.cnitblog.com/cockerel/archive/2007/07/30/30911.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Mon, 30 Jul 2007 07:14:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2007/07/30/30911.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/30911.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2007/07/30/30911.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/30911.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/30911.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本测试试图对用相同数据制作的SQL数据库与Lucene数据库对语义相同的查询语句的性能作一个简单的比较与分析，以找出各自的优缺点，并讨论其各自的适用场合。&nbsp;&nbsp;<a href='http://www.cnitblog.com/cockerel/archive/2007/07/30/30911.html'>阅读全文</a><img src ="http://www.cnitblog.com/cockerel/aggbug/30911.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2007-07-30 15:14 <a href="http://www.cnitblog.com/cockerel/archive/2007/07/30/30911.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何使用JFlex、JavaCUP(详细代码模版) by 踏雪赤兔</title><link>http://www.cnitblog.com/cockerel/archive/2007/05/09/26781.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Wed, 09 May 2007 07:35:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2007/05/09/26781.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/26781.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2007/05/09/26781.html#Feedback</comments><slash:comments>24</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/26781.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/26781.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 博主踏雪赤兔按：　　编译原理的实验要求我们用JFlex和JavaCUP来对语言进行分析处理，JavaCUP有一个User's Manual教你怎样做，上面还有一个简单的计算器作为例子，但一试之下，却发现那个例子有不少错误，结果改了我n久才完成~当然马上就决定写一篇博客告诉大家怎样做才是正确的，以免像我那样白走许多弯路。我也不知是不是我找的那份不好，如果你有更好的manual，记得告诉我。撰写本文的...&nbsp;&nbsp;<a href='http://www.cnitblog.com/cockerel/archive/2007/05/09/26781.html'>阅读全文</a><img src ="http://www.cnitblog.com/cockerel/aggbug/26781.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2007-05-09 15:35 <a href="http://www.cnitblog.com/cockerel/archive/2007/05/09/26781.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>.NET 类库文档（MSDN）目录</title><link>http://www.cnitblog.com/cockerel/archive/2007/05/04/26627.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Fri, 04 May 2007 15:11:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2007/05/04/26627.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/26627.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2007/05/04/26627.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/26627.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/26627.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: .NET Framework 类库是一个由 Microsoft .NET Framework SDK 中包含的类、接口和值类型组成的库。该库提供对系统功能的访问，是建立 .NET Framework 应用程序、组件和控件的基础。 &nbsp;namespace目录Code highlighting produced by Actipro CodeHighlighter (freeware)...&nbsp;&nbsp;<a href='http://www.cnitblog.com/cockerel/archive/2007/05/04/26627.html'>阅读全文</a><img src ="http://www.cnitblog.com/cockerel/aggbug/26627.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2007-05-04 23:11 <a href="http://www.cnitblog.com/cockerel/archive/2007/05/04/26627.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学java的郁闷事</title><link>http://www.cnitblog.com/cockerel/archive/2007/04/29/26399.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Sun, 29 Apr 2007 09:35:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2007/04/29/26399.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/26399.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2007/04/29/26399.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/26399.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/26399.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 昨晚兴冲冲地跟berry学起了java图形编程，不料eclipse不知为什么一直不断的crash，有时甚至连打开的进度条还没有走完就crash了。把整个eclipse文件删去重装可以顶一段时间，但之后还是不断地crash，这个问题一直都解决不了。不知各位有何高见？错误报告Code highlighting produced by Actipro CodeHighlighter (freewar...&nbsp;&nbsp;<a href='http://www.cnitblog.com/cockerel/archive/2007/04/29/26399.html'>阅读全文</a><img src ="http://www.cnitblog.com/cockerel/aggbug/26399.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2007-04-29 17:35 <a href="http://www.cnitblog.com/cockerel/archive/2007/04/29/26399.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>算法·处女随机题：一次AC！</title><link>http://www.cnitblog.com/cockerel/archive/2007/04/02/25026.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Mon, 02 Apr 2007 04:20:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2007/04/02/25026.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/25026.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2007/04/02/25026.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/25026.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/25026.html</trackback:ping><description><![CDATA[今天是一个开心的日子，不禁因为<a title=编辑器新貎 href="http://www.cnitblog.com/cockerel/archive/2007/04/02/25023.html">全新的博客编辑器CuteEditor</a>令人倍感清爽，还因为我第一次用随机算法做的题，竟然一次AC<img height=20 src="http://www.cnitblog.com/Emoticons/QQ/05.gif" width=20 border=0>~~这条题的通过率只有:149/1237<span style="FONT-FAMILY: symbol">&#187;12.0%</span> 哦~<br>　　这道题便是北大ACM上最近这次月赛的<font color=#0000ff size=5><a title="pku: Washing Clothes" href="http://acm.pku.edu.cn/JudgeOnline/problem?id=3211"><font color=#0000ff size=5>Washing Clothes</font></a><font color=#000000 size=3>啦，题目大意是两公婆一齐洗一堆衣服（件数n&lt;100），每件衣服需要洗的时间是不同的，一件衣服只能由一个人来洗，一个人在只能洗完一件衣服后才能洗另外一件衣服，问他俩最少要用多长时间才能把衣服洗完。<br>　　这道题一看便知道是NP难的题目——经典的0-1背包问题的变种，由于规模高达100，用常规的确定型解法（搜索、动规等）复杂度高达2<sup>100</sup>。因此我决定构造一个随机算法。<br><br>　　我的算法大致如下：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">先求出洗完所有衣服的总时间sum及其一半target；<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>先假设所有衣服都是老公洗的，即husbandsum</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">sum,wifesum</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>循环括号中步骤T次：（本题我设T为10000）<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img id=Codehighlighter1_93_195_Open_Image onclick="this.style.display='none'; Codehighlighter1_93_195_Open_Text.style.display='none'; Codehighlighter1_93_195_Closed_Image.style.display='inline'; Codehighlighter1_93_195_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_93_195_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_93_195_Closed_Text.style.display='none'; Codehighlighter1_93_195_Open_Image.style.display='inline'; Codehighlighter1_93_195_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_93_195_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_93_195_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>若老公洗的衣服所花时间比老婆长，老婆随机地从老公那里拿一件衣服来洗；<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>若老婆洗的衣服所花时间比老公长，老公随机地从老婆那里拿一件衣服来洗；<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>若老公洗的衣服所花时间刚好为target，则直接跳出循环；<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>在循环中记录最接近target的那次老公所用的时间mi；<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>于是洗衣服的总时间则为max(mi,sum</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">mi)</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
</font></font>　　执行如此恩爱的随机算法后，你就可以得到你想要的AC了~~<img height=20 alt="" src="http://ic1.qq.com/qzone/em/e14.gif" width=20 border=0><br>附，程序源代码：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_121928 onclick="this.style.display='none'; Code_Closed_Text_121928.style.display='none'; Code_Open_Image_121928.style.display='inline'; Code_Open_Text_121928.style.display='inline';" height=16 src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_121928 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_121928.style.display='none'; Code_Closed_Image_121928.style.display='inline'; Code_Closed_Text_121928.style.display='inline';" height=16 src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_121928 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">程序源代码</span><span id=Code_Open_Text_121928 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">处女随机题：1AC~~&nbsp;^_^<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #008000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">2053229&nbsp;cockerel&nbsp;3211&nbsp;Accepted&nbsp;72K&nbsp;187MS&nbsp;G++&nbsp;1170B&nbsp;2007-04-02&nbsp;00:14:59&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #008000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstdio</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstring</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">ctime</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cstdlib</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">cmath</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;Ms(a,c)&nbsp;(memset(a,c,sizeof(a)))</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;max(a,b)&nbsp;(a&gt;b?a:b)</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a[</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">],c[</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;bk[</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">],bc;<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;clr[</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">11</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;ot[</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;oc[</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">11</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">10000</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img id=Codehighlighter1_360_1191_Open_Image onclick="this.style.display='none'; Codehighlighter1_360_1191_Open_Text.style.display='none'; Codehighlighter1_360_1191_Closed_Image.style.display='inline'; Codehighlighter1_360_1191_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_360_1191_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_360_1191_Closed_Text.style.display='none'; Codehighlighter1_360_1191_Open_Image.style.display='inline'; Codehighlighter1_360_1191_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()</span><span id=Codehighlighter1_360_1191_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_360_1191_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,j,k,n,m;<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;srand(time(NULL));<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img id=Codehighlighter1_431_1178_Open_Image onclick="this.style.display='none'; Codehighlighter1_431_1178_Open_Text.style.display='none'; Codehighlighter1_431_1178_Closed_Image.style.display='inline'; Codehighlighter1_431_1178_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_431_1178_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_431_1178_Closed_Text.style.display='none'; Codehighlighter1_431_1178_Open_Image.style.display='inline'; Codehighlighter1_431_1178_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&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&nbsp;%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">m,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">n),n</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_431_1178_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_431_1178_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ms(c,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">m;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,clr[i]);<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img id=Codehighlighter1_505_607_Open_Image onclick="this.style.display='none'; Codehighlighter1_505_607_Open_Text.style.display='none'; Codehighlighter1_505_607_Closed_Image.style.display='inline'; Codehighlighter1_505_607_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_505_607_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_505_607_Closed_Text.style.display='none'; Codehighlighter1_505_607_Open_Image.style.display='inline'; Codehighlighter1_505_607_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">n;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)</span><span id=Codehighlighter1_505_607_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_505_607_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d&nbsp;%s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">ot[i],oc[i]);<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;strcmp(clr[j],oc[i])</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">j);<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[j][c[j]</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ot[i];<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;sum</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,csum,rsum,target;<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img id=Codehighlighter1_659_1152_Open_Image onclick="this.style.display='none'; Codehighlighter1_659_1152_Open_Text.style.display='none'; Codehighlighter1_659_1152_Closed_Image.style.display='inline'; Codehighlighter1_659_1152_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_659_1152_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_659_1152_Closed_Text.style.display='none'; Codehighlighter1_659_1152_Open_Image.style.display='inline'; Codehighlighter1_659_1152_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">m;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)</span><span id=Codehighlighter1_659_1152_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_659_1152_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a[i],rc</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">c[i];<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;csum</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">c[i];&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">j)&nbsp;csum</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">r[j];<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rsum</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">csum;<br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">csum</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bc</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;mi</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">csum;<br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img id=Codehighlighter1_811_1123_Open_Image onclick="this.style.display='none'; Codehighlighter1_811_1123_Open_Text.style.display='none'; Codehighlighter1_811_1123_Closed_Image.style.display='inline'; Codehighlighter1_811_1123_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_811_1123_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_811_1123_Closed_Text.style.display='none'; Codehighlighter1_811_1123_Open_Image.style.display='inline'; Codehighlighter1_811_1123_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">T;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">j)</span><span id=Codehighlighter1_811_1123_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_811_1123_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(abs(rsum</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">target)</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">abs(mi</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">target))<br></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mi</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">rsum;<br></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img id=Codehighlighter1_886_981_Open_Image onclick="this.style.display='none'; Codehighlighter1_886_981_Open_Text.style.display='none'; Codehighlighter1_886_981_Closed_Image.style.display='inline'; Codehighlighter1_886_981_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_886_981_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_886_981_Closed_Text.style.display='none'; Codehighlighter1_886_981_Open_Image.style.display='inline'; Codehighlighter1_886_981_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(rsum</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">target)</span><span id=Codehighlighter1_886_981_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_886_981_Open_Text><span style="COLOR: #000000">{&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">随机将r[k]放到bk去</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">40</span><span style="COLOR: #008000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">rand()</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">rc;<br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rsum</span><span style="COLOR: #000000">-=</span><span style="COLOR: #000000">r[k];<br></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bk[bc</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">r[k];<br></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r[k]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">r[</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">rc];<br></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img id=Codehighlighter1_1002_1100_Open_Image onclick="this.style.display='none'; Codehighlighter1_1002_1100_Open_Text.style.display='none'; Codehighlighter1_1002_1100_Closed_Image.style.display='inline'; Codehighlighter1_1002_1100_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1002_1100_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1002_1100_Closed_Text.style.display='none'; Codehighlighter1_1002_1100_Open_Image.style.display='inline'; Codehighlighter1_1002_1100_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(rsum</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">target)</span><span id=Codehighlighter1_1002_1100_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1002_1100_Open_Text><span style="COLOR: #000000">{&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">随机将bk[k]放到r去</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">45</span><span style="COLOR: #008000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">rand()</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">bc;<br></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rsum</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">bk[k];<br></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r[rc</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">bk[k];<br></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bk[k]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">bk[</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">bc];<br></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">刚好平均</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">50</span><span style="COLOR: #008000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">51</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">max(mi,csum</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">mi);<br></span><span style="COLOR: #008080">52</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">53</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,sum);<br></span><span style="COLOR: #008080">54</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">55</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">56</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">57</span><span style="COLOR: #000000"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span></span></div>
<br>注：我做那题时题目并没有说明洗每件衣服的时间上限。<img src ="http://www.cnitblog.com/cockerel/aggbug/25026.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2007-04-02 12:20 <a href="http://www.cnitblog.com/cockerel/archive/2007/04/02/25026.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 数字输入的一个bug</title><link>http://www.cnitblog.com/cockerel/archive/2007/03/11/23873.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Sun, 11 Mar 2007 06:34:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2007/03/11/23873.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/23873.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2007/03/11/23873.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/23873.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/23873.html</trackback:ping><description><![CDATA[
		<p>　　庞大的Java为我们提供了很多有用的功能，对ACMer来说最有用的可能莫过于BigInteger类了，BigInteger功能强大，效率颇高，是过高精题的居家旅行必备好工具，但刚才试着用Java来过一道高精题<font color="#0000ff" size="5"><a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=2756">Autumn is a Genius</a></font>时，却总是莫名其妙地RTE（Runtime Error）掉，实在郁闷到极。<br />　　后来经过详细的测试，才发现BigInteger无法接受有前置'+'号的输入，比如读入+123会抛出一个异常：</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">Exception in thread "main" java.lang.NumberFormatException: For input string: "+123"<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />        at java.lang.NumberFormatException.forInputString(Unknown Source)<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />        at java.lang.Integer.parseInt(Unknown Source)<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />        at java.math.BigInteger.</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">init</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">(Unknown Source)<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />        at java.math.BigInteger.</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">init</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">(Unknown Source)<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />        at Autumn_is_a_Genius.main(Autumn_is_a_Genius.java:10)</span>
		</div>后来发现，即使是屏幕读入一个int也会抛出这样的异常。只要自己手工处理掉它就可以过了，20行不到的代码，呵呵~<img src ="http://www.cnitblog.com/cockerel/aggbug/23873.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2007-03-11 14:34 <a href="http://www.cnitblog.com/cockerel/archive/2007/03/11/23873.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[AS]Flash函数调试器及变量修改、赋值器发布！</title><link>http://www.cnitblog.com/cockerel/archive/2007/02/27/23362.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Mon, 26 Feb 2007 18:44:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2007/02/27/23362.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/23362.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2007/02/27/23362.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/23362.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/23362.html</trackback:ping><description><![CDATA[
		<p>
				<object id="debug" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" height="400" width="550" align="middle" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000">
						<param name="_cx" value="14552" />
						<param name="_cy" value="10583" />
						<param name="FlashVars" value="" />
						<param name="Movie" value="http://www.cnitblog.com/Files/cockerel/debug.swf.zip" />
						<param name="Src" value="http://www.cnitblog.com/Files/cockerel/debug.swf.zip" />
						<param name="WMode" value="Window" />
						<param name="Play" value="-1" />
						<param name="Loop" value="-1" />
						<param name="Quality" value="High" />
						<param name="SAlign" value="" />
						<param name="Menu" value="-1" />
						<param name="Base" value="" />
						<param name="AllowScriptAccess" value="sameDomain" />
						<param name="Scale" value="ShowAll" />
						<param name="DeviceFont" value="0" />
						<param name="EmbedMovie" value="0" />
						<param name="BGColor" value="FFFFFF" />
						<param name="SWRemote" value="" />
						<param name="MovieData" value="" />
						<param name="SeamlessTabbing" value="1" />
						<param name="Profile" value="0" />
						<param name="ProfileAddress" value="" />
						<param name="ProfilePort" value="0" />
						<param name="AllowNetworking" value="all" />
						<param name="AllowFullScreen" value="false" />
						<embed src="/Files/cockerel/debug.swf.zip" quality="high" bgcolor="#ffffff" width="550" height="400" name="debug" align="middle" allowscriptaccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
				</object>
				<br />
				<br />　　　相信大家只要用过ActionScript编程，一定会为调试（包括远程调试）Flash文件感到非常不便，笔者也曾经有过这样的烦恼。现在随着这款调试器的问世，这个问题终于迎刃而解了！<br />　　本调试器初始化时只是一个按钮，不会占用很多版面，你可以将它放在屏幕的右上角。它自动以所在的MC作为相对路径的起点。<br />　　本调试器外观上共分三部分：函数调试器、变量查看/赋值器及输出窗口。下面分别介绍它们。<br /><strong><u> ·函数调试器</u></strong><br />  功能：该调试器可以调用指定的函数，并将结果输出到屏幕和指定的变量中。<br />  用法：函数参数用','分隔<br />  　　　可以指定函数的this对象，留空表示本调试器所在的MC<br />  　　　可以用函数返回值为变量赋值，留空表示不赋值<br />  　　　本调试器尝试将各字段的字符串转换为代表的值，具体顺序见下文“myEval()转换的顺序”。</p>
		<p>
				<strong>
						<u> ·变量查看/赋值器</u>
				</strong>
				<br />  功能：该调试器可以查看指定的变量，并重新赋值<br />  用法：如果只想查看变量本身，点"查看"<br />  　　　如果想查看变量的属性、方法等，点"查看详细"<br />  　　　可以用变量的值或常量来赋值<br />  　　　本调试器尝试将各字段的字符串转换为代表的值，具体顺序见下文“myEval()转换的顺序”。</p>
		<p>　　编程方面，该调试器还在_global里注册了以下API以方便调试：<br /><strong><u> ·myEval()</u></strong><br />  用法1：function myEval(target:String):Object<br />  说明：本函数是eval()函数的扩展，支持转换到各种内置类型。<br />  用法2：function myEval(target:String, newVal:String):Object<br />  说明：本函数是eval()函数的扩展，支持用各种常量、变量为target赋值。</p>
		<p>
				<strong>
						<u> ·myEval()转换的顺序</u>
				</strong>
				<br /> 　　1、如果字符串由""括起，则返回""之间的字符串；<br /> 　　2、尝试转换为this、数字、布尔值和undefined；<br /> 　　3、尝试转换为已存在的全局变量；<br /> 　　4、尝试转换为已存在的时间轴变量；<br /> 　　5、尝试转换为新的时间轴变量；<br /> 　　6、返回undefined。</p>
		<p>
				<u>
						<strong> ·myTrace()</strong>
				</u>
				<br />  用法1：function myTrace(msg:String)<br />  说明：本函数是trace()函数的扩展，msg将被输出到调试器输出和Flash内置输出上<br />  用法2：function myTrace(msg:String,'+')<br />  说明：使用这种格式时，之前的调试器输出会被保留。</p>
		<p> <u><strong>·see()</strong></u><br />  用法：function see(targetStr:String):String<br />  说明：本函数可以查看对象本身、子对象、属性、方法等的类型和值。</p>
		<p>
				<strong>
						<u>一些例子：</u>
				</strong>
				<br /> ·在“函数调用”中输入Math.cos，在“函数参数”中输入Math.PI，点“执行”，则有如下输出：<br />  函数名：Math.cos<br />  参数名：Math.PI<br />  参数值：3.14159265358979<br />  this对象：_level0<br />  执行结果：-1</p>
		<p> ·在“变量名”中输入_root，点“查看详细”，则有如下输出：<br />  see _root (movieclip) = _level0<br />  setStyle (function)<br />  notifyStyleChangeInChildren (function)<br />  ……</p>
		<p> ·在“变量名”中输入_root.a，在“赋新值”中输入"hello"，点“赋值”，则有如下输出：<br />  变量名：_root.a<br />  变量类型：undefined<br />  变量值：undefined<br />  新变量类型：string<br />  新变量值：hello</p>
		<p> ·在你的程序里，调用see("_global")，则会返回<br />  see _global (object) = undefined<br />  __SVMouseWheelManager (object)<br />  getStyleCounter (number) = NaN<br />  see (function)<br />  myTrace (function)<br />  myEval (function)<br />  ……<br />　　希望大家喜欢这款调试器！如果有什么建议可以留言说说，想索要源代码的话也可以Q我或者回贴留下e-mail。<br /></p>
<img src ="http://www.cnitblog.com/cockerel/aggbug/23362.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2007-02-27 02:44 <a href="http://www.cnitblog.com/cockerel/archive/2007/02/27/23362.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[AS]完美的ActionScript 2.0 wordfile for UltraEdit by Acumon</title><link>http://www.cnitblog.com/cockerel/archive/2007/02/14/23075.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Wed, 14 Feb 2007 05:18:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2007/02/14/23075.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/23075.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2007/02/14/23075.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/23075.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/23075.html</trackback:ping><description><![CDATA[　　相信有大家对UltraEdit都不会太陌生，而事实上，它是一款相当好用的代码编写工具，现在，我不但写C＋＋程序时会使用它，连写ActionsScript代码文件也找它帮忙，它可定制的语法加亮设置使我摆脱了MM Flash那种单调的蓝黑界面。<br />　　不过要实现这一目标，需要一个好的wordfile支持。wordfile是UltraEdit进行语法高亮、缩进设置、函数列表等等功能的依据。我曾经在网上搜寻了不少ActionScript的wordfile，发现效果都不太理想，主要是收录的关键字太少，很多常用的关键字都没有收录，于是便决定亲手去做一个，并放上来与大家分享。<br />　　这份wordfile有以下几个特点：<br />　　1、能够比较完善地显示函数列表。其实我还不会写正则表达式，这几个是综合网上的几个wordfile得到的。<br />　　2、将高亮词划分为运算符、关键字（保留字）、类、属性、方法、事件、常数、自定义共八个部分。收录了动作脚本字典中的所有项和组件字典中的大部分项。其来源主要参考Flash自己的内部数据文件——我很开心地发现Flash关于语法高亮、代码提示的数据文件是用xml格式来保存的<img height="20" src="http://www.cnitblog.com/Emoticons/QQ/14.gif" width="20" border="0" />。于是我写了一个C++程序，它自动地把xml文件里相应的词找出来，然后进行排序。不过，其实我的工作量还是颇大的，因为Flash对关键字的分类过于简单，我必须手工地将它们划分成不同的类别。<br />　　3、这份wordfile引用了一些内置的高亮着色。比如运算符是STYLE_OPERATOR，关键字是 STYLE_KEYWORD，等等。它具体的着色可能取决于你的设置，如果你对UltraEdit内置的配色方案不满意，你可以在配置→编辑器提示→语法加亮→颜色选择中进行修改（事实上我也全部修改了）。<br />以下是wordfile全文，你只要把它添加到你原来的wordfile文件的末尾即可（原wordfile文件的地址见配置→编辑器提示→语法加亮→词语列表的完整路径）以下假定你的第20种语言未进行设置，否则你将第一行的/L20改为任一未被设置的语言序号即可。<br />注：以下着色仅作参考，并非该文件附有。<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">/L20"ActionScript 2.0(Acumon)" Line Comment = // Block Comment On = /* Block Comment Off = */ Escape Char = \ File Extensions = AS<br />/Delimiters = <a href="mailto:~!@%^&amp;*()-+=|\/{}[]:;&quot;'"><font color="#000000">~!@%^&amp;*()-+=|\/{}[]:;"</font>'</a>&lt;&gt; , .?<br />/Function String 1 = "%[^t ]++function[^t ]+^([~ ^t(]+^)[^t ]++(*)[ ^t{}]++$"<br />/Function String 2 = "[^t ]++^([a-zA-Z._]+^)[^t ]++=[^t ]++function[^t ]++(*)[ ^t{}]++$"<br />/Function String 3 = "%^(//[*]+^p"<br />/Variable String = "%[ ^t]++^([!-~ ^t&lt;&gt;]+*[~a-z^p]^)$S[ ^t;,()^-]"<br />/Indent Strings = "{" <br />/Unindent Strings = "}"<br />/Open Fold Strings = "{"<br />/Close Fold Strings = "}"<br />/C1"运算符" STYLE_OPERATOR<br /><font color="#ff6666"><font color="#0066ff">!<br />%<br />&amp;<br />*<br />+<br />-<br />// /<br />&lt;<br />=<br />&gt;<br />^<br />|<br />~<br />?<br />:<br />.<br />,<br />(<br />)<br />[<br />]<br />{<br />}</font><br /></font>/C2"关键字" STYLE_KEYWORD<br /><font color="#ff6666">#endinitclip #include #initclip <br />add and <br />break <br />case catch class continue <br />default delete do dynamic <br />else eq extends <br />finally for function <br />ge gt get<br />if implements import in instanceof interface <br />le lt <br />ne new not <br />on onClipEvent or <br />private public <br />return <br />set static switch super<br />this throw try typeof <br />var void <br />while with <br /></font>/C3"类" STYLE_IDENTIFIER<br /><font color="#ff9933">Accessibility Accordion Alert Array <br />Binding Boolean Button <br />Camera CheckBox Color ComboBox ComponentMixins ContextMenu ContextMenuItem CustomActions <br />DataGrid DataHolder DataSet DataType Date DateChooser DateField Delta DeltaItem DeltaPacket <br />EndPoint Error <br />Function <br />Key <br />Label List LoadVars Loader LocalConnection Log <br />Math MediaController MediaDisplay MediaPlayback Menu MenuBar Microphone Mouse MovieClip MovieClipLoader <br />NetConnection NetStream Number NumericStepper <br />Object <br />PendingCall PopUpManager PrintJob ProgressBar <br />RDBMSResolver RadioButton RadioButtonGroup <br />SOAPCall ScrollPane Selection SharedObject Sound Stage String StyleSheet System <br />TextArea TextField TextFormat TextInput TextSnapshot Tree TypedValue <br />Video Void <br />WebService WebServiceConnector Window <br />XML XMLConnector XMLNode XMLSocket XUpdateResolver <br /></font>/C4"属性" STYLE_ATTRIBUTE<br /><font color="#ff00ff">COMM <br />TALB TBPM TCOM TCON TCOP TDAT TDLY TENC TEXT TFLT TIME TIT1 TIT2 TIT3 TKEY TLAN TLEN TMED TOAL TOFN TOLY TOPE TORY TOWN TPE1 TPE2 TPE3 TPE4 TPOS TPUB TRCK TRDA TRSN TRSO TSIZ TSRX TSSE TYER <br />WXXX <br />__proto__ _accProps _alpha _currentframe _droptarget _focusrect _framesloaded _global _height _highquality _level _lockroot _name _parent _quality _root _rotation _soundbuftime _target _totalframes _url _visible _width _x _xmouse _xscale _y _ymouse _yscale <br />activePlayControl activityLevel album align arguments artist aspectRatio attributes autoLoad autoPlay autoSize avHardwareDisable <br />background backgroundColor backgroundStyle bandwidth blockIndent bold border borderColor bottomScroll bufferLength bufferTime bullet buttonHeight buttonStyleDeclaration buttonWidth bytesLoaded bytesTotal <br />callee caller cancelLabel capabilities caption cellRenderer childNodes closeButton color columnCount columnNames comment condenseWhite content contentPath contentType controlPlacement controllerPolicy conversion cuePoints currentFps customItems <br />data dataProvider dateFormatter dayNames deblocking direction disabledDays disabledRanges displayedMonth displayedYear docTypeDecl dropdown dropdownWidth duration <br />editable embedFonts enabled exactSettings <br />firstChild firstDayOfWeek firstVisibleNode focusEnabled focusedCell font forward_back fps <br />gain genre groupName <br />hLineScrollSize hPageScrollSize hPosition hScrollPolicy hasAccessibility hasAudio hasAudioEncoder hasEmbeddedVideo hasMP3 hasPrinting hasScreenBroadcast hasScreenPlayback hasStreamingAudio hasStreamingVideo hasVideoEncoder headerHeight height hitArea horizontal hscroll html htmlText <br />icon iconField iconFunction ignoreWhite indent indeterminate index isDebugger italic <br />label labelField labelFunction labelPlacement language lastChild leading leftMargin length loaded localFileReadDisable loop <br />manufacturer maxChars maxHPosition maxVPosition maxhscroll maximum maxscroll mediaType menu message messageStyleDeclaration minimum mode monthNames motionLevel motionTimeOut mouseWheelEnabled multiline multipleSelection muted <br />name names nextSibling nextValue noLabel nodeName nodeType nodeValue numChildren <br />okLabel orientation os <br />pageHeight pageWidth paperHeight paperWidth parentNode password percentComplete percentLoaded pixelAspectRatio playerType playheadTime playing position preferredHeight preferredWidth previousSibling previousValue print prototype pullDown <br />quality <br />rate resizableColumns restrict rewind rightMargin rowCount rowHeight <br />save scaleContent scaleMode scaleX scaleY screenColor screenDPI screenResolutionX screenResolutionY scroll scrollDrag selectable selectableRange selected selectedChild selectedData selectedDate selectedIndex selectedIndices selectedItem selectedItems selectedNode selectedNodes selection separatorBefore serverString showHeaders showMenu showToday silenceLevel silenceTimeOut size smoothing songtitle sortableColumns source status stepSize styleSheet <br />tabChildren tabEnabled tabIndex tabStops target text textColor textField textHeight textWidth time title titleStyleDeclaration toggle totalTime track trackAsMenu type <br />underline url useCodePage useEchoSuppression useHandCursor <br />vLineScrollSize vPageScrollSize vPosition vScrollPolicy value variable version visible volume <br />width windowlessDisable wordWrap <br />xmlDecl <br />year yesLabel <br />zoom</font><br />/C5"方法" STYLE_FUNCTION <br /><font color="#3399ff">MMExecute <br />UTC <br />abs acos addColumn addColumnAt addCuePoint addEventListener addItem addItemAt addListener addMenu addMenuAt addMenuItem addMenuItemAt addPage addProperty addRequestHeader addTreeNode addTreeNodeAt allowDomain allowInsecureDomain appendChild apply asin associateController associateDisplay atan atan2 attachAudio attachMovie attachSound attachVideo <br />beginFill beginGradientFill <br />call ceil charAt charCodeAt chr clear clearInterval cloneNode close concat connect copy cos createChild createClassObject createElement createEmptyMovieClip createMenu createObject createPopUp createSegment createTextField createTextNode curveTo <br />deletePopUp destroyChildAt destroyObject displayFull displayNormal doLayout domain duplicateMovieClip <br />editField endFill escape eval exp <br />findText floor flush fromCharCode fscommand <br />get getAscii getBeginIndex getBounds getBytesLoaded getBytesTotal getCaretIndex getChildAt getCode getColumnAt getColumnIndex getCount getCuePoints getDate getDay getDepth getDisplayIndex getEndIndex getFocus getFontList getFullYear getHours getInstanceAtDepth getIsBranch getIsOpen getItemAt getLocal getMenuAt getMenuEnabledAt getMenuItemAt getMilliseconds getMinutes getMonth getNewTextFormat getNextHighestDepth getNodeDisplayedAt getPan getProgress getProperty getRGB getSWFVersion getSeconds getSelected getSelectedText getSize getStyle getStyleNames getText getTextExtent getTextFormat getTextSnapshot getTime getTimer getTimezoneOffset getTransform getTreeNodeAt getURL getUTCDate getUTCDay getUTCFullYear getUTCHours getUTCMilliseconds getUTCMinutes getUTCMonth getUTCSeconds getVersion getVolume getYear globalToLocal gotoAndPlay gotoAndStop <br />handleEvent hasChildNodes hide hideBuiltInItems hitTest hitTestTextNearPos <br />ifFrameLoaded indexOf insertBefore install int invalidate isDown isFinite isNaN isToggled <br />join <br />lastIndexOf length lineStyle lineTo list load loadClip loadMovie loadMovieNum loadSound loadVariables loadVariablesNum localToGlobal log <br />max mbchr mblength mbord mbsubstring min move moveTo <br />nextFrame nextScene <br />on onClipEvent open ord <br />parseCSS parseFloat parseInt parseXML pause play pop pow prevFrame prevScene print printAsBitmap printAsBitmapNum printNum push <br />random redraw refresh refreshPane registerClass removeAll removeAllColumns removeAllCuePoints removeColumnAt removeCuePoint removeItemAt removeListener removeMenuAt removeMenuItem removeMenuItemAt removeMovieClip removeNode removeTextField removeTreeNodeAt replaceItemAt replaceSel replaceText reverse round <br />seek send sendAndLoad setBufferTime setClipboard setDate setFocus setFullYear setGain setHPosition setHours setIcon setInterval setIsBranch setIsOpen setMask setMedia setMenuEnabledAt setMenuItemEnabled setMenuItemSelected setMilliseconds setMinutes setMode setMonth setMotionLevel setNewTextFormat setPan setProgress setPropertiesAt setProperty setRGB setRate setSeconds setSelectColor setSelected setSelection setSilenceLevel setSize setStyle setTextFormat setTime setTransform setUTCDate setUTCFullYear setUTCHours setUTCMilliseconds setUTCMinutes setUTCMonth setUTCSeconds setUseEchoSuppression setVPosition setVolume setYear shift show showSettings sin slice sort sortItems sortItemsBy sortOn spaceColumnsEqually splice split sqrt start startDrag stop stopAllSounds stopDrag substr substring swapDepths <br />tan targetPath tellTarget toggleHighQuality toLowerCase toString toUpperCase trace transform <br />unescape uninstall unloadClip unloadMovie unloadMovieNum unshift unwatch updateAfterEvent <br />valueOf <br />watch <br /></font>/C6"事件" STYLE_EVENT<br /><font color="#0000ff">allowDomain allowInsecureDomain <br />cellEdit cellFocusIn cellFocusOut cellPress change click close columnStretch complete cuePoint <br />data dragOut dragOver draw <br />enter enterFrame <br />focusIn focusOut <br />headerRelease <br />itemRollOut itemRollOver <br />keyDown keyPress keyUp <br />load <br />menuHide menuShow mouseDown mouseDownOutside mouseMove mouseUp move <br />nodeClose nodeOpen <br />onActivity onChanged onClose onConnect onData onDragOut onDragOver onEnterFrame onID3 onKeyDown onKeyUp onKillFocus onLoad onMouseDown onMouseMove onMouseUp onMouseWheel onPress onRelease onReleaseOutside onResize onRollOut onRollOver onScroller onSelect onSetFocus onSoundComplete onStatus onSync onUnload onXML open <br />pause play playheadChange press progress <br />release releaseOutside resize rollOut rollOver <br />scroll start <br />unload <br />volume <br /></font>/C7"常数" STYLE_ELEMENT<br /><font color="#990000">-Infinity <br />ALT <br />BACKSPACE <br />CAPSLOCK CASEINSENSITIVE CONTROL <br />DELETEKEY DESCENDING DOWN <br />E END ENTER ESCAPE <br />HOME <br />INSERT Infinity <br />LEFT LN10 LN2 LOG10E LOG2E <br />MAX_VALUE MIN_VALUE <br />NEGATIVE_INFINITY NUMERIC NaN <br />PGDN PGUP PI POSITIVE_INFINITY <br />RETURNINDEXEDARRAY RIGHT <br />SHIFT SPACE SQRT1_2 SQRT2 <br />TAB <br />UNIQUESORT UP <br />false <br />newline null <br />true <br />undefined <br /></font>/C8"自定义" STYLE_ELEMENT<br /></div><img src ="http://www.cnitblog.com/cockerel/aggbug/23075.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2007-02-14 13:18 <a href="http://www.cnitblog.com/cockerel/archive/2007/02/14/23075.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[AS]全Flash编程实现网站-07年01月31日版</title><link>http://www.cnitblog.com/cockerel/archive/2007/01/31/22466.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Tue, 30 Jan 2007 17:20:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2007/01/31/22466.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/22466.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2007/01/31/22466.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/22466.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/22466.html</trackback:ping><description><![CDATA[
		<p>
				<object id="web" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" height="600" width="800" align="middle" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000">
						<param name="_cx" value="21167" />
						<param name="_cy" value="15875" />
						<param name="FlashVars" value="" />
						<param name="Movie" value="http://www.cnitblog.com/Files/cockerel/web070131.swf.zip?menuFile=http://www.cnitblog.com/Files/cockerel/menu.xml.zip&amp;travelFile=http://www.cnitblog.com/Files/cockerel/travel_blog.xml.zip&amp;flightFile=http://www.cnitblog.com/Files/cockerel/flight.xml.zip" />
						<param name="Src" value="http://www.cnitblog.com/Files/cockerel/web070131.swf.zip?menuFile=http://www.cnitblog.com/Files/cockerel/menu.xml.zip&amp;travelFile=http://www.cnitblog.com/Files/cockerel/travel_blog.xml.zip&amp;flightFile=http://www.cnitblog.com/Files/cockerel/flight.xml.zip" />
						<param name="WMode" value="Window" />
						<param name="Play" value="-1" />
						<param name="Loop" value="-1" />
						<param name="Quality" value="High" />
						<param name="SAlign" value="" />
						<param name="Menu" value="-1" />
						<param name="Base" value="" />
						<param name="AllowScriptAccess" value="sameDomain" />
						<param name="Scale" value="ShowAll" />
						<param name="DeviceFont" value="0" />
						<param name="EmbedMovie" value="0" />
						<param name="BGColor" value="FFFFFF" />
						<param name="SWRemote" value="" />
						<param name="MovieData" value="" />
						<param name="SeamlessTabbing" value="1" />
						<param name="Profile" value="0" />
						<param name="ProfileAddress" value="" />
						<param name="ProfilePort" value="0" />
						<param name="AllowNetworking" value="all" />
						<param name="AllowFullScreen" value="false" />
						<embed src="/Files/cockerel/web070131.swf.zip?menuFile=http://www.cnitblog.com/Files/cockerel/menu.xml.zip&amp;travelFile=http://www.cnitblog.com/Files/cockerel/travel_blog.xml.zip&amp;flightFile=http://www.cnitblog.com/Files/cockerel/flight.xml.zip" quality="high" bgcolor="#ffffff" width="800" height="600" name="web" align="middle" allowscriptaccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
				</object>
		</p>
		<hr />
　　距离上次发布全Flash编程网站的Beta已经有将近两个月了。在这两个月里，我一直在努力地改进这个作品 
<p></p><p>（当然，有时我不得不暂时中止，比如说去上海比赛暂停了一个星期，期末考也有近两星期无暇顾及它等乖）</p><p>这样逐渐积累下来，这次发布的Beta已经和上次的有较大的不同，现将其进展情况摘要列出：</p><p><strong><u>外观及交互功能的进展<br /></u></strong>改变了网站各页的设计，将每页都分为公用的页首和各自私有的正文页面。这种设计类似于普通网站的框架网页，但比之更为自然、随意和易于升级维护。<br />　　添加了使用方便的导航栏，以便于在各页间进行跳转，其所有数据也是用独立的xml数据文件保存，以坚持数据、功能、显示相互分离的原则。花了很大力气完成了导航栏与各页各组件的通信。<br />　　重新制作了首页页面。<br />　　在经典行程页面增加了地区选择组件。并完成了它与线路列表和行程介绍板块之间的通信。<br />　　重写了各种介绍板块动态显示的代码，使之更加简洁和高效。<br />　　修敢了旅游线路数据文件的结构，使之能保存多地区的旅游数据，并且加入对图片地址链接的信息，使得在通过文字显示每天的旅游介绍时，还可以动态显示相关的图片，并根据数据文件的记录自动加载和自动切换</p><p>。<br />　　针对上一个Beta版本的行程介绍板块在旅游天数过多时较难切换页面的问题，这个版本特地引入“切换到第一天”、“切换到最后一天”、“切换到指定的任意一天”等的控件，再加上原有的“页面标签”和“切换到前一天”、“切换到后一天”组件，相信现在进行页面跳转将是一种愉快的体验。<br />　　在机票查询页面上使用两个ComboBox（分别用于选择地区和城市）和一个DataGrid来显示航线消息。之间信息能够相互同步更新。<br />　　改写了航线数据文件的结构，将原本航线数据与显示控制信息混杂保存的方式改变为数据和显示抑制信息分别用不同的分支保存。并增加了其对显示的控制功能。同时，将所有的属性名改为英文，以保证与IE等浏览器的兼容性，进一步的扩展做准备　　<br />　　<br /><u><strong>内部实现的技术进展</strong></u><br />　　通过自写函数assert()、assertValid()和see()还有简单调试面板来使跟踪变量、查找错误提高了效率。<br />　　增加了自写的组件事件设置函数，使为组件设置响应函数变成一项简单的工作。<br />　　增加了用于追踪组件事件或调用者的信息的debug函数。<br />　　设计了onFrameManager，使用其onFrame函数可以有效地处理页面跳转时的异步问题，通过延迟一帧触发的方式来保证在调用前相关变量和组件已被正确初始化。<br />　　在各函数里大量使用自定义的断言以保证程序的健壮性和阻止数据错误传播。同时引入Alert组件，使得用户能很容易地了解到相关的错误。<br />　　为改变此前的Beta版本中对xml文件进行读取的相关代码冗长、可读性低的缺点，引入XPath类，尝试通过xml路径来查找、引用节点。</p><p><u><strong>已解决的技术难题<br /></strong></u>　　最重要的一个是解决了MenuBar组件被点击时不发出事件的问题，通过重写其内部的实现函数来解决。<br />　　还有是在页面跳转时变量失效与函数被调用时相关变量未初始化的问题，主要通过一个Array对函数寄存和延迟一帧触发来完成。<br />　　解决了在一些情况下会导致死循环的问题。<br />　　</p><img src ="http://www.cnitblog.com/cockerel/aggbug/22466.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2007-01-31 01:20 <a href="http://www.cnitblog.com/cockerel/archive/2007/01/31/22466.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[AS]用MenuBar控件来制作网页导航栏！</title><link>http://www.cnitblog.com/cockerel/archive/2007/01/25/22297.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Thu, 25 Jan 2007 05:19:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2007/01/25/22297.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/22297.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2007/01/25/22297.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/22297.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/22297.html</trackback:ping><description><![CDATA[
		<p>　　Flash MX 20004 pro 的V2.0控件中的MenuBar，使用方便，功能强大，只要轻轻地喂它一个xml文档，它就能够自动生成任意多级的菜单，确实很讨人喜欢，似乎是做网页导航栏、导航菜单的不二选择。但是MenuBar也有个致使的弱点：它除了从UIObject和UIComponent里继承过来的事件外自己没有定义任何的事件！也就是说，当你单击MenuBar上面的项时，它没有发出任何事件！<br />　　怎么办呢？在网上狂搜了一下解决办法，发现提出这个问题不少，但回答却是一个也没有，看来怎能自己动手解决了。<br />　　经过整晚的测试、调试、查阅代码，最终在查阅MenuBar的源代码时取得了重大进展——当MenuBar上的项被单击时，其包含的MenuBarItem类对象会发生onRelease事件！然而，那种对象被保存在一个叫“__menuBarItems”的数组中，比较难以调用（我想你也不希望代码里面出现一堆以“__”开头的标识符吧）。再深入地查阅又发现，那个MenuBarItem.onRelease()函数默认会调用MenuBar.onItemRelease()来向其报告，从而更新其辖下的Menu对象。于是，解决办法便相当明了了——重写onItemRelease函数~<br />　　但是，使用onItemRelease与我们常见的事件处理方法很不同，它并非一个真正的组件事件，所以不能用addEventListener()来注册侦听器；它也与Button的onRelease等事件有所不同：后者的默认值是undefined，重写之不会带来任何副作用，而onItemRelease()是一个掌管Menu对象显示的内部函数，直接覆盖重写会造成严重错误。解决方法是：改名原函数，并在重写时调用之。示例代码如下：</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">menuBar.dataProvider</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> XML(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&lt;menu&gt;&lt;item label=\</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">第一项\</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">/&gt;&lt;&lt;item label=\</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">第二项\</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">/&gt;&lt;/menu&gt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">).firstChild;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">改名原函数</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">menuBar._onItemRelease</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">menuBar.onItemRelease;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">重写onItemRelease方法</span>
				<span style="COLOR: #008000">
						<br />
						<img id="Codehighlighter1_223_311_Open_Image" onclick="this.style.display='none'; Codehighlighter1_223_311_Open_Text.style.display='none'; Codehighlighter1_223_311_Closed_Image.style.display='inline'; Codehighlighter1_223_311_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_223_311_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_223_311_Closed_Text.style.display='none'; Codehighlighter1_223_311_Open_Image.style.display='inline'; Codehighlighter1_223_311_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #000000">menuBar.onItemRelease</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">function(index:Number)</span>
				<span id="Codehighlighter1_223_311_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cnitblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_223_311_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    _onItemRelease(index);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    textInput.text</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">Item </span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000">index</span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000"> was clicked</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">;</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">这里可以加上你的事件处理函数</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />
						</span>
						<span style="COLOR: #000000">}</span>
				</span>
		</div>
		<br />效果如下：<br /><object id="menu" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" height="100" width="300" align="middle" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"><param name="allowScriptAccess" value="sameDomain" /><param name="movie" value="http://www.cnitblog.com/Files/cockerel/menubar.swf.zip" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><embed src="/Files/cockerel/menubar.swf.zip" quality="high" bgcolor="#ffffff" width="300" height="100" name="menu" align="middle" allowscriptaccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /></object><br />至此，便大功告成了~~是不是很简单？相信聪明的你一定能够举一反三，对类似的“内部事件”进行响应了<img height="20" src="http://www.cnitblog.com/Emoticons/QQ/23.gif" width="20" border="0" /><br /><br />P.S.：后来又在google和baidu上搜索了onItemRelease，结果为零~看来我有可能成为中文Flash界第一个发现此方法的人哦~~嘻嘻<img height="20" src="http://www.cnitblog.com/Emoticons/QQ/05.gif" width="20" border="0" /><img src ="http://www.cnitblog.com/cockerel/aggbug/22297.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2007-01-25 13:19 <a href="http://www.cnitblog.com/cockerel/archive/2007/01/25/22297.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解题报告：O(K)空间的基数排序</title><link>http://www.cnitblog.com/cockerel/archive/2007/01/22/22177.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Sun, 21 Jan 2007 18:33:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2007/01/22/22177.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/22177.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2007/01/22/22177.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/22177.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/22177.html</trackback:ping><description><![CDATA[
		<p>　　今天，AC在程痴群问到一个问题：如何用O(N+K)时间，O(K)辅助空间完成对N个关键字范围为[0,K)的项的基数排序？想了一下，主要难点在O(K)空间上，也就是说，你不能另开一个大小为N的数组（否则就是无敌BC题了）。想了一下，得算法如下。<br />　　容易想到用基数排序，但由于题目限制不能用链表或数组将其全部收集起来，便想到用数组本身做收集器，这样问题就变成如何处理将被收集的项与未被排序的项的空间冲突问题了。方法也很简单，将这两项交换，则原来将被收集的项被移到该它的归宿地，而那时的未排序项则成为下一个将被收集的项。<br />　　具体代码如下，我用了一个c[]数组统计各关键字拥有的项的数目，然后自然可以O(K)地求出所有队列的首地址和尾地址（初始时两者相等，因为所有收集队列皆空）<br />　　然后用i指针去扫描数组，若发现一个未被排序的项——其特征是所处下标比其收集队列的首地址还小，则将其与收集队列的尾地址上的项交换，同时将收集队列的尾指针加1。这样当i扫描到数组尾时，排序也就完成了。<br />　　初看代码时看到for里边有个while，很容易误以为是O（N^2）的算法，但实际上它是O(N)的，证明方法很简单：对于数组中的任意一个项，它都不会被移动超过2次，不会比j指针访问超过1次，不会比i指针访问超过2次。　</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img id="Codehighlighter1_0_74_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_74_Open_Text.style.display='none'; Codehighlighter1_0_74_Closed_Image.style.display='inline'; Codehighlighter1_0_74_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_0_74_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_74_Closed_Text.style.display='none'; Codehighlighter1_0_74_Open_Image.style.display='inline'; Codehighlighter1_0_74_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				<span id="Codehighlighter1_0_74_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span>
				<span id="Codehighlighter1_0_74_Open_Text">
						<span style="COLOR: #008000">/*</span>
						<span style="COLOR: #008000">    <br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    解决：用O(N+K)时间，O(K)辅助空间完成对N个关键字范围为[0,K)的项的基数排序<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    最后更新：07-01-22<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    提问者：AC<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span>
						<span style="COLOR: #008000">*/</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />#include</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">cstdio</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />#include</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">cstring</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />typedef </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> T; </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">定义排序类型,以int为例</span>
				<span style="COLOR: #008000">
						<br />
						<img id="Codehighlighter1_151_180_Open_Image" onclick="this.style.display='none'; Codehighlighter1_151_180_Open_Text.style.display='none'; Codehighlighter1_151_180_Closed_Image.style.display='inline'; Codehighlighter1_151_180_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_151_180_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_151_180_Closed_Text.style.display='none'; Codehighlighter1_151_180_Open_Image.style.display='inline'; Codehighlighter1_151_180_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> key(T item)</span>
				<span id="Codehighlighter1_151_180_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cnitblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_151_180_Open_Text">
						<span style="COLOR: #000000">{    </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">对T类型定义关键字</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">        </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> item;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img id="Codehighlighter1_189_205_Open_Image" onclick="this.style.display='none'; Codehighlighter1_189_205_Open_Text.style.display='none'; Codehighlighter1_189_205_Closed_Image.style.display='inline'; Codehighlighter1_189_205_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_189_205_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_189_205_Closed_Text.style.display='none'; Codehighlighter1_189_205_Open_Image.style.display='inline'; Codehighlighter1_189_205_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />T a[]</span>
				<span style="COLOR: #000000">=</span>
				<span id="Codehighlighter1_189_205_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cnitblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_189_205_Open_Text">
						<span style="COLOR: #000000">{</span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">,</span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">,</span>
						<span style="COLOR: #000000">2</span>
						<span style="COLOR: #000000">,</span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">,</span>
						<span style="COLOR: #000000">2</span>
						<span style="COLOR: #000000">,</span>
						<span style="COLOR: #000000">2</span>
						<span style="COLOR: #000000">,</span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">,</span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">}</span>
				</span>
				<span style="COLOR: #000000">; </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">待排序数组</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">const</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> N</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #0000ff">sizeof</span>
				<span style="COLOR: #000000">(a)</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #0000ff">sizeof</span>
				<span style="COLOR: #000000">(</span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">a);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">const</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> K</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">3</span>
				<span style="COLOR: #000000">; </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">排序关键字范围[0,K)</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> c[K]; </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">队列计数器</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> b[K]; </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">排序队列头指针</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> e[K];    </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">排序队列尾指针</span>
				<span style="COLOR: #008000">
						<br />
						<img id="Codehighlighter1_347_628_Open_Image" onclick="this.style.display='none'; Codehighlighter1_347_628_Open_Text.style.display='none'; Codehighlighter1_347_628_Closed_Image.style.display='inline'; Codehighlighter1_347_628_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_347_628_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_347_628_Closed_Text.style.display='none'; Codehighlighter1_347_628_Open_Image.style.display='inline'; Codehighlighter1_347_628_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> sort()</span>
				<span id="Codehighlighter1_347_628_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cnitblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_347_628_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> i,j;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    memset(c,</span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">,</span>
						<span style="COLOR: #0000ff">sizeof</span>
						<span style="COLOR: #000000">(c));<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">for</span>
						<span style="COLOR: #000000">(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; </span>
						<span style="COLOR: #000000">++</span>
						<span style="COLOR: #000000">i) c[key(a[i])]</span>
						<span style="COLOR: #000000">++</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">for</span>
						<span style="COLOR: #000000">(b[</span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">]</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">e[</span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">]</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">,i</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">; i</span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">K; </span>
						<span style="COLOR: #000000">++</span>
						<span style="COLOR: #000000">i)    b[i]</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">e[i]</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">b[i</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">c[i</span>
						<span style="COLOR: #000000">-</span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">];<br /><img id="Codehighlighter1_495_626_Open_Image" onclick="this.style.display='none'; Codehighlighter1_495_626_Open_Text.style.display='none'; Codehighlighter1_495_626_Closed_Image.style.display='inline'; Codehighlighter1_495_626_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_495_626_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_495_626_Closed_Text.style.display='none'; Codehighlighter1_495_626_Open_Image.style.display='inline'; Codehighlighter1_495_626_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">for</span>
						<span style="COLOR: #000000">(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; </span>
						<span style="COLOR: #000000">++</span>
						<span style="COLOR: #000000">i)</span>
						<span id="Codehighlighter1_495_626_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cnitblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_495_626_Open_Text">
								<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_520_623_Open_Image" onclick="this.style.display='none'; Codehighlighter1_520_623_Open_Text.style.display='none'; Codehighlighter1_520_623_Closed_Image.style.display='inline'; Codehighlighter1_520_623_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_520_623_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_520_623_Closed_Text.style.display='none'; Codehighlighter1_520_623_Open_Image.style.display='inline'; Codehighlighter1_520_623_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">while</span>
								<span style="COLOR: #000000">(i</span>
								<span style="COLOR: #000000">&lt;</span>
								<span style="COLOR: #000000">b[key(a[i])])</span>
								<span id="Codehighlighter1_520_623_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.cnitblog.com/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_520_623_Open_Text">
										<span style="COLOR: #000000">{    </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000">a[i]的位置不合法</span>
										<span style="COLOR: #008000">
												<br />
												<img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
										</span>
										<span style="COLOR: #000000">            j</span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000">e[key(a[i])]</span>
										<span style="COLOR: #000000">++</span>
										<span style="COLOR: #000000">;    </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000">j指向a[i]所属队列尾</span>
										<span style="COLOR: #008000">
												<br />
												<img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
										</span>
										<span style="COLOR: #000000">            T tmp</span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000">a[j];    a[j]</span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000">a[i]; a[i]</span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000">tmp; </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000">交换a[i],a[j]</span>
										<span style="COLOR: #008000">
												<br />
												<img src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />
										</span>
										<span style="COLOR: #000000">        }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}<br /></span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />#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 />
						<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">using</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">namespace</span>
				<span style="COLOR: #000000"> std;<br /><img id="Codehighlighter1_681_756_Open_Image" onclick="this.style.display='none'; Codehighlighter1_681_756_Open_Text.style.display='none'; Codehighlighter1_681_756_Closed_Image.style.display='inline'; Codehighlighter1_681_756_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_681_756_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_681_756_Closed_Text.style.display='none'; Codehighlighter1_681_756_Open_Image.style.display='inline'; Codehighlighter1_681_756_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> main()</span>
				<span id="Codehighlighter1_681_756_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cnitblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_681_756_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    sort();<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">for</span>
						<span style="COLOR: #000000">(</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> 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; </span>
						<span style="COLOR: #000000">++</span>
						<span style="COLOR: #000000">i) cout</span>
						<span style="COLOR: #000000">&lt;&lt;</span>
						<span style="COLOR: #000000">a[i]</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">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    cout</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">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<br />如果你有别的算法，或者发现文中的错漏，请不吝赐教！谢谢！<img height="20" src="http://www.cnitblog.com/Emoticons/QQ/23.gif" width="20" border="0" /><img src ="http://www.cnitblog.com/cockerel/aggbug/22177.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2007-01-22 02:33 <a href="http://www.cnitblog.com/cockerel/archive/2007/01/22/22177.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>递归实现倒序？</title><link>http://www.cnitblog.com/cockerel/archive/2007/01/01/21379.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Sun, 31 Dec 2006 17:17:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2007/01/01/21379.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/21379.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2007/01/01/21379.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/21379.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/21379.html</trackback:ping><description><![CDATA[今日某ACM群上某君出了一道颇不寻常的题：&#8220;如何写一个递归函数reverse(char* s)来使s倒序？&#8221;<br>　　不寻常的题自然应该用不寻常的解法，我即兴写了一个：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_30_82_Open_Image onclick="this.style.display='none'; Codehighlighter1_30_82_Open_Text.style.display='none'; Codehighlighter1_30_82_Closed_Image.style.display='inline'; Codehighlighter1_30_82_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_30_82_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_30_82_Closed_Text.style.display='none'; Codehighlighter1_30_82_Open_Image.style.display='inline'; Codehighlighter1_30_82_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;reverse(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;s,</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">)</span><span id=Codehighlighter1_30_82_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnitblog.com/Images/dot.gif"></span><span id=Codehighlighter1_30_82_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;c</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">s[i];<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;c&nbsp;</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">reverse(s,i</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">c)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;:&nbsp;s;<br><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
两行&#8220;搞掂&#8221;，是不是很好玩呢？<img height=20 src="http://www.cnitblog.com/Emoticons/QQ/14.gif" width=20 border=0>　你有没有更简洁或者更特别的算法？欢迎一齐探计~~<br>P.S.：本人觉得唯一的美中不足是它虽然可以按reverse(char* s)来调用，但毕竟实际上的原型是char* reverse(char* s,int i=0)，不过我基本可以肯定不可能使用单形参在O(n)时间内解决本问题。<img src ="http://www.cnitblog.com/cockerel/aggbug/21379.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2007-01-01 01:17 <a href="http://www.cnitblog.com/cockerel/archive/2007/01/01/21379.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一道很郁闷的题</title><link>http://www.cnitblog.com/cockerel/archive/2006/12/09/20305.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Sat, 09 Dec 2006 14:23:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2006/12/09/20305.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/20305.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2006/12/09/20305.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/20305.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/20305.html</trackback:ping><description><![CDATA[
		<p>
				<a class="" title="http://www.oi.edu.pl/php/show.php?ac=e161108&amp;amp;module=show&amp;amp;file=zadania/oi12/aut" href="http://www.oi.edu.pl/php/show.php?ac=e161108&amp;module=show&amp;file=zadania/oi12/aut" target="">
				</a>
		</p>
		<p>　　Sicly今晚又有周赛了，兴致勃勃地找了一道题来做，却调了几个钟都找不到一个错误的数据，但总是返回Wrong Answer！只好贴到此处，请教各位大牛。<br /><br /><u><strong>题目大意</strong></u><br />给出平面上n(n&lt;=10<sup>5</sup>)个点的X、Y坐标(xi,yi)(0≤xi,yi≤10<sup>9</sup>)及权值pi，求一条折线，满足：<br />1）折线只能向X正方向或Y正方向延伸；<br />2）折线的权值定义为折线上所有点的权值之和。<br />输出权值最大的折线的权值。<br /><br /><u><strong>我的做法</strong></u><br />先离散化，然后将n个点按第一顺序为X升序，第二顺序为Y升序来排序。<br />再建一棵线段树，每读一个项Pi =(xi, yi, pi);就在线段树里查询pi点的颜色C(yi)，并加一条线段(yi,+∞)，使得线段上每一点q的颜色C(qi)=max(C(yi)+pi,C(qi))。 最后输出C(+∞)即可。时间复杂度O(NlogN)，空间复杂度O(N)。代码如下：<br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">#include</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">cstdio</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />#include</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">cstring</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />#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 />
						<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />#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 />
						<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">using</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">namespace</span>
				<span style="COLOR: #000000"> std;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">const</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> N</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">100010</span>
				<span style="COLOR: #000000">;</span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">车站数</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> rx[N],ry[N],p[N],x[N],y[N],xp,yp;<br /><img id="Codehighlighter1_166_261_Open_Image" onclick="this.style.display='none'; Codehighlighter1_166_261_Open_Text.style.display='none'; Codehighlighter1_166_261_Closed_Image.style.display='inline'; Codehighlighter1_166_261_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_166_261_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_166_261_Closed_Text.style.display='none'; Codehighlighter1_166_261_Open_Image.style.display='inline'; Codehighlighter1_166_261_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span style="COLOR: #0000ff">struct</span>
				<span style="COLOR: #000000"> S</span>
				<span id="Codehighlighter1_166_261_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cnitblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_166_261_Open_Text">
						<span style="COLOR: #000000">{</span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">一个车站</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">  </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> x,y,p;<br /><img id="Codehighlighter1_221_259_Open_Image" onclick="this.style.display='none'; Codehighlighter1_221_259_Open_Text.style.display='none'; Codehighlighter1_221_259_Closed_Image.style.display='inline'; Codehighlighter1_221_259_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_221_259_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_221_259_Closed_Text.style.display='none'; Codehighlighter1_221_259_Open_Image.style.display='inline'; Codehighlighter1_221_259_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">bool</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">operator</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">(</span>
						<span style="COLOR: #0000ff">const</span>
						<span style="COLOR: #000000"> S</span>
						<span style="COLOR: #000000">&amp;</span>
						<span style="COLOR: #000000"> o)</span>
						<span style="COLOR: #0000ff">const</span>
						<span id="Codehighlighter1_221_259_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cnitblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_221_259_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> x</span>
								<span style="COLOR: #000000">==</span>
								<span style="COLOR: #000000">o.x</span>
								<span style="COLOR: #000000">?</span>
								<span style="COLOR: #000000"> y</span>
								<span style="COLOR: #000000">&lt;</span>
								<span style="COLOR: #000000">o.y : x</span>
								<span style="COLOR: #000000">&lt;</span>
								<span style="COLOR: #000000">o.x;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000"> t[N];<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />template</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> N</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img id="Codehighlighter1_299_589_Open_Image" onclick="this.style.display='none'; Codehighlighter1_299_589_Open_Text.style.display='none'; Codehighlighter1_299_589_Closed_Image.style.display='inline'; Codehighlighter1_299_589_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_299_589_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_299_589_Closed_Text.style.display='none'; Codehighlighter1_299_589_Open_Image.style.display='inline'; Codehighlighter1_299_589_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> PntTree</span>
				<span id="Codehighlighter1_299_589_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cnitblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_299_589_Open_Text">
						<span style="COLOR: #000000">{ </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">线段树的一种实现</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">    </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> a[</span>
						<span style="COLOR: #000000">2</span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000">N];<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000">:<br /><img id="Codehighlighter1_336_366_Open_Image" onclick="this.style.display='none'; Codehighlighter1_336_366_Open_Text.style.display='none'; Codehighlighter1_336_366_Closed_Image.style.display='inline'; Codehighlighter1_336_366_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_336_366_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_336_366_Closed_Text.style.display='none'; Codehighlighter1_336_366_Open_Image.style.display='inline'; Codehighlighter1_336_366_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span id="Codehighlighter1_336_366_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span>
						<span id="Codehighlighter1_336_366_Open_Text">
								<span style="COLOR: #008000">/*</span>
								<span style="COLOR: #008000"> 断言: i∈[0,N-1) (N-1用于表示+∞) </span>
								<span style="COLOR: #008000">*/</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_390_484_Open_Image" onclick="this.style.display='none'; Codehighlighter1_390_484_Open_Text.style.display='none'; Codehighlighter1_390_484_Closed_Image.style.display='inline'; Codehighlighter1_390_484_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_390_484_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_390_484_Closed_Text.style.display='none'; Codehighlighter1_390_484_Open_Image.style.display='inline'; Codehighlighter1_390_484_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> add(</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> i,</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> c)</span>
						<span id="Codehighlighter1_390_484_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cnitblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_390_484_Open_Text">
								<span style="COLOR: #000000">{</span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000">添加点i</span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">      c</span>
								<span style="COLOR: #000000">+=</span>
								<span style="COLOR: #000000">C(i);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">for</span>
								<span style="COLOR: #000000">(a[i</span>
								<span style="COLOR: #000000">+=</span>
								<span style="COLOR: #000000">N]</span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000">c; i</span>
								<span style="COLOR: #000000">&gt;</span>
								<span style="COLOR: #000000">1</span>
								<span style="COLOR: #000000">; i</span>
								<span style="COLOR: #000000">/=</span>
								<span style="COLOR: #000000">2</span>
								<span style="COLOR: #000000">) </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000">(</span>
								<span style="COLOR: #000000">~</span>
								<span style="COLOR: #000000">i</span>
								<span style="COLOR: #000000">&amp;</span>
								<span style="COLOR: #000000">1</span>
								<span style="COLOR: #000000">) </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000">(c</span>
								<span style="COLOR: #000000">&gt;</span>
								<span style="COLOR: #000000">a[i</span>
								<span style="COLOR: #000000">/</span>
								<span style="COLOR: #000000">2</span>
								<span style="COLOR: #000000">]) a[i</span>
								<span style="COLOR: #000000">/</span>
								<span style="COLOR: #000000">2</span>
								<span style="COLOR: #000000">]</span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000">c; </span>
								<span style="COLOR: #0000ff">else</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_499_587_Open_Image" onclick="this.style.display='none'; Codehighlighter1_499_587_Open_Text.style.display='none'; Codehighlighter1_499_587_Closed_Image.style.display='inline'; Codehighlighter1_499_587_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_499_587_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_499_587_Closed_Text.style.display='none'; Codehighlighter1_499_587_Open_Image.style.display='inline'; Codehighlighter1_499_587_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> C(</span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> i)</span>
						<span id="Codehighlighter1_499_587_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cnitblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_499_587_Open_Text">
								<span style="COLOR: #000000">{</span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000">返回点i的颜色</span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        </span>
								<span style="COLOR: #0000ff">int</span>
								<span style="COLOR: #000000"> c</span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000">a[i</span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000">N];<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">for</span>
								<span style="COLOR: #000000">(i</span>
								<span style="COLOR: #000000">+=</span>
								<span style="COLOR: #000000">N; i</span>
								<span style="COLOR: #000000">&gt;</span>
								<span style="COLOR: #000000">1</span>
								<span style="COLOR: #000000">; i</span>
								<span style="COLOR: #000000">/=</span>
								<span style="COLOR: #000000">2</span>
								<span style="COLOR: #000000">) </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000">(i</span>
								<span style="COLOR: #000000">&amp;</span>
								<span style="COLOR: #000000">1</span>
								<span style="COLOR: #000000">) c</span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000">max(c,a[i</span>
								<span style="COLOR: #000000">/</span>
								<span style="COLOR: #000000">2</span>
								<span style="COLOR: #000000">]);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> c;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />PntTree</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">131072</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000"> tr;<br /><img id="Codehighlighter1_622_1242_Open_Image" onclick="this.style.display='none'; Codehighlighter1_622_1242_Open_Text.style.display='none'; Codehighlighter1_622_1242_Closed_Image.style.display='inline'; Codehighlighter1_622_1242_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_622_1242_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_622_1242_Closed_Text.style.display='none'; Codehighlighter1_622_1242_Open_Image.style.display='inline'; Codehighlighter1_622_1242_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> main()</span>
				<span id="Codehighlighter1_622_1242_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cnitblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_622_1242_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> i,j,n,tx,ty;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  scanf(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">%d%d%d</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">,</span>
						<span style="COLOR: #000000">&amp;</span>
						<span style="COLOR: #000000">tx,</span>
						<span style="COLOR: #000000">&amp;</span>
						<span style="COLOR: #000000">ty,</span>
						<span style="COLOR: #000000">&amp;</span>
						<span style="COLOR: #000000">n);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">离散化</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">  xp</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">yp</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">;<br /><img id="Codehighlighter1_712_795_Open_Image" onclick="this.style.display='none'; Codehighlighter1_712_795_Open_Text.style.display='none'; Codehighlighter1_712_795_Closed_Image.style.display='inline'; Codehighlighter1_712_795_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_712_795_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_712_795_Closed_Text.style.display='none'; Codehighlighter1_712_795_Open_Image.style.display='inline'; Codehighlighter1_712_795_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">for</span>
						<span style="COLOR: #000000">(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; </span>
						<span style="COLOR: #000000">++</span>
						<span style="COLOR: #000000">i)</span>
						<span id="Codehighlighter1_712_795_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cnitblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_712_795_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    scanf(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">%d%d%d</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">,</span>
								<span style="COLOR: #000000">&amp;</span>
								<span style="COLOR: #000000">rx[i],</span>
								<span style="COLOR: #000000">&amp;</span>
								<span style="COLOR: #000000">ry[i],</span>
								<span style="COLOR: #000000">&amp;</span>
								<span style="COLOR: #000000">p[i]);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    x[xp</span>
								<span style="COLOR: #000000">++</span>
								<span style="COLOR: #000000">]</span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000">rx[i];<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    y[yp</span>
								<span style="COLOR: #000000">++</span>
								<span style="COLOR: #000000">]</span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000">ry[i];<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  sort(x,x</span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000">xp);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  sort(y,y</span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000">yp);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  xp</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">unique(x,x</span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000">xp)</span>
						<span style="COLOR: #000000">-</span>
						<span style="COLOR: #000000">x;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  yp</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">unique(y,y</span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000">yp)</span>
						<span style="COLOR: #000000">-</span>
						<span style="COLOR: #000000">y;<br /><img id="Codehighlighter1_895_996_Open_Image" onclick="this.style.display='none'; Codehighlighter1_895_996_Open_Text.style.display='none'; Codehighlighter1_895_996_Closed_Image.style.display='inline'; Codehighlighter1_895_996_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_895_996_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_895_996_Closed_Text.style.display='none'; Codehighlighter1_895_996_Open_Image.style.display='inline'; Codehighlighter1_895_996_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">for</span>
						<span style="COLOR: #000000">(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; </span>
						<span style="COLOR: #000000">++</span>
						<span style="COLOR: #000000">i)</span>
						<span id="Codehighlighter1_895_996_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cnitblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_895_996_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    t[i].x</span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000">lower_bound(x,x</span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000">xp,rx[i])</span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000">x;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    t[i].y</span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000">lower_bound(y,y</span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000">yp,ry[i])</span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000">y;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    t[i].p</span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000">p[i];<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">排序</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">  sort(t,t</span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000">n);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">线段树操作</span>
						<span style="COLOR: #008000">
								<br />
								<img id="Codehighlighter1_1050_1185_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1050_1185_Open_Text.style.display='none'; Codehighlighter1_1050_1185_Closed_Image.style.display='inline'; Codehighlighter1_1050_1185_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_1050_1185_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1050_1185_Closed_Text.style.display='none'; Codehighlighter1_1050_1185_Open_Image.style.display='inline'; Codehighlighter1_1050_1185_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">  </span>
						<span style="COLOR: #0000ff">for</span>
						<span style="COLOR: #000000">(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; </span>
						<span style="COLOR: #000000">++</span>
						<span style="COLOR: #000000">i)</span>
						<span id="Codehighlighter1_1050_1185_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cnitblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_1050_1185_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000">cout&lt;&lt;t[i].x&lt;&lt;' '&lt;&lt;t[i].y&lt;&lt;' '&lt;&lt;t[i].p&lt;&lt;' '&lt;&lt;tr.C(t[i].y)&lt;&lt;"-&gt;";</span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">    tr.add(t[i].y, t[i].p);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000">cout&lt;&lt;tr.C(t[i].y)&lt;&lt;endl;</span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />
								</span>
								<span style="COLOR: #000000">  }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">输出无穷远处的颜色</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">  printf(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">%d\n</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">,tr.C(N</span>
						<span style="COLOR: #000000">-</span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">));<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p>
				<u>
						<strong>附：题目全文</strong>
				</u>
				<br />
		</p>
		<h1>Task: The Bus</h1>
		<hr />
		<p>The streets of Byte City form a regular, chessboardlike network - they are either north-south or west-east directed. We shall call them NS- and WE-streets. Furthermore, each street crosses the whole city. Every NS-street intersects every WE- one and vice versa. The NS-streets are numbered from 1 to <span class="MATH"><i>n</i></span>, starting from the westernmost. The WE-streets are numbered from 1 to <span class="MATH"><i>m</i></span>, beginning with the southernmost. Each intersection of the <span class="MATH"><i>i</i></span>-th NS-street with the <span class="MATH"><i>j</i></span>-th WE-street is denoted by a pair of numbers <span class="MATH">(<i>i</i>, <i>j</i>)</span> (for <!-- MATH
 $1 \le i \le n, 1 \le j \le m$
 --><span class="MATH">1<i> &lt;= i &lt;= </i><i>n</i>, 1<i> &lt;= j &lt;= </i><i>m</i></span>). </p>
		<p>There is a bus line in Byte City, with intersections serving as bus stops. The bus begins its itinerary by the <span class="MATH">(1, 1)</span> intersection, and finishes by the <span class="MATH">(<i>n</i>, <i>m</i>)</span> intersection. Moreover, the bus may only travel in the eastern and/or northern direction. </p>
		<p>There are passengers awaiting the bus by some of the intersections. The bus driver wants to choose his route in a way that allows him to take as many of them as possible. (We shall make an assumption that the interior of the bus is spacious enough to take all of the awaiting passengers, regardless of the route chosen.) </p>
		<p>
		</p>
		<h1>Task</h1>
		<p>Write a programme which: </p>
		<ul>
				<li>reads from the standard input a description of the road network and the number of passengers waiting at each intersection, 
</li>
				<li>finds, how many passangers the bus can take at the most, 
</li>
				<li>writes the outcome to the standard output. </li>
		</ul>
		<p>
		</p>
		<h1>Input </h1>
		<p>The first line of the standard input contains three positive integers <span class="MATH"><i>n</i></span>, <span class="MATH"><i>m</i></span> and <span class="MATH"><i>k</i></span> -- denoting the number of NS-streets, the number of WE-streets and the number of intersections by which the passengers await the bus, respectively. (<!-- MATH
 $1 \le n \le 10^9$
 --><span class="MATH">1<i> &lt;= n</i> &lt;= 10<sup>9</sup></span>, <!-- MATH
 $1 \le m \le 10^9$
 --><span class="MATH">1<i> &lt;= m &lt;= </i>10<sup>9</sup></span>, <!-- MATH
 $1 \le k \le 10^5$
 --><span class="MATH">1<i> &lt;= k &lt;= </i>10<sup>5</sup></span>). </p>
		<p>The following <span class="MATH"><i>k</i></span> lines describe the deployment of passengers awaiting the bus, a single line per intersection. In the <span class="MATH"><i>i</i> + 1</span>st line there are three positive integers <span class="MATH"><i>x</i><sub>i</sub>, <i>y</i><sub>i</sub></span> and <span class="MATH"><i>p</i><sub>i</sub></span>, separated by single spaces, <!-- MATH
 $1 \le x_i \le n$
 --><span class="MATH">1<i> &lt;= x</i><sub>i</sub><i> &lt;= n</i></span>, <!-- MATH
 $1 \le y_i \le m$
 --><span class="MATH">1<i> &lt;= y</i><sub>i</sub><i> &lt;= m</i></span>, <!-- MATH
 $1 \le p_i \le 10^6$
 --><span class="MATH">1<i> &lt;= p</i><sub>i</sub> &lt;= 10<sup>6</sup></span>. A triplet of this form signifies that by the intersection <!-- MATH
 $(x_i, y_i)$
 --><span class="MATH">(<i>x</i><sub>i</sub>, <i>y</i><sub>i</sub>)</span><span class="MATH"><i>p</i><sub>i</sub></span> passengers await the bus. Each intersection is described in the input data once at the most. The total number of passengers waiting for the bus does not exceed <!-- MATH
 $1\,000\,000\,000$
 --><span class="MATH">1 000 000 000</span>. </p>
		<p>
		</p>
		<h1>Output </h1>
		<p>Your programme should write to the standard output one line containing a single integer - the greatest number of passengers the bus can take. </p>
		<p>
				<img src="http://www.oi.edu.pl/html/zadania/oi12/aut.jpg" />
		</p>
		<h1>Example</h1>
		<p>For the input data:</p>
		<pre>8 7 11
4 3 4
6 2 4
2 3 2
5 6 1
2 5 2
1 5 5
2 1 1
3 1 1
7 7 1
7 4 2
8 6 2
</pre>
		<p>the correct outcome is:</p>
		<pre>11
</pre>
		<p>
				<br />
				<u>
						<font color="#800080">题目来源</font>
				</u>
				<br />
		</p>
<img src ="http://www.cnitblog.com/cockerel/aggbug/20305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2006-12-09 22:23 <a href="http://www.cnitblog.com/cockerel/archive/2006/12/09/20305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>全Flash实现网站——草稿</title><link>http://www.cnitblog.com/cockerel/archive/2006/12/02/19849.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Sat, 02 Dec 2006 08:31:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2006/12/02/19849.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/19849.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2006/12/02/19849.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/19849.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/19849.html</trackback:ping><description><![CDATA[
		<object id="web-new" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" height="600" width="800" align="middle" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000">
				<param name="_cx" value="21167" />
				<param name="_cy" value="15875" />
				<param name="FlashVars" value="" />
				<param name="Movie" value="http://www.cnitblog.com/Files/cockerel/web.swf.zip?travelFile=http://www.cnitblog.com/Files/cockerel/travel.xml.zip&amp;flightFile=http://www.cnitblog.com/Files/cockerel/flight.xml.rar" />
				<param name="Src" value="http://www.cnitblog.com/Files/cockerel/web.swf.zip?travelFile=http://www.cnitblog.com/Files/cockerel/travel.xml.zip&amp;flightFile=http://www.cnitblog.com/Files/cockerel/flight.xml.rar" />
				<param name="WMode" value="Window" />
				<param name="Play" value="-1" />
				<param name="Loop" value="-1" />
				<param name="Quality" value="High" />
				<param name="SAlign" value="" />
				<param name="Menu" value="-1" />
				<param name="Base" value="" />
				<param name="AllowScriptAccess" value="sameDomain" />
				<param name="Scale" value="ShowAll" />
				<param name="DeviceFont" value="0" />
				<param name="EmbedMovie" value="0" />
				<param name="BGColor" value="FFFFFF" />
				<param name="SWRemote" value="" />
				<param name="MovieData" value="" />
				<param name="SeamlessTabbing" value="1" />
				<param name="Profile" value="0" />
				<param name="ProfileAddress" value="" />
				<param name="ProfilePort" value="0" />
				<param name="AllowNetworking" value="all" />
				<embed src="/Files/cockerel/web.swf.zip?travelFile=http://www.cnitblog.com/Files/cockerel/travel.xml.zip&amp;flightFile=http://www.cnitblog.com/Files/cockerel/flight.xml.rar" quality="high" bgcolor="#ffffff" width="800" height="600" name="web-new" align="middle" allowscriptaccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
		</object>
		<p>　　至此，这个全Flash实现的网站便有了个雏形了。<br />　　当然，大家一看就知道，还有很多具体细节没有实现，外观风格也不太统一。不过，对于我来说，这个作品最难搞的部分在于代码，当几个文件的代码无错误冲突地放在一起时，我离成功也就不远了^_^<br />　　基于时间上的原因，我还没有把地图控件整合到这份草稿里去，但<br />　　欢迎大家给点建议，尤其欢迎是关于该作品功能上的建议（因为我打算稍迟再考虑外观的问题）<br /><br />P.S.：我装饰首页的那幅世界地形图得到了Leana的赞赏，这使我非常高兴＊＾＿＾＊。但我其实一直在考虑这种装饰是否值得，因为它把本来只有80K的flash一下子膨胀到230K，窃以为不值。我自己的想法是做一个新闻中心，这样的话就会有一种门户网站的感觉了。</p>
<img src ="http://www.cnitblog.com/cockerel/aggbug/19849.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2006-12-02 16:31 <a href="http://www.cnitblog.com/cockerel/archive/2006/12/02/19849.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[AS]地图控件</title><link>http://www.cnitblog.com/cockerel/archive/2006/11/27/19639.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Mon, 27 Nov 2006 08:21:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2006/11/27/19639.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/19639.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2006/11/27/19639.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/19639.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/19639.html</trackback:ping><description><![CDATA[
		<object id="map" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" height="400" width="550" align="middle" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000">
				<param name="_cx" value="14552" />
				<param name="_cy" value="10583" />
				<param name="FlashVars" value="" />
				<param name="Movie" value="http://www.cnitblog.com/Files/cockerel/map.swf.rar" />
				<param name="Src" value="http://www.cnitblog.com/Files/cockerel/map.swf.rar" />
				<param name="WMode" value="Window" />
				<param name="Play" value="-1" />
				<param name="Loop" value="-1" />
				<param name="Quality" value="High" />
				<param name="SAlign" value="" />
				<param name="Menu" value="-1" />
				<param name="Base" value="" />
				<param name="AllowScriptAccess" value="sameDomain" />
				<param name="Scale" value="ShowAll" />
				<param name="DeviceFont" value="0" />
				<param name="EmbedMovie" value="0" />
				<param name="BGColor" value="FFFFFF" />
				<param name="SWRemote" value="" />
				<param name="MovieData" value="" />
				<param name="SeamlessTabbing" value="1" />
				<param name="Profile" value="0" />
				<param name="ProfileAddress" value="" />
				<param name="ProfilePort" value="0" />
				<param name="AllowNetworking" value="all" />
				<embed src="/Files/cockerel/map.swf.rar" quality="high" bgcolor="#ffffff" width="550" height="400" name="map" align="middle" allowscriptaccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
		</object>
		<p>我设计的地图控件，具体的图是可以任意选用的，控件本身支持对地图的放大、缩小、拖动、自动卷屏等操作。</p>
<img src ="http://www.cnitblog.com/cockerel/aggbug/19639.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2006-11-27 16:21 <a href="http://www.cnitblog.com/cockerel/archive/2006/11/27/19639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>机票子页的显示组件</title><link>http://www.cnitblog.com/cockerel/archive/2006/11/07/18904.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Mon, 06 Nov 2006 16:37:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2006/11/07/18904.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/18904.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2006/11/07/18904.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/18904.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/18904.html</trackback:ping><description><![CDATA[
		<object id="flight" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" height="400" width="550" align="middle" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000">
				<param name="_cx" value="14552" />
				<param name="_cy" value="10583" />
				<param name="FlashVars" value="" />
				<param name="Movie" value="http://www.cnitblog.com/Files/cockerel/flight061107.swf.rar?flightURL=http://www.cnitblog.com/Files/cockerel/flight.xml.rar" />
				<param name="Src" value="http://www.cnitblog.com/Files/cockerel/flight061107.swf.rar?flightURL=http://www.cnitblog.com/Files/cockerel/flight.xml.rar" />
				<param name="WMode" value="Window" />
				<param name="Play" value="-1" />
				<param name="Loop" value="-1" />
				<param name="Quality" value="High" />
				<param name="SAlign" value="" />
				<param name="Menu" value="-1" />
				<param name="Base" value="" />
				<param name="AllowScriptAccess" value="sameDomain" />
				<param name="Scale" value="ShowAll" />
				<param name="DeviceFont" value="0" />
				<param name="EmbedMovie" value="0" />
				<param name="BGColor" value="FFFFFF" />
				<param name="SWRemote" value="" />
				<param name="MovieData" value="" />
				<param name="SeamlessTabbing" value="1" />
				<param name="Profile" value="0" />
				<param name="ProfileAddress" value="" />
				<param name="ProfilePort" value="0" />
				<param name="AllowNetworking" value="all" />
				<embed src="/Files/cockerel/flight061107.swf.rar?flightURL=http://www.cnitblog.com/Files/cockerel/flight.xml.rar" quality="high" bgcolor="#ffffff" width="550" height="400" name="flight" align="middle" allowscriptaccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
		</object>
		<br />
		<br />在这个版本里，直接使用了Datagrid组件。数据由外部XML文件给出，由于这些以前都做过类似的，做这个版本就显得驾轻就熟了。<br />　　发布的方法与前相同，也是先把xml文件与flash改名为rar文件再上传，然后在新博文里帖上flash的嵌入代码（上次帖过，这次就省了）<br />　　该flash的核心代码如下：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(flightURL</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">undefined) flightURL</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">flight.xml</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />stop();<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> flight_xml:XML </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> XML();<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />flight_xml.ignoreWhite</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />flight_xml.load(flightURL);<br /><img id="Codehighlighter1_178_445_Open_Image" onclick="this.style.display='none'; Codehighlighter1_178_445_Open_Text.style.display='none'; Codehighlighter1_178_445_Closed_Image.style.display='inline'; Codehighlighter1_178_445_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_178_445_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_178_445_Closed_Text.style.display='none'; Codehighlighter1_178_445_Open_Image.style.display='inline'; Codehighlighter1_178_445_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />flight_xml.onLoad</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">(succ)</span><span id="Codehighlighter1_178_445_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnitblog.com/images/dot.gif" /></span><span id="Codehighlighter1_178_445_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_190_239_Open_Image" onclick="this.style.display='none'; Codehighlighter1_190_239_Open_Text.style.display='none'; Codehighlighter1_190_239_Closed_Image.style.display='inline'; Codehighlighter1_190_239_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_190_239_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_190_239_Closed_Text.style.display='none'; Codehighlighter1_190_239_Open_Image.style.display='inline'; Codehighlighter1_190_239_Open_Text.style.display='inline';" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">succ)</span><span id="Codehighlighter1_190_239_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnitblog.com/images/dot.gif" /></span><span id="Codehighlighter1_190_239_Open_Text"><span style="COLOR: #000000">{ <br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        trace(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Load flight.xml faild.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,n</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.firstChild.childNodes[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].childNodes[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].childNodes.length, a</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Array(); i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">n; </span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />        a.push(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.firstChild.childNodes[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].childNodes[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">].childNodes[i].attributes)<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    grid.dataProvider</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a;<br /><img src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" align="top" />    </span></div><br />更新日志：<br /><u><strong>06-11-06：<br /></strong></u>引入dataGrid作机票信息显示，使用XML类作数据岛<br /><br /><u><strong>06-11-07：</strong></u><br />引入comboBox作目的地选择控件。<br />编写了一个自动生成XML文件的C＋＋程序，使得我可以通过“Excel文件　→　导出为以逗号分隔的文本文件(csv) → 自动生成XML文件”来自动生成调试数据，效率大大提高。<br /><img src ="http://www.cnitblog.com/cockerel/aggbug/18904.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2006-11-07 00:37 <a href="http://www.cnitblog.com/cockerel/archive/2006/11/07/18904.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C输入输出函数</title><link>http://www.cnitblog.com/cockerel/archive/2006/10/31/18670.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Tue, 31 Oct 2006 11:15:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2006/10/31/18670.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/18670.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2006/10/31/18670.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/18670.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/18670.html</trackback:ping><description><![CDATA[
		<p>    本节主要介绍Turbo C2.0标准输入输出函数和文件的输入输出函数。通过本 <br />节的学习可以使读者掌握Turbo C2.0的屏幕输出、键盘输入输出以及磁盘文件的 <br />读写函数, 并能开始进行一些简单的程序的编写。 <br />    控制流程语句主要包括: 条件语句、循环语句和开关语句。 <br />  <br />  
</p>
		<p>    1.1  标准输入输出函数 
</p>
		<p>    1.1.1 格式化输入输出函数 <br />    Turbo C2.0 标准库提供了两个控制台格式化输入、 输出函数printf( ) 和 <br />scanf(), 这两个函数可以在标准输入输出设备上以各种不同的格式读写数据。 <br />printf()函数用来向标准输出设备(屏幕)写数据; scanf() 函数用来从标准输入 <br />设备(键盘)上读数据。下面详细介绍这两个函数的用法。 <br />    一、printf()函数 <br />    printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出 <br />信息。在编写程序时经常会用到此函数。printf()函数的调用格式为: <br />      printf("&lt;格式化字符串&gt;", &lt;参量表&gt;); <br />    其中格式化字符串包括两部分内容: 一部分是正常字符,  这些字符将按原 <br />样输出; 另一部分是格式化规定字符, 以"%"开始, 后跟一个或几个规定字符, <br />用来确定输出内容格式。 <br />    参量表是需要输出的一系列参数, 其个数必须与格式化字符串所说明的输出 <br />参数个数一样多, 各参数之间用","分开, 且顺序一一对应,  否则将会出现意想 <br />不到的错误。 <br />    1. 格式化规定符 <br />    Turbo C2.0提供的格式化规定符如下: <br />━━━━━━━━━━━━━━━━━━━━━━━━━━ <br />   符号                  作用 <br />────────────────────────── <br />    %d              十进制有符号整数 <br />    %u              十进制无符号整数 <br />    %f              浮点数 <br />    %s              字符串 <br />    %c              单个字符 <br />    %p              指针的值 <br />    %e              指数形式的浮点数 <br />    %x, %X          无符号以十六进制表示的整数 <br />    %0              无符号以八进制表示的整数 <br />    %g              自动选择合适的表示法 <br />━━━━━━━━━━━━━━━━━━━━━━━━━━ <br />    说明: <br />    (1). 可以在"%"和字母之间插进数字表示最大场宽。 <br />     例如:  %3d   表示输出3位整型数, 不够3位右对齐。 <br />            %9.2f 表示输出场宽为9的浮点数, 其中小数位为2, 整数位为6, <br />                  小数点占一位, 不够9位右对齐。 <br />            %8s   表示输出8个字符的字符串, 不够8个字符右对齐。 <br />    如果字符串的长度、或整型数位数超过说明的场宽, 将按其实际长度输出。 <br />但对浮点数, 若整数部分位数超过了说明的整数位宽度, 将按实际整数位输出; <br />若小数部分位数超过了说明的小数位宽度, 则按说明的宽度以四舍五入输出。 <br />    另外, 若想在输出值前加一些0, 就应在场宽项前加个0。 <br />    例如:   %04d  表示在输出一个小于4位的数值时, 将在前面补0使其总宽度 <br />为4位。 <br />    如果用浮点数表示字符或整型量的输出格式, 小数点后的数字代表最大宽度, <br />小数点前的数字代表最小宽度。 <br />    例如: %6.9s 表示显示一个长度不小于6且不大于9的字符串。若大于9,  则 <br />第9个字符以后的内容将被删除。 <br />    (2). 可以在"%"和字母之间加小写字母l, 表示输出的是长型数。 <br />    例如:   %ld   表示输出long整数 <br />            %lf   表示输出double浮点数 <br />    (3). 可以控制输出左对齐或右对齐, 即在"%"和字母之间加入一个"-" 号可 <br />说明输出为左对齐, 否则为右对齐。 <br />    例如:   %-7d  表示输出7位整数左对齐 <br />            %-10s 表示输出10个字符左对齐 <br />    2. 一些特殊规定字符 <br />━━━━━━━━━━━━━━━━━━━━━━━━━━ <br />    字符                           作用 <br />────────────────────────── <br />     \n                   换行 <br />     \f                   清屏并换页 <br />     \r                   回车 <br />     \t                   Tab符 <br />     \xhh                 表示一个ASCII码用16进表示, <br />                          其中hh是1到2个16进制数 <br />━━━━━━━━━━━━━━━━━━━━━━━━━━ <br />    由本节所学的printf()函数, 并结合上一节学习的数据类型, 编制下面的程 <br />序, 以加深对Turbo C2.0数据类型的了解。 <br />    例1 <br />     #include&lt;stdio.h&gt; <br />     #include&lt;string.h&gt; <br />     int main() <br />     { <br />          char c, s[20], *p; <br />          int a=1234, *i; <br />          float f=3.141592653589; <br />          double x=0.12345678987654321; <br />          p="How do you do"; <br />          strcpy(s, "Hello, Comrade"); <br />          *i=12; <br />          c='\x41'; <br />          printf("a=%d\n", a);     /*结果输出十进制整数a=1234*/ <br />          printf("a=%6d\n", a);    /*结果输出6位十进制数a=  1234*/ <br />          printf("a=%06d\n", a);   /*结果输出6位十进制数a=001234*/ <br />          printf("a=%2d\n", a);    /*a超过2位, 按实际值输出a=1234*/ <br />          printf("*i=%4d\n", *i);  /*输出4位十进制整数*i=  12*/ <br />          printf("*i=%-4d\n", *i); /*输出左对齐4位十进制整数*i=12*/ <br />          printf("i=%p\n", i);     /*输出地址i=06E4*/ <br />          printf("f=%f\n", f);     /*输出浮点数f=3.141593*/ <br />          printf("f=6.4f\n", f);   /*输出6位其中小数点后4位的浮点数 <br />                                      f=3.1416*/ <br />          printf("x=%lf\n", x);    /*输出长浮点数x=0.123457*/ <br />          printf("x=%18.16lf\n", x);/*输出18位其中小数点后16位的长浮点 <br />                                      数x=0.1234567898765432*/ <br />          printf("c=%c\n", c);     /*输出字符c=A*/ <br />          printf("c=%x\n", c);     /*输出字符的ASCII码值c=41*/ <br />          printf("s[]=%s\n", s);   /*输出数组字符串s[]=Hello, Comrade*/ <br />          printf("s[]=%6.9s\n", s);/*输出最多9个字符的字符串s[]=Hello, <br />                                     Co*/ <br />          printf("s=%p\n", s);     /*输出数组字符串首字符地址s=FFBE*/ <br />          printf("*p=%s\n", p);    /* 输出指针字符串p=How do you do*/ <br />          printf("p=%p\n", p);     /*输出指针的值p=0194*/ <br />          getch(); <br />          retunr 0; <br />     } <br />    上面结果中的地址值在不同计算机上可能不同。 <br />    例1.中第一条语句#include&lt;stdio.h&gt;的含义是调用另一个文件stdio.h, 这 <br />是一个头文件, 其中包括全部标准输入输出库函数的数据类型定义和函数说明。 <br />Turbo C2.0对每个库函数便用的变量及函数类型都已作了定义与说明, 放在相应 <br />头文件"*.h"中, 用户用到这些函数时必须要用#include&lt;*.h&gt;或#include"*. h" <br />语句调用相应的头文件, 以供连接。若没有用此语句说明, 则连接时将会出现错 <br />误。 <br />    二、scanf()函数 <br />    scanf()函数是格式化输入函数, 它从标准输入设备(键盘) 读取输入的信息。 <br />其调用格式为: <br />      scanf("&lt;格式化字符串&gt;", &lt;地址表&gt;); <br />    格式化字符串包括以下三类不同的字符; <br />    1. 格式化说明符: 格式化说明符与printf()函数中的格式说明符基本相同。 <br />    2. 空白字符: 空白字符会使scanf()函数在读操作中略去输入中的一个或多 <br />个空白字符。 <br />    3. 非空白字符: 一个非空白字符会使scanf()函数在读入时剔除掉与这个非 <br />空白字符相同的字符。 <br />    地址表是需要读入的所有变量的地址, 而不是变量本身。这与printf()函数 <br />完全不同, 要特别注意。各个变量的地址之间同","分开。 <br />    例2: <br />     main() <br />     { <br />          int i, j; <br />          printf("i, j=?\n"); <br />          scanf("%d, %d", &amp;i, &amp;j); <br />     } 
</p>
		<p>    上例中的scanf()函数先读一个整型数, 然后把接着输入的逗号剔除掉,  最 <br />后读入另一个整型数。如果","这一特定字符没有找到, scanf()函数就终止。若 <br />参数之间的分隔符为空格, 则参数之间必须输入一个或多个空格。 <br />    说明: <br />    (1). 对于字符串数组或字符串指针变量,  由于数组名和指针变量名本身就 <br />是地址, 因此使用scanf()函数时, 不需要在它们前面加上"&amp;"操作符。 <br />    例3 <br />      mian() <br />     { <br />          char *p, str[20]; <br />          scanf("%s", p);          /*从健盘输入字符串*/ <br />          scanf("%s", str); <br />          printf("%s\n", p);       /*向屏幕输出字符串*/ <br />          printf("%s\n", str); <br />     } 
</p>
		<p>    (2). 可以在格式化字符串中的"%"各格式化规定符之间加入一个整数, 表示 <br />任何读操作中的最大位数。 <br />    如例3中若规定只能输入10字符给字符串指针p, 则第一条scanf() 函数语句 <br />变为 <br />          scanf("%10s", p); <br />    程序运行时一旦输入字符个数大于10,  p就不再继续读入, 而后面的一个读 <br />入函数即scanf("%s", str)就会从第11个字符开始读入。 <br />    实际使用scanf()函数时存在一个问题, 下面举例进行说明: <br />    当使用多个scanf()函数连续给多个字符变量输入时, 例如: <br />     main() <br />     { <br />          char c1, c2; <br />          scanf("%c", &amp;c1); <br />          scanf("%c", &amp;c2); <br />          printf("c1 is %c, c2 is %c", c2\1, c2); <br />     } 
</p>
		<p>    运行该程序, 输入一个字符A后回车 (要完成输入必须回车), 在执行scanf <br />("%c", &amp;c1)时, 给变量c1赋值"A", 但回车符仍然留在缓冲区内, 执行输入语句 <br />scanf("%c", &amp;c2)时, 变量c2输出的是一空行, 如果输入AB后回车, 那么输出结 <br />果为: c1 is A, c2 is B。 <br />    要解决以上问题, 可以在输入函数前加入清除函数fflush()( 这个函数的使 <br />用方法将在本节最后讲述)。修改以上程序变成: <br />     #include&lt;stdio.h&gt; <br />     main() <br />     { <br />          char c1, c2; <br />          scanf("%c", &amp;c1); <br />          fflush(stdin); <br />          scanf("%c", &amp;c2); <br />          printf("c1 is %c, c2 is %c", c1, c2); <br />     } 
</p>
		<p>    1.1.2 非格式化输入输出函数 <br />    非格式化输入输出函数可以由上面讲述的标准格式化输入输出函数代替, 但 <br />这些函数编译后代码少, 相对占用内存也小, 从而提高了速度, 同时使用也比较 <br />方便。下面分别进行介绍。 <br />    一、puts()和gets()函数 <br />    1. puts()函数 <br />    puts()函数用来向标准输出设备(屏幕)写字符串并换行, 其调用格式为: <br />     puts(s); <br />    其中s为字符串变量(字符串数组名或字符串指针)。 <br />    puts()函数的作用与语printf("%s\n", s)相同。 <br />    例4: <br />     main() <br />     { <br />          char s[20], *f;                 /*定义字符串数组和指针变量*/ <br />          strcpy(s, "Hello! Turbo C2.0"); /*字符串数组变量赋值*/ <br />          f="Thank you";                  /*字符串指针变量赋值*/ <br />          puts(s); <br />          puts(f); <br />     } 
</p>
		<p>    说明: <br />    (1). puts()函数只能输出字符串, 不能输出数值或进行格式变换。 <br />    (2). 可以将字符串直接写入puts()函数中。如: <br />          puts("Hello, Turbo C2.0"); 
</p>
		<p>    2. gets()函数 <br />    gets()函数用来从标准输入设备(键盘)读取字符串直到回车结束, 但回车符 <br />不属于这个字符串。其调用格式为: <br />    gets(s); <br />    其中s为字符串变量(字符串数组名或字符串指针)。 <br />    gets(s)函数与scanf("%s", &amp;s)相似, 但不完全相同, 使用scanf("%s", &amp;s) <br />函数输入字符串时存在一个问题, 就是如果输入了空格会认为输入字符串结束, <br />空格后的字符将作为下一个输入项处理, 但gets() 函数将接收输入的整个字符 <br />串直到回车为止。 <br />    例5 <br />     main() <br />     { <br />          char s[20], *f; <br />          printf("What's your name?\n"); <br />          gets(s);                      /*等待输入字符串直到回车结束*/ <br />          puts(s);                      /*将输入的字符串输出*/ <br />          puts("How old are you?"); <br />          gets(f); <br />          puts(f); <br />     } <br />    说明: <br />    (1). gets(s)函数中的变量s为一字符串。如果为单个字符,  编译连接不会 <br />有错误, 但运行后会出现"Null pointer asignmemt"的错误。 <br />  <br />    二、putchar()、getch()、getche()和getchar()函数 <br />    1. putchar()函数 <br />    putchar()函数是向标准输出设备输出一个字符, 其调用格式为: <br />     putchar(ch); <br />    其中ch为一个字符变量或常量。 <br />    putchar()函数的作用等同于printf("%c", ch); <br />    例6: <br />     #include&lt;stdio.h&gt; <br />     main() <br />     { <br />          char c:             /*定义字符变量*/ <br />          c='B';              /*给字符变量赋值*/ <br />          putchar(c);         /*输出该字符*/ <br />          putchar('\x42');    /*输出字母B*/ <br />          putchar(0x42);      /*直接用ASCII码值输出字母B*/ <br />     } <br />    从本例中的连续四个字符输出函数语句可以分清字符变量的不同赋值方法。 <br />    2. getch()、getche()和getchar()函数 <br />    (1) getch()和getche()函数 <br />    这两个函数都是从键盘上读入一个字符。其调用格式为: <br />     getch(); <br />     getche(); <br />    两者的区别是: getch()函数不将读入的字符回显在显示屏幕上, 而getche() <br />函数却将读入的字符回显到显示屏幕上。 <br />    例7: <br />     #include&lt;stdio.h&gt; <br />     main() <br />     { <br />          char c, ch; <br />          c=getch();     /*从键盘上读入一个字符不回显送给字符变量c*/ <br />          putchar(c);    /*输出该字符*/ <br />          ch=getche();   /*从键盘上带回显的读入一个字符送给字符变量ch*/ <br />          putchar(ch); <br />     } <br />    利用回显和不回显的特点, 这两个函数经常用于交互输入的过程中完成暂停 <br />等功能。 <br />    例8: <br />     #include&lt;stdio.h&gt; <br />     main() <br />     { <br />          char c, s[20]; <br />          printf("Name:"); <br />          gets(s); <br />          printf("Press any key to confinue..."); <br />          getch();  /*等待输入任一键*/ <br />     } <br />  <br />    (2) getchar()函数 <br />    getchar()函数也是从键盘上读入一个字符, 并带回显。它与前面两个函数 <br />的区别在于: getchar()函数等待输入直到按回车才结束,  回车前的所有输入字 <br />符都会逐个显示在屏幕上。但只有第一个字符作为函数的返回值。 <br />    getchar()函数的调用格式为: <br />     getchar(); <br />    例9: <br />     #include&lt;stdio.h&gt; <br />     main() <br />     { <br />          char c; <br />          c=getchar();   /*从键盘读入字符直到回车结束*/ <br />          putchar(c);    /*显示输入的第一个字符*/ <br />          getch();       /*等待按任一健*/ <br />     } <br />  </p>
<img src ="http://www.cnitblog.com/cockerel/aggbug/18670.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2006-10-31 19:15 <a href="http://www.cnitblog.com/cockerel/archive/2006/10/31/18670.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用带参构造函数为对象数组赋值的方法</title><link>http://www.cnitblog.com/cockerel/archive/2006/10/09/17749.html</link><dc:creator>踏雪赤兔</dc:creator><author>踏雪赤兔</author><pubDate>Sun, 08 Oct 2006 16:05:00 GMT</pubDate><guid>http://www.cnitblog.com/cockerel/archive/2006/10/09/17749.html</guid><wfw:comment>http://www.cnitblog.com/cockerel/comments/17749.html</wfw:comment><comments>http://www.cnitblog.com/cockerel/archive/2006/10/09/17749.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnitblog.com/cockerel/comments/commentRss/17749.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cockerel/services/trackbacks/17749.html</trackback:ping><description><![CDATA[用带参构造函数为对象数组赋值的方法<br />例：<br />student stud[5]= <br />{ <br />   student(87,"chenlan",85,78,76), <br />   student(30,"huanghong",97,68,87), <br />   student(290,"zhanghua",67,98,67), <br />   student(89,"yexuan",98,87,76), <br />   student(5,"baiwei",87,68,98) <br />}; <br /><img src ="http://www.cnitblog.com/cockerel/aggbug/17749.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cockerel/" target="_blank">踏雪赤兔</a> 2006-10-09 00:05 <a href="http://www.cnitblog.com/cockerel/archive/2006/10/09/17749.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>