﻿<?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博客-hunter的个人空间</title><link>http://www.cnitblog.com/hunter/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 29 Apr 2026 06:00:36 GMT</lastBuildDate><pubDate>Wed, 29 Apr 2026 06:00:36 GMT</pubDate><ttl>60</ttl><item><title>使用lnrr的改进rr流程(附自制视频讲解)</title><link>http://www.cnitblog.com/hunter/archive/2011/09/25/lnrr_improve.html</link><dc:creator>hunter's space</dc:creator><author>hunter's space</author><pubDate>Sun, 25 Sep 2011 06:14:00 GMT</pubDate><guid>http://www.cnitblog.com/hunter/archive/2011/09/25/lnrr_improve.html</guid><wfw:comment>http://www.cnitblog.com/hunter/comments/75619.html</wfw:comment><comments>http://www.cnitblog.com/hunter/archive/2011/09/25/lnrr_improve.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnitblog.com/hunter/comments/commentRss/75619.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/hunter/services/trackbacks/75619.html</trackback:ping><description><![CDATA[<p><strong>下面这个是我编辑好本来准备发到battlecn的.<br />可惜我还是新丁, 无法在非常技术区发帖, 记得我在这里几年前开过一个博客写过一些暗黑相关的东西.<br />就先放到这里来吧.</strong></p>
<p><strong>鸣谢battlecn的xiaonanln, 我的定制是在他的lnrr基础上修改的~<br /></strong>~~~~~~~~~~~~~~~~~~~~下面是帖子内容~~~~~~~~~~~~~~~~~~~~</p>
<p style="background-color: #00ff00; font-size: 14pt"><strong>主帖: 使用lnrr的改进rr流程(附自制视频讲解)</strong></p>
<p>先重磅放上视频讲解链接:<br />土豆 <a href="http://www.tudou.com/programs/view/k6QlInxvp_4/">http://www.tudou.com/programs/view/k6QlInxvp_4/</a><br />56&nbsp; <a href="http://www.56.com/u94/v_NjMxODE0NDM.html">http://www.56.com/u94/v_NjMxODE0NDM.html</a> </p>
<fieldset>
<p><legend>视频介绍</legend>视频比较长,共100分钟左右.<br />三次rr时间起止点和情况如下,想简单了解的朋友只需要看第三段.<br />1) 00:01 - 39:05 启动d2窗口,d2jsp; 进行第一次rr流程. (此段共计39分钟) <br />遇到问题: 地狱难度a2 pass的时候,bus打错了命令,导致a3崔凡克部分bb没完成.<br />处理办法: 未完成的bb重新建游戏,到a3手动带bb重k了一遍<br />2) 39:05 - 73:00 创建并讲解我命名bb的规则; 进行第二次rr流程. (此段共计34分钟)<br />遇到问题: 普通难度的a2,倒数第二个任务bb无法完成; 地狱难度部分场景k boss比较危险<br />处理办法: pt key重新建游戏,bus再带一次; 部分有危险的场景, 使用in和back来控制bb.<br />3) 73:00 - 96:51 创建bb; 进行第三次rr流程. (此段共计23分50秒)<br />未遇到问题,基本顺利的带完全程. 讲解也尽量周全,照顾了只看这一段的朋友.</p>
<p>最后剩下的两分钟简单介绍了一下我修改lnrr的配置文件.感兴趣的朋友可参考一下.视频比较共100分钟左右.<br />三次rr时间起止点和情况如下,想简单了解的朋友只需要看第三段.<br />1) 00:01 - 39:05 启动d2窗口,d2jsp; 进行第一次rr流程. (此段共计39分钟) <br />遇到问题: 地狱难度a2 pass的时候,bus打错了命令,导致a3崔凡克部分bb没完成.<br />处理办法: 未完成的bb重新建游戏,到a3手动带bb重k了一遍<br />2) 39:05 - 73:00 创建并讲解我命名bb的规则; 进行第二次rr流程. (此段共计34分钟)<br />遇到问题: 普通难度的a2,倒数第二个任务bb无法完成; 地狱难度部分场景k boss比较危险<br />处理办法: pt key重新建游戏,bus再带一次; 部分有危险的场景, 使用in和back来控制bb.<br />3) 73:00 - 96:51 创建bb; 进行第三次rr流程. (此段共计23分50秒)<br />未遇到问题,基本顺利的带完全程. 讲解也尽量周全,照顾了只看这一段的朋友.</p>
<p>最后剩下的两分钟简单介绍了一下我修改lnrr的配置文件.感兴趣的朋友可参考一下.</p></fieldset><br /><br /><br />
<p>&nbsp;</p>
<p><br /><strong>1定义<br /></strong>bus：领队又称大号，一般为sor<br />ptkey：任务进行到普通act2，插杖，虫洞开，退出游戏，不再继续下一步游戏的一个人物。<br />emkey：任务进行到恶梦act2，插杖，虫洞开，退出游戏，不再继续下一步游戏的一个人物。<br />dykey：任务进行到地狱act2，插杖，虫洞开，退出游戏，不再继续下一步游戏的一个人物。<br />bb1～7：敲石头人的编号，通称石头人。如不编号，如：bb，指任意一个石头人。<br />bbleader：敲石头人中进门完成任务的char. 一般是bb1充当.</p>
<p><strong>2原理<br /></strong>bus在完成任务后在act2和依次和国王、马席夫对话以后，虽然可以去act3，但d2内会认为bus的任务回到处于杀玩虫子但是没有和天使对话的状态。<br />注意：为避免麻烦，rr前bus最好分别依次和三个难度的和国王、马席夫对话。</p>
<p><strong>3所需软件准备<br /></strong>d2jsp + lnrr<br />lnrr中的脚本稍作定制(见3楼)<br />d2loader,配置多开窗口的快捷方式(见3楼)</p>
<p><strong>4过程<br /><br />4.1准备<br /></strong>1) 打开9个窗口: 1个bus窗口, 1个key窗口, 7个bb窗口<br />2) 创建好非资料片的acc</p>
<p><strong>4.2普通难度<br /></strong></p>
<p>&nbsp;</p>
<fieldset><legend>普通难度流程</legend>act1：<br />1)bbleader cr,bb2-7 join,bus join<br />2)bus tp到安姐第四层,清小房间,结盟,开门,地上扔下一本满的回城书,打a<br />{<br />&nbsp; bbleader听到a后,会自动进门<br />}<br />3)控制bbleader检回城书<br />4)bus秒安姐,打pass 1,退游戏 
<p>act2:<br />1)ptkey cr<br />2)bus join, 古墓wp开门<br />3)ptkey exit<br />4)bbleader打quit,手动退游戏<br />{<br />&nbsp; 其他bb听到quit,会自动退游戏<br />}<br />5)bb1-7手动join<br />{<br />&nbsp; 所有bb进游戏后在act2,会自动走到国王面前等候<br />}<br />6)bus确认人齐后,结盟,tp到虫子房间,秒虫子,和天使对话,从天使开的门回城,打pass 2<br />{<br />&nbsp; bbleader听到pass2后,会和国王说话,然后下地宫,开门回城,和马席夫对话去act3,并自动走到凯恩处等候<br />&nbsp; 其他bb听到pass2后,会和国王说话,然后从城里跑到马席夫处对话去act3,并自动走到凯恩稍右下方处等候<br />}<br />7)bus等到bbleader一开地宫的门,就进门回身到宫殿和国王说话,然后下地宫走门回城,和马席夫说话,然后从自己的古墓wp的门,经wp去act3崔凡克,tp到3c的大殿后方,清小怪</p>
<p>act3:<br />1)接上步,bus确认安全,确认所有bb已到act3后,在大殿后开门,打tvc<br />{<br />&nbsp; bbleader会自动进门,等待bus杀3c<br />}<br />bus看到bbleader进门后, 绕一个圈tp到大殿中k3c.<br />{<br />&nbsp; 3c全部死掉后,bbleader应该会自动检测到并回城和凯恩对话<br />}<br />bus从自己的门回城,前往劳模wp, tp去劳模红门处, 记得把红门附近可能威胁到bb的小怪清掉<br />3)bus确认bbleader已经回到城里,开门,打m<br />{<br />&nbsp; bbleader听到m,会自动进门,站在原地等bus k劳模<br />}<br />4)bus顶上去k劳模(不要放劳模下来威胁到bb,也不要顶的太靠前让劳模跑出bb的视野)<br />{<br />&nbsp; 劳模死掉后, bbleader会自动打pass 3, 然后自己进红门去act4<br />&nbsp; 其他bb听到pass 3会自动和凯恩说话, 进bus的门, 进红门来到act4<br />}</p>
<p>act4:<br />1)bus前往混沌,清场,中间抽空确认下所有bb是否来到了act4,然后在d附近的墙角开门,打d<br />{<br />&nbsp; bbleader听到d,会进门,等bus kd<br />}<br />2)bus kd(最好站到bb的另一个方向,避免d误伤bb,尽量不让bb死)<br />d死后, bus打quit<br />{<br />&nbsp; 其他bb此时会自动退游戏<br />&nbsp; bbleader如果死了,需要手动退游戏<br />}</p></fieldset><br /><strong>4.3噩梦难度<br /></strong><br />
<fieldset><legend>噩梦难度流程</legend>如果bus比较强力,可以完全按照普通的流程(只是key换成emkey,同时不用扔回城书了)<br />如果不够强力, 参见下面的流程 
<p>&nbsp;</p>
<p>act1：<br />1)bbleader cr,bb2-7 join,bus join<br />2)bus tp到安姐第四层,清小房间,结盟,开门,打a<br />{<br />&nbsp; bbleader听到a后,会自动进门<br />}<br />4)bus秒安姐,打pass 1,退游戏</p>
<p>act2:<br />1)emkey cr<br />2)bus join,emkey exit<br />3)bus前往act4清混沌, d出现后开门回城<br />4)bus前往act3崔凡克,看一眼3c后回城<br />5)bus前往act2督瑞尔,看一眼后回城<br />6)bb1-7 join<br />{<br />&nbsp; 所有bb进游戏后在act2,会自动走到国王面前等候<br />}<br />3)bus确认人齐后,结盟<br />4)bbleader打quit,手动退游戏<br />{<br />&nbsp; 其他bb听到quit,会自动退游戏<br />}<br />5)bb1-7手动join<br />{<br />&nbsp; 所有bb进游戏后在act2,会自动走到国王面前等候<br />}<br />6)bus确认人齐后,结盟,从自己的门回虫子房间,秒虫子,和天使对话,从天使开的门回城,打pass 2<br />{<br />&nbsp; bbleader听到pass2后,会和国王说话,然后下地宫,开门回城,和马席夫对话去act3,并自动走到凯恩处等候<br />&nbsp; 其他bb听到pass2后,会和国王说话,然后从城里跑到马席夫处对话去act3,并自动走到凯恩稍右下方处等候<br />}<br />7)bus等到bbleader一开地宫的门,就进门回身到宫殿和国王说话,然后下地宫走门回城,和马席夫说话,然后从城里走到wp处,前往崔凡克,tp到3c的大殿后方,清小怪</p>
<p>act3:<br />1)接上步,bus确认安全,确认所有bb已到act3后,在大殿后开门,打tvc<br />{<br />&nbsp; bbleader会自动进门,等待bus杀3c<br />}<br />bus看到bbleader进门后, 绕一个圈tp到大殿中k3c.<br />{<br />&nbsp; 3c全部死掉后,bbleader应该会自动检测到并回城和凯恩对话<br />}<br />bus从自己的门回城,前往劳模wp, tp去劳模红门处, 记得把红门附近可能威胁到bb的小怪清掉<br />3)bus确认bbleader已经回到城里,开门,打m<br />{<br />&nbsp; bbleader听到m,会自动进门,站在原地等bus k劳模<br />}<br />4)bus顶上去k劳模(不要放劳模下来威胁到bb,也不要顶的太靠前让劳模跑出bb的视野)<br />{<br />&nbsp; 劳模死掉后, bbleader会自动打pass 3, 然后自己进红门去act4<br />&nbsp; 其他bb听到pass 3会自动和凯恩说话, 进bus的门, 进红门来到act4<br />}</p>
<p>act4:<br />1)bus前往混沌,直接tp到d附近的墙角开门,打d<br />{<br />&nbsp; bbleader听到d,会进门,等bus kd<br />}<br />2)bus kd(最好站到bb的另一个方向,避免d误伤bb,尽量不让bb死)<br />d死后, bus打quit<br />{<br />&nbsp; 其他bb此时会自动退游戏<br />&nbsp; bbleader如果死了,需要手动退游戏<br />}</p></fieldset><br />
<p><strong>4.4地狱难度<br /></strong></p>
<fieldset><legend>地狱难度流程</legend>如果bus比较强力,可以完全按照噩梦的流程(只是key换dykey,同时不用k act4了)<br />如果不够强力, 参见下面的流程 
<p>act1：<br />1)bbleader cr,bus join<br />2)bus tp到安姐第四层,确认看到安姐,清小房间<br />3)bb2-7 join<br />4)bus确认人齐,结盟,开门,打a<br />{<br />&nbsp; bbleader听到a后,会自动进门<br />}<br />4)bus秒安姐,打pass 1,退游戏</p>
<p>act2:<br />1)dykey cr<br />2)bus join,dykey exit<br />3)bus前往act3崔凡克,看一眼3c,如果发现属性不好(如果两个以上冰火免,建议n),果断n,从act2 step1重来.<br />如果属性不错, 就上去k掉冰火免之外的两个后回城<br />4)bus前往act2督瑞尔,看一眼后回城<br />5)bb1-7 join<br />{<br />&nbsp; 所有bb进游戏后在act2,会自动走到国王面前等候<br />}<br />6)bus确认人齐后,结盟<br />7)bbleader打quit,手动退游戏<br />{<br />&nbsp; 其他bb听到quit,会自动退游戏<br />}<br />8)bb1-7手动join<br />{<br />&nbsp; 所有bb进游戏后在act2,会自动走到国王面前等候<br />}<br />9)bus确认人齐后,结盟,从自己的门回虫子房间,秒虫子,和天使对话,从天使开的门回城,打pass 2<br />{<br />&nbsp; bbleader听到pass2后,会和国王说话,然后下地宫,开门回城,和马席夫对话去act3,并自动走到凯恩处等候<br />&nbsp; 其他bb听到pass2后,会和国王说话,然后从城里跑到马席夫处对话去act3,并自动走到凯恩稍右下方处等候<br />}<br />10)bus等到bbleader一开地宫的门,就进门回身到宫殿和国王说话,然后下地宫走门回城,和马席夫说话,然后从城里走到wp处,前往崔凡克,tp到3c的大殿后方,清小怪</p>
<p>act3(同噩梦):<br />1)接上步,bus确认安全,确认所有bb已到act3后,在大殿后开门,打tvc<br />{<br />&nbsp; bbleader会自动进门,等待bus杀3c<br />}<br />bus看到bbleader进门后, 绕一个圈tp到大殿中k3c.<br />{<br />&nbsp; 3c全部死掉后,bbleader应该会自动检测到并回城和凯恩对话<br />}<br />bus从自己的门回城,前往劳模wp, tp去劳模红门处, 记得把红门附近可能威胁到bb的小怪清掉<br />3)bus确认bbleader已经回到城里,开门,打m<br />{<br />&nbsp; bbleader听到m,会自动进门,站在原地等bus k劳模<br />}<br />4)bus顶上去k劳模(不要放劳模下来威胁到bb,也不要顶的太靠前让劳模跑出bb的视野)<br />{<br />&nbsp; 劳模死掉后, bbleader会自动打pass 3, 然后自己进红门去act4<br />&nbsp; 其他bb听到pass 3会自动和凯恩说话, 进bus的门, 进红门来到act4<br />}</p>
<p>act4:<br />不需要了, 去转资料片吧</p></fieldset> 
<p><br /><strong>5注意<br /></strong>1. bb出现在act3土地才能转资料片，不然转了以后还在恶梦。<br />如果要在非资料片过3c，同恶梦一样1pp难度去看一眼。如果act3转zlp过，随便怎么过，lsor，tp pal个个nb得很。<br />2.act4：bb分开敲石头。<br />3.如果创建游戏的过程中, 暗黑窗口没了, 就在任务栏上找一下, 哪个窗口没了, 就启动哪个窗口对应的快捷方式, 如果是bb, 需要在d2jsp里将该窗口update一下.<br /></p>
<p style="background-color: #00ff00; font-size: 14pt"><strong>2楼: rr效率及收益计算<br /></strong></p>
<p><br />7acc = 56bb--&gt;20ist<br />设每天run 4批=28bb(按照我的经验,1批是35分钟,30分钟pass,5分钟敲)</p>
<p>下面是我想要的几个东东换算的时间:<br />无限: 30/23/30/24, 130ist = 364bb = 6.5acc -&gt; 13天<br />tp+: 31/6/30, 192ist = 538bb = 9.6acc -&gt; 19.2天<br />cta: 9.5ist = 28bb -&gt; 1天<br />oak: 4ist = 11bb -&gt; 1小时<br />毒+: 8/27/29/5 = 40ist = 112bb -&gt; 4天<br /><br />&nbsp;</p>
<p style="background-color: #00ff00; font-size: 14pt"><strong>3楼: 配置及定制</strong></p>
<p><br /><strong>快捷方式配置:<br /></strong></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">baby&nbsp;leader</span><span style="color: #000000">:</span><span style="color: #000000"><br /></span><span style="color: #000000">-</span><span style="color: #000000">w&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">lq&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">ns&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">locale&nbsp;eng&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">nonotify&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">direct&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">nohide&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">sleepy&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">title&nbsp;</span><span style="color: #000000; font-weight: bold">"</span><span style="color: #000000; font-weight: bold">1_a</span><span style="color: #000000; font-weight: bold">"</span><span style="color: #000000"><br />baby</span><span style="color: #000000">:</span><span style="color: #000000"><br /></span><span style="color: #000000">-</span><span style="color: #000000">w&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">lq&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">ns&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">locale&nbsp;eng&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">nonotify&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">direct&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">sleepy&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">title&nbsp;</span><span style="color: #000000; font-weight: bold">"</span><span style="color: #000000; font-weight: bold">x_x</span><span style="color: #000000; font-weight: bold">"</span><span style="color: #000000"><br />bus</span><span style="color: #000000">:</span><span style="color: #000000"><br /></span><span style="color: #000000">-</span><span style="color: #000000">w&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">pdir&nbsp;</span><span style="color: #0000ff">map</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">direct&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">nohide&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">title&nbsp;</span><span style="color: #000000; font-weight: bold">"</span><span style="color: #000000; font-weight: bold">bus</span><span style="color: #000000; font-weight: bold">"</span></div>
<p><br /><br /><strong>lnrr定制:</strong></p>
<p>pass 2.es&nbsp; [定制了bbleader的行为]</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">if&nbsp;baby&nbsp;step&nbsp;L_BabyMove<br />#L_KeyMove<br />remember<br />talk&nbsp;Jerhyn<br />talk&nbsp;Jerhyn<br />back<br />#move<br />move&nbsp;-</span><span style="color: #000000">17</span><span style="color: #000000">&nbsp;-</span><span style="color: #000000">8</span><span style="color: #000000"><br />haremtp<br />portal&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000"><br />move&nbsp;</span><span style="color: #000000">30</span><span style="color: #000000">&nbsp;-</span><span style="color: #000000">1</span><span style="color: #000000"><br />step&nbsp;L_Pass2End<br /><br />#L_BabyMove<br />wait&nbsp;random&nbsp;</span><span style="color: #000000">50</span><span style="color: #000000"><br />remember<br />talk&nbsp;Jerhyn<br />back<br /><br />move&nbsp;</span><span style="color: #000000">104</span><span style="color: #000000">&nbsp;-</span><span style="color: #000000">31</span><span style="color: #000000"><br />move&nbsp;</span><span style="color: #000000">5</span><span style="color: #000000">&nbsp;-</span><span style="color: #000000">63</span><span style="color: #000000"><br /><br />#L_Pass2End<br />appeal&nbsp;Meshif<br />act</span></div>
<p><br />d.es&nbsp; [去掉了say pass 4的部分避免莫名其妙进门就打pass 4的问题]<br /></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">#&nbsp;This&nbsp;is&nbsp;a&nbsp;script&nbsp;for&nbsp;key&nbsp;only<br />if&nbsp;baby&nbsp;clear<br />portal&nbsp;</span><span style="color: #000000">0</span></div>
<p><br />d2es.d2j<br />在commandHandler表中增加一行</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">haremtp:&nbsp;hharemtp,</span></div>
<p>绑定新增函数:</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;hharemtp(){<br />&nbsp;&nbsp;&nbsp;&nbsp;DC_DPrint(</span><span style="color: #000000">"</span><span style="color: #000000">go&nbsp;to&nbsp;harem&nbsp;level&nbsp;1!</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;DM_TakeStairs(</span><span style="color: #000000">24</span><span style="color: #000000">,</span><span style="color: #000000">25</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;DM_MakeTP();<br />}</span></div><img src ="http://www.cnitblog.com/hunter/aggbug/75619.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/hunter/" target="_blank">hunter's space</a> 2011-09-25 14:14 <a href="http://www.cnitblog.com/hunter/archive/2011/09/25/lnrr_improve.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>伪造贴-昨天比赛后斯洛文尼亚某论坛留言摘抄</title><link>http://www.cnitblog.com/hunter/archive/2006/08/25/15933.html</link><dc:creator>hunter's space</dc:creator><author>hunter's space</author><pubDate>Fri, 25 Aug 2006 05:24:00 GMT</pubDate><guid>http://www.cnitblog.com/hunter/archive/2006/08/25/15933.html</guid><wfw:comment>http://www.cnitblog.com/hunter/comments/15933.html</wfw:comment><comments>http://www.cnitblog.com/hunter/archive/2006/08/25/15933.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/hunter/comments/commentRss/15933.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/hunter/services/trackbacks/15933.html</trackback:ping><description><![CDATA[主题：这样也能输，男篮去死<br />  Re: 顶，怎么和男足一样不争气呢 (注：斯队男足水准不详)<br />  Re: 本来就是欧洲二流<br />  Re: 靠，五个NBA球员还是欧洲二流，楼上球盲<br />  Re: 老子看球时你还不知道在哪呢，楼上SB<br />  Re: ......<br /><br />公告：封禁××、×××post权3天，原因，粗口<br /><br />主题：布雷泽克，你太让我失望了<br />  Re: 他就一傻大个，除了犯规啥也不会<br />  Re: 同意，得分和篮板都很弱，空有220的身高(注：身高数据不详)<br />  Re: 拜托，楼上你们看了比赛没有，他的前场篮板很强了<br />  Re: 有P用，有种把对方最后一个投篮盖了<br />  Re: 小布今天很拼了，大家为什么要骂他呢<br />  Re: 谁上场没拼啊，我们只是认为他能力不行嘛<br />  Re: .....<br /><br />主题：万人签名要求内斯特洛维奇离开国家队<br />  Re: 丫打得太软了，就会飘在外面投，冲内线造姚明犯规呀，猪<br />  Re: 同意，太软太软太软太软太软太软太软！！<br />  Re: 那是教练的战术安排好不好，拉开姚明给别人造空切的机会<br />  Re: 楼上正解<br />  Re: 可是姚明不一样得了36分10板，内斯呢，几分几板？(注：11分10板)<br />  Re: 同样是NBA球员，做人差距咋这大捏？<br />  Re: 一个绝对主力，一个铁打板凳，这就是差距<br />  Re: 可咱们内斯有总冠军戒指，姚没有<br />  Re: 内斯赛季开始就转到猛龙去了，混日子过呗<br />  Re: 猛龙就一鱼腩，不过内斯在那里反而有球打了<br />  Re: 怎么讨论起NBA了，跑题了<br />  Re: .....<br /><br />投票：我们的球员该去NBA还是欧洲联赛<br /><br />主题：尤德里和纳克巴在场上是干嘛的？垃圾！！<br />  Re:大家不要爆粗口，队员们还是很努力的<br />  Re:同意楼上，实在运气太差了<br />  Re:一个6分一个0分，这两个显然是卧底啊<br />  Re:RP问题了！！！<br />  Re:我是mm，我就喜欢纳帅锅，嘻嘻<br />  Re:楼上的滚<br />  Re:呜呜，为什么要吓我<br />  Re:我们讨论的是比赛，喜欢帅哥到贴图板去<br />  Re:纳帅就是帅，你是嫉妒<br />  Re:烦不烦啊！！<br />  Re:.......<br /><br />警告：请双方克制情绪，无关回复一律删除<br /><br />主题：靠，对方最后一投明显走步，裁判太恶心了<br />  Re:对啊，姚明有一个上篮绝对撞人，居然判我们犯规，无语了<br />  Re:查一下裁判是那里的！<br />  Re:不要输了就怪裁判，多从自己身上找原因吧！<br />  Re:楼上是鬼子，鉴定完毕(注：不知道斯国的敌对国家，以鬼子指代)<br />  Re:......<br /><br />[精华]主题：谈谈今天主教练的战术安排(注：全文17000字)<br />  <br />主题：极度怀念南斯拉夫解体前，那是黄金时代啊<br />  Re:对头，拿冠军跟玩似的<br />  Re:laf，楼上无视那时候的苏联队吗<br />  Re:南斯拉夫比那时的苏联强！<br />  Re:可惜啊，塞黑＋克罗第亚＋咱们的话还是能拿冠军的<br />  Re:问问希腊、西班牙、阿根廷和美国答不答应<br /><br />主题：别吵别吵，还没出局，意大利下面赢了就没事了<br />  Re:顶，狂顶意大利贬死波多黎各<br />  Re:今天，我是个意大利球迷<br />  Re:无语，吐了！！！！！！！<br />  Re:欢迎大家访问我的blog，有大量美女图片哦！<br />  Re:靠，哪有美女图片啊<br />  Re:楼上的链接有木马，我中招了，惨！！<br />  Re:不对，是楼上的楼上了<br />  Re:.......<br /><br />公告：删除以下ID，原因，在各版面发布恶意链接<br /><br />主题：今天斯洛TV的那个主持太差了，比分都能报错<br />  Re: 那个嘉宾主持，就知道‘把球给尤德里分配’<br />  Re: 尤德里是垃圾！！！！！！！<br />  Re: 又来了。<br />  Re: 嘿嘿，没有尤德里恐怕不只输一分<br />  Re: ......<br /><br />主题：欢呼吧，意大利赢了，咱们出线了<br />  Re: 顶，顶上十大<br />  Re: 没意思，靠别人的恩赐<br />  Re: 无所谓，重要的是出线，乌拉<br />  Re: ......<br /><br />[精华]主题：16强对阵及各队实力分析<br /><br />主题：还有人吗？<br />  Re: 没有<br />  Re: 你是不是人<br />  Re: 你猜<br />  Re: 我猜不是！<br />  Re: ......<br /><br />公告：封禁××，×××post权1天，原因，版聊<br /><img src ="http://www.cnitblog.com/hunter/aggbug/15933.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/hunter/" target="_blank">hunter's space</a> 2006-08-25 13:24 <a href="http://www.cnitblog.com/hunter/archive/2006/08/25/15933.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一道Google top coder的850分例题及解答</title><link>http://www.cnitblog.com/hunter/archive/2006/08/25/15932.html</link><dc:creator>hunter's space</dc:creator><author>hunter's space</author><pubDate>Fri, 25 Aug 2006 04:22:00 GMT</pubDate><guid>http://www.cnitblog.com/hunter/archive/2006/08/25/15932.html</guid><wfw:comment>http://www.cnitblog.com/hunter/comments/15932.html</wfw:comment><comments>http://www.cnitblog.com/hunter/archive/2006/08/25/15932.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/hunter/comments/commentRss/15932.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/hunter/services/trackbacks/15932.html</trackback:ping><description><![CDATA[
		<div class="post" id="article">
				<div class="postTitle">
						<a href="http://blog.csdn.net/Solstice/archive/2006/04/06/653418.aspx">一道Google top coder的850分例题及解答</a>
				</div>
				<div class="postText">
						<div align="center">一道Google top coder的850分例题及解答</div>
						<div align="center"> </div>
						<div>原题：</div>
						<div> </div>
						<div>假设有这样一种字符串，它们的长度不大于 26 ，而且若一个这样的字符串其长度为 m ，则这个字符串必定由 a, b, c ... z 中的前 m 个字母构成，同时我们保证每个字母出现且仅出现一次。比方说某个字符串长度为 5 ，那么它一定是由 a, b, c, d, e 这 5 个字母构成，不会多一个也不会少一个。嗯嗯，这样一来，一旦长度确定，这个字符串中有哪些字母也就确定了，唯一的区别就是这些字母的前后顺序而已。</div>
						<div> </div>
						<div>现在我们用一个由大写字母 A 和 B 构成的序列来描述这类字符串里各个字母的前后顺序：</div>
						<div> </div>
						<div style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt">
								<span>l<span style="FONT: 7pt 'Times New Roman'">         </span></span>如果字母 b 在字母 a 的后面，那么序列的第一个字母就是 A （After），否则序列的第一个字母就是 B （Before）；</div>
						<div style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt">
								<span>l<span style="FONT: 7pt 'Times New Roman'">         </span></span>如果字母 c 在字母 b 的后面，那么序列的第二个字母就是 A ，否则就是 B；</div>
						<div style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt">
								<span>l<span style="FONT: 7pt 'Times New Roman'">         </span></span>如果字母 d 在字母 c 的后面，那么 …… 不用多说了吧？直到这个字符串的结束。</div>
						<div> </div>
						<div>这规则甚是简单，不过有个问题就是同一个 AB 序列，可能有多个字符串都与之相符，比方说序列"ABA"，就有"acdb"、"cadb"等等好几种可能性。说的专业一点，这一个序列实际上对应了一个字符串集合。那么现在问题来了：给你一个这样的AB 序列，问你究竟有多少个不同的字符串能够与之相符？或者说这个序列对应的字符串集合有多大？注意，只要求个数，不要求枚举所有的字符串。</div>
						<div> </div>
						<div>注：如果结果大于10亿就返回-1。</div>
						<div style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 1pt; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid">
								<div style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none"> </div>
						</div>
						<div> </div>
						<div>我的最终解答（没有考虑溢出的情况）：</div>
						<div> </div>
						<div>
								<span style="COLOR: green">
										<font size="2">// CODE 1</font>
								</span>
						</div>
						<div>
								<span style="COLOR: green">
										<font size="2">// the best way</font>
								</span>
						</div>
						<div>
								<span style="COLOR: green">
										<font size="2">// O(N^2)</font>
								</span>
						</div>
						<div>
								<font size="2">
										<span style="COLOR: blue">int</span> countABbest(<span style="COLOR: blue">const string&amp; AB)</span></font>
						</div>
						<div>
								<font size="2">{</font>
						</div>
						<div>
								<font size="2">
										<span>    assert(AB.find_first_not_of(<span style="COLOR: maroon">"AB"</span>) == string::npos);</span>
								</font>
						</div>
						<div> </div>
						<div>
								<font size="2">
										<span>    vector&lt;<span style="COLOR: blue">int</span>&gt; current, next; <span style="COLOR: green">// should we reserve these vectors?</span></span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>    current.push_back(1);</span>
								</font>
						</div>
						<div> </div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">for</span> (string::const_iterator letter = AB.begin(); </span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        letter != AB.end(); ++letter) {</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        next.resize(current.size()+1); <span style="COLOR: green">// or next.insert(next.end(), 2, 0);</span></span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        next[0] = 0; <span style="COLOR: green">// in fact, we could set the entire vector to zero</span></span>
								</font>
						</div>
						<div> </div>
						<div>
								<font size="2">
										<span>        <span style="COLOR: blue">if</span> (*letter == <span style="COLOR: maroon">'A'</span>) {</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>            partial_sum(current.begin(), current.end(), next.begin()+1);</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        } <span style="COLOR: blue">else</span> {</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>            partial_sum(current.rbegin(), current.rend(), next.begin()+1);</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>            reverse(next.begin(), next.end());</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        }</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        swap(current, next);</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>    }</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">return</span> accumulate(current.begin(), current.end(), 0);</span>
								</font>
						</div>
						<div>
								<font size="2">}</font>
						</div>
						<div> </div>
						<div>
								<font size="2">
										<span style="COLOR: blue">int</span> main()</font>
						</div>
						<div>
								<font size="2">{</font>
						</div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">const</span><span style="COLOR: blue">char</span>* AB = <span style="COLOR: maroon">"ABBAAB"</span>;</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>    printf(<span style="COLOR: maroon">"'%s' : %d\n"</span>, AB, countABbest(AB));</span>
								</font>
						</div>
						<div>
								<font size="2">}</font>
						</div>
						<div> </div>
						<div>下面谈一谈我在解决这个问题时的思路。</div>
						<div> </div>
						<div>第一步 初步分析</div>
						<div> </div>
						<div style="TEXT-INDENT: 21pt">以下“字符串”特指题目中提到的由小写字母a、b、c等等组成的字符串，每个字母出现且仅出现一次。显然题目要求我们写一个函数f，f的输入是一个长度为v 的AB序列w，w代表了一个字符串集合s（集合中的元素都是长度为m（m=v+1）的字符串），f的返回值是这个集合的元素个数|s|，即|s|=f(w)。用高中学过的一点排列组合知识，可分析知：</div>
						<div style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt">
								<span>1.<span style="FONT: 7pt 'Times New Roman'">       </span></span>长度为m的字符串有m! 个（’!’ 表示阶乘）因为这相当于m个不同字母的全排列；</div>
						<div style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt">
								<span>2.<span style="FONT: 7pt 'Times New Roman'">       </span></span>长度为v的AB序列有2^v个（’^’ 表示指数）因为每个位置有2种可能，一共有v个位置；</div>
						<div style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt">
								<span>3.<span style="FONT: 7pt 'Times New Roman'">       </span></span>由于2^v &lt;= m! （m=v+1），所以AB序列的数目不大于字符串的数目。</div>
						<div style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt">
								<span>4.<span style="FONT: 7pt 'Times New Roman'">       </span></span>每个字符串刚好有一个AB序列与之对应。比如对于字符串”abdec”，我们很容易得知b在a后，c在b后，d在c前，e在d后，因此它对应的AB序列为”AABA”。可见拿到一个字符串，立刻就能求出它对应的那一个AB序列。</div>
						<div style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt">
								<span>5.<span style="FONT: 7pt 'Times New Roman'">       </span></span>每个AB序列至少对应一个字符串（当然也对应多个，因为字符串数目远远大于AB序列数目）。比如任取一个AB序列”ABA”，很容易构造出与它对应的字符串：</div>
						<div style="MARGIN: 0cm 0cm 0pt 63pt; TEXT-INDENT: -63pt">
								<span>
										<span style="FONT: 7pt 'Times New Roman'">                                  i.<span style="FONT: 7pt 'Times New Roman'">    </span></span>
								</span>b在a后，得”ab”；</div>
						<div style="MARGIN: 0cm 0cm 0pt 63pt; TEXT-INDENT: -63pt">
								<span>
										<span style="FONT: 7pt 'Times New Roman'">                                ii.<span style="FONT: 7pt 'Times New Roman'">    </span></span>
								</span>c在b前，得”acb”或”cab”；</div>
						<div style="MARGIN: 0cm 0cm 0pt 63pt; TEXT-INDENT: -63pt">
								<span>
										<span style="FONT: 7pt 'Times New Roman'">                              iii.<span style="FONT: 7pt 'Times New Roman'">    </span></span>
								</span>d在c后，拿”acb”来说，可得”acdb”和”acbd”；拿”cab”来说，可得 ”cdab”、”cadb”和”cabd”；这样一共构造了5个与”ABA”对应的字符串，而且不会再有别的字符串了（why?）。</div>
						<div style="MARGIN: 0cm 0cm 0pt 42pt">其实我们已经找到了蛮力解决问题的办法。</div>
						<div style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt">
								<span>6.<span style="FONT: 7pt 'Times New Roman'">       </span></span>根据4、5，得知如果穷举出长度为v的AB序列（共2^v个），并计算每个序列对应的字符串数目，那么把所有这些数目加起来，应该等于(v+1)!，这可以用作我们算法的一个检验。</div>
						<div style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt">
								<span>7.<span style="FONT: 7pt 'Times New Roman'">       </span></span>其实这可以看作集合的划分，把一个有 m! 个元素的集合U划分为2^v个不相交的子集s_0, s_1, s_{2^v–1}，每个子集s_i是一个类别，每个字符串都属于一个类别，问题转变为求给定类别中有多少个元素。</div>
						<div> </div>
						<div>第二步 蛮力解决</div>
						<div> </div>
						<div style="TEXT-INDENT: 21pt">在想到前面的分析之前，我先用一种蛮力办法部分地解决了这个问题，思路是拿到一个长度为v的AB序列，穷举所有长度为v+1的字符串，遇到匹配的就记录下来。这样得到第一个程序，这个程序虽然效率极低，但可以用来检验后面程序的正确性，是个标竿。</div>
						<div> </div>
						<div>
								<span style="COLOR: green">
										<font size="2">// CODE 2</font>
								</span>
						</div>
						<div>
								<font size="2">
										<span style="COLOR: blue">bool</span> match(<span style="COLOR: blue">const string&amp; AB, <span style="COLOR: blue">const</span> string&amp; str)</span></font>
						</div>
						<div>
								<font size="2">{</font>
						</div>
						<div>
								<span style="COLOR: green">
										<font size="2">    // many ways to improve this function, but we won’t bother it.</font>
								</span>
						</div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">for</span> (size_t i = 0; i &lt; AB.length(); ++i) {</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        size_t first = str.find(<span style="COLOR: maroon">'a'</span>+i);</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        size_t second = str.find(<span style="COLOR: maroon">'a'</span>+i+1);</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        assert(first != string::npos &amp;&amp; second != string::npos);</span>
								</font>
						</div>
						<div> </div>
						<div>
								<font size="2">
										<span>        <span style="COLOR: blue">if</span> (AB[i] == <span style="COLOR: maroon">'A'</span> &amp;&amp; first &gt; second) {</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>            <span style="COLOR: blue">return</span><span style="COLOR: blue">false</span>;</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        } <span style="COLOR: blue">else</span><span style="COLOR: blue">if</span> (AB[i] == <span style="COLOR: maroon">'B'</span> &amp;&amp; first &lt; second) {</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>            <span style="COLOR: blue">return</span><span style="COLOR: blue">false</span>;</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        }</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>    }</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">return</span><span style="COLOR: blue">true</span>;</span>
								</font>
						</div>
						<div>
								<font size="2">}</font>
						</div>
						<div> </div>
						<div>
								<span style="COLOR: green">
										<font size="2">// the stupid way</font>
								</span>
						</div>
						<div>
								<span style="COLOR: green">
										<font size="2">// O(N! * N^2)</font>
								</span>
						</div>
						<div>
								<font size="2">
										<span style="COLOR: blue">int</span> countAB(<span style="COLOR: blue">const string&amp; AB)</span></font>
						</div>
						<div>
								<font size="2">{</font>
						</div>
						<div>
								<font size="2">
										<span>    assert(AB.find_first_not_of(<span style="COLOR: maroon">"AB"</span>) == string::npos);</span>
								</font>
						</div>
						<div> </div>
						<div>
								<font size="2">
										<span>    string str;</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">int</span> count = 0;</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">int</span> m = (<span style="COLOR: blue">int</span>)AB.length() + 1;</span>
								</font>
						</div>
						<div>
								<span>
										<font size="2">    </font>
								</span>
						</div>
						<div>
								<span style="COLOR: green">
										<font size="2">    // construct the initial string</font>
								</span>
						</div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">for</span> (<span style="COLOR: blue">int</span> i = 0; i &lt; m; ++i) {</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        str.push_back(<span style="COLOR: maroon">'a'</span>+i);</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>    }</span>
								</font>
						</div>
						<div>
								<span>
										<font size="2">    </font>
								</span>
						</div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">do</span> {</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        <span style="COLOR: blue">if</span> (match(AB, str)) {</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>            printf(<span style="COLOR: maroon">"%s, "</span>, str.c_str());</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>            count++;</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        }</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>    } <span style="COLOR: blue">while</span> (next_permutation(str.begin(), str.end()));</span>
								</font>
						</div>
						<div>
								<span>
										<font size="2">    </font>
								</span>
						</div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">return</span> count;</span>
								</font>
						</div>
						<div>
								<font size="2">}</font>
						</div>
						<div> </div>
						<div style="TEXT-INDENT: 21pt">上面这个程序是以AB序列为中心，想办法找到与它匹配的字符串。为了看它能否通过第6点分析的检验，我写了一个enumAB(int v)函数，用来穷举长度为v的所有AB序列，并做检验（检验基本靠眼）。</div>
						<div style="TEXT-INDENT: 21pt"> </div>
						<div>
								<span style="COLOR: green">
										<font size="2">// CODE 3</font>
								</span>
						</div>
						<div>
								<font size="2">
										<span style="COLOR: blue">void</span> enumAB(<span style="COLOR: blue">int v)</span></font>
						</div>
						<div>
								<font size="2">{</font>
						</div>
						<div>
								<font size="2">
										<span>    assert(0 &lt;= v &amp;&amp; v &lt; 26);</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">int</span> nAB = 1 &lt;&lt; v;</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">int</span> total = 0;</span>
								</font>
						</div>
						<div> </div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">for</span> (<span style="COLOR: blue">int</span> i = 0; i &lt; nAB; ++i) {</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        string AB;</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        <span style="COLOR: blue">for</span> (<span style="COLOR: blue">int</span> bit = v-1; bit &gt;= 0; --bit) {</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>            <span style="COLOR: blue">if</span> (i &amp; (1 &lt;&lt; bit)) {</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>                AB.push_back(<span style="COLOR: maroon">'B'</span>);</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>            } <span style="COLOR: blue">else</span> {</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>                AB.push_back(<span style="COLOR: maroon">'A'</span>);</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>            }</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        }</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        <span style="COLOR: blue">int</span> count = countAB(AB);</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        total += count;</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        printf(<span style="COLOR: maroon">"%s : %d\n"</span>, AB.c_str(), count);</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>    }</span>
								</font>
						</div>
						<div> </div>
						<div>
								<font size="2">
										<span>    printf(<span style="COLOR: maroon">"\nTotal strings: %d\n"</span>, total);</span>
								</font>
						</div>
						<div>
								<font size="2">}</font>
						</div>
						<div style="TEXT-INDENT: 21pt"> </div>
						<div style="TEXT-INDENT: 21pt">以下是enumAB(4)的运行结果（5!=120，初步检验通过）：</div>
						<div style="TEXT-INDENT: 21pt"> </div>
						<div>
								<span style="COLOR: blue">
										<font size="2">AAAA : 1</font>
								</span>
						</div>
						<div>
								<span style="COLOR: blue">
										<font size="2">AAAB : 4</font>
								</span>
						</div>
						<div>
								<span style="COLOR: blue">
										<font size="2">AABA : 9</font>
								</span>
						</div>
						<div>
								<span style="COLOR: blue">
										<font size="2">AABB : 6</font>
								</span>
						</div>
						<div>
								<span style="COLOR: blue">
										<font size="2">ABAA : 9</font>
								</span>
						</div>
						<div>
								<span style="COLOR: blue">
										<font size="2">ABAB : 16</font>
								</span>
						</div>
						<div>
								<span style="COLOR: blue">
										<font size="2">ABBA : 11</font>
								</span>
						</div>
						<div>
								<span style="COLOR: blue">
										<font size="2">ABBB : 4</font>
								</span>
						</div>
						<div>
								<span style="COLOR: blue">
										<font size="2">BAAA : 4</font>
								</span>
						</div>
						<div>
								<span style="COLOR: blue">
										<font size="2">BAAB : 11</font>
								</span>
						</div>
						<div>
								<span style="COLOR: blue">
										<font size="2">BABA : 16</font>
								</span>
						</div>
						<div>
								<span style="COLOR: blue">
										<font size="2">BABB : 9</font>
								</span>
						</div>
						<div>
								<span style="COLOR: blue">
										<font size="2">BBAA : 6</font>
								</span>
						</div>
						<div>
								<span style="COLOR: blue">
										<font size="2">BBAB : 9</font>
								</span>
						</div>
						<div>
								<span style="COLOR: blue">
										<font size="2">BBBA : 4</font>
								</span>
						</div>
						<div>
								<span style="COLOR: blue">
										<font size="2">BBBB : 1</font>
								</span>
						</div>
						<div> </div>
						<div>
								<span style="COLOR: blue">
										<font size="2">Total strings: 120</font>
								</span>
						</div>
						<div style="TEXT-INDENT: 21pt"> </div>
						<div style="TEXT-INDENT: 21pt">如果想穷举所有AB序列和它们对应的字符串，还可以用一种效率稍高的蛮力算法，以字符串为中心，穷举所有长度为m的字符串，把它归入相应的AB序列名下。代码如下。</div>
						<div> </div>
						<div>
								<span style="COLOR: green">
										<font size="2">// CODE 4</font>
								</span>
						</div>
						<div>
								<font size="2">string getAB(<span style="COLOR: blue">const string&amp; str)</span></font>
						</div>
						<div>
								<font size="2">{</font>
						</div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">const</span><span style="COLOR: blue">char</span>* alphabet = <span style="COLOR: maroon">"abcdefghijklmnopqrstuvwxyz"</span>;</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>    assert(str.find_first_not_of(alphabet, 0, str.length()) == string::npos);</span>
								</font>
						</div>
						<div> </div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">int</span> pos[26] = {0};</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">char</span> AB[26] = {0};</span>
								</font>
						</div>
						<div> </div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">int</span> m = (<span style="COLOR: blue">int</span>)str.length();</span>
								</font>
						</div>
						<div>
								<span>
										<font size="2">    </font>
								</span>
						</div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">for</span> (<span style="COLOR: blue">int</span> i = 0; i &lt; m; ++i) {</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        pos[str[i]-<span style="COLOR: maroon">'a'</span>] = i;</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>    }</span>
								</font>
						</div>
						<div> </div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">for</span> (<span style="COLOR: blue">int</span> i = 0; i &lt; m-1; ++i) {</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        AB[i] = pos[i] &lt; pos[i+1] ? <span style="COLOR: maroon">'A'</span> : <span style="COLOR: maroon">'B'</span>;</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>    }</span>
								</font>
						</div>
						<div> </div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">return</span> AB; <span style="COLOR: green">// we are not return the local char array, but a string object.</span></span>
								</font>
						</div>
						<div>
								<font size="2">}</font>
						</div>
						<div> </div>
						<div>
								<font size="2">
										<span style="COLOR: blue">void</span> enumStr(<span style="COLOR: blue">int m)</span></font>
						</div>
						<div>
								<font size="2">{</font>
						</div>
						<div>
								<font size="2">
										<span>    string str;</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">int</span> nAB = 0;</span>
								</font>
						</div>
						<div>
								<span>
										<font size="2">    </font>
								</span>
						</div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">for</span> (<span style="COLOR: blue">int</span> i = 0; i &lt; m; ++i) {</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        str.push_back(<span style="COLOR: blue">char</span>(<span style="COLOR: maroon">'a'</span>+i));</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>    }</span>
								</font>
						</div>
						<div>
								<span>
										<font size="2">    </font>
								</span>
						</div>
						<div>
								<font size="2">
										<span>    map&lt;string, vector&lt;string&gt; &gt; AB2strs;</span>
								</font>
						</div>
						<div>
								<span>
										<font size="2">    </font>
								</span>
						</div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">do</span> {</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        string AB = getAB(str);</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        <span style="COLOR: green">//printf("%s is of %s\n", str.c_str(), AB.c_str());</span></span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        AB2strs[AB].push_back(str);</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>    } <span style="COLOR: blue">while</span> (next_permutation(str.begin(), str.end()));</span>
								</font>
						</div>
						<div>
								<span>
										<font size="2">    </font>
								</span>
						</div>
						<div> </div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">for</span> (map&lt;string, vector&lt;string&gt; &gt;::iterator it = AB2strs.begin();</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        it != AB2strs.end(); ++it) {</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>            ++nAB;</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>            printf(<span style="COLOR: maroon">"%s (%d): "</span>, it-&gt;first.c_str(), it-&gt;second.size());</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>            <span style="COLOR: blue">for</span> (vector&lt;string&gt;::iterator str = it-&gt;second.begin();</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>                str != it-&gt;second.end(); ++str) {</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>                    printf(<span style="COLOR: maroon">"%s, "</span>, str-&gt;c_str());</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>            }</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>            printf(<span style="COLOR: maroon">"\n"</span>);</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>    }</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>    printf(<span style="COLOR: maroon">"\nTotal ABs : %d\n"</span>, nAB);</span>
								</font>
						</div>
						<div>
								<font size="2">}</font>
						</div>
						<div style="TEXT-INDENT: 21pt"> </div>
						<div style="TEXT-INDENT: 21pt">以下是enumStr(4)的运行结果（2^3=8，初步检验通过）：</div>
						<div> </div>
						<div>
								<span style="COLOR: blue">
										<font size="2">AAA (1): abcd,</font>
								</span>
						</div>
						<div>
								<span style="COLOR: blue">
										<font size="2">AAB (3): abdc, adbc, dabc,</font>
								</span>
						</div>
						<div>
								<font size="2">
										<span style="COLOR: blue">ABA</span>
										<span style="COLOR: blue"> (5): acbd, acdb, cabd, cadb, cdab,</span>
								</font>
						</div>
						<div>
								<span style="COLOR: blue">
										<font size="2">ABB (3): adcb, dacb, dcab,</font>
								</span>
						</div>
						<div>
								<span style="COLOR: blue">
										<font size="2">BAA (3): bacd, bcad, bcda,</font>
								</span>
						</div>
						<div>
								<span style="COLOR: blue">
										<font size="2">BAB (5): badc, bdac, bdca, dbac, dbca,</font>
								</span>
						</div>
						<div>
								<span style="COLOR: blue">
										<font size="2">BBA (3): cbad, cbda, cdba,</font>
								</span>
						</div>
						<div>
								<span style="COLOR: blue">
										<font size="2">BBB (1): dcba,</font>
								</span>
						</div>
						<div> </div>
						<div>
								<span style="COLOR: blue">
										<font size="2">Total ABs : 8</font>
								</span>
						</div>
						<div> </div>
						<div>第三步 进阶分析</div>
						<div> </div>
						<div style="TEXT-INDENT: 21pt">我们也可以根据前面第5点分析，做出一个更高效的蛮力算法，不过蛮力毕竟是蛮力，还是让我们动动脑筋，做个真正高效的算法吧。</div>
						<div style="TEXT-INDENT: 21pt">我第一次拿到这个问题时，先用蛮力算法打印出前面的结果，试图分析其规律，没成功。便又在纸上演算了了一阵，发现其实可以递推解决（当然也可以递归解决），以下内容最好在纸上演算。比如对于序列”AAA”，字母d只可能在第3号位置出现一次（abcd）；递推一下，对于序列”AAAB”，e在d前，那么e可以在第0、1、2、3号位置各出现一次（eabcd、aebcd、abecd、abced）。</div>
						<div style="TEXT-INDENT: 21pt">又比如根据以前面第5点分析，如果我们知道对于序列”AB”，字母c可能在第0号位置出现一次（cab）、在第1号位置出现一次（acb）；那么对于序列”ABA”，字母d会在第1、2、3号位置分别出现1、2、2次，因此”ABA”对应的字符串共有5个；同理对于序列”ABB”，字母d会在第0、1号位置分别出现2、1次，因此”ABB”对应的字符串共有3个。</div>
						<div style="TEXT-INDENT: 21pt">继续递推，对于序列”ABBA”，e在d后，那么e可以在第1、2、3、4号位置分别出现2、3、3、3次（具体说来，对于d在第0号位置出现2次，那么e可以在第1、2、3、4号位置各出现2次；d在第1号位置出现1次，那么e可以在第2、3、4号位置各出现1次，对位加起来就得到前面“2、3、3、3”的结果），因此”ABBA”对应的字符串共有11个。</div>
						<div style="TEXT-INDENT: 21pt">到这里，我们已经发现递推的规律了：对于AB序列w，用二维数组occurs[][]表示第letter个字母在位置pos出现的次数occurs[letter][pos]（这个说法不太严格，应该说是w的前面长度为letter的子序列对应的字符串中，最大那个字母出现的位置和次数，呵呵，还是比较绕口）。如果字母p在位置q1出现n1次，而AB序列的当前元素为’A’，那么字母p+1会在位置q1+1, q1+2, . . . , p各出现n1次；如果AB序列的当前元素为’B’，那么字母p+1会在位置0, 1, . . . , q1各出现n1次；如果字母p还在q2位置出现了n2次，那么对于’A’ 情况，字母p+1还会在位置q2+1, q2+2, . . . , p各出现n2次；那么对于’B’ 情况，字母p+1还会在位置0, 1, . . . , q2各出现n2次。需要把这些情况都累加起来。</div>
						<div style="TEXT-INDENT: 21pt">对于序列”ABBAA”，递推表如下：</div>
						<div style="TEXT-INDENT: 21pt">1, 0, 0, 0, 0, 0<span>       </span>字母a在位置0出现1次</div>
						<div style="TEXT-INDENT: 21pt">0, 1, 0, 0, 0, 0<span>       </span>字母b在位置1出现1次</div>
						<div style="TEXT-INDENT: 21pt">1, 1, 0, 0, 0, 0<span>       </span>字母c在位置0、1分别出现1次</div>
						<div style="TEXT-INDENT: 21pt">2, 1, 0, 0, 0, 0<span>       </span>字母d在位置0、1分别出现2、1次</div>
						<div style="TEXT-INDENT: 21pt">0, 2, 3, 3, 3, 0<span>       </span>字母e在位置1、2、3、4分别出现2、3、3、3次</div>
						<div style="TEXT-INDENT: 21pt">0, 0, 2, 5, 8, 11<span>     </span>字母f 在位置2、3、4、5分别出现2、5、8、11次</div>
						<div>可知对应的字符串有26个。如果细心，已经能发现递推中的部分和(partial sum)关系。</div>
						<div> </div>
						<div>第四步 解决</div>
						<div> </div>
						<div>既然递推关系有了，很容易就能写出代码。这个算法的复杂度是O(N^3)。</div>
						<div> </div>
						<div>
								<span style="COLOR: green">
										<font size="2">// CODE 5</font>
								</span>
						</div>
						<div>
								<span style="COLOR: green">
										<font size="2">// the better way</font>
								</span>
						</div>
						<div>
								<span style="COLOR: green">
										<font size="2">// O(N^3)</font>
								</span>
						</div>
						<div>
								<font size="2">
										<span style="COLOR: blue">int</span> countABbetter(<span style="COLOR: blue">const string&amp; AB)</span></font>
						</div>
						<div>
								<font size="2">{</font>
						</div>
						<div>
								<font size="2">
										<span>    assert(AB.find_first_not_of(<span style="COLOR: maroon">"AB"</span>) == string::npos);</span>
								</font>
						</div>
						<div> </div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">int</span> v = (<span style="COLOR: blue">int</span>)AB.length();</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">int</span> m = v + 1;</span>
								</font>
						</div>
						<div> </div>
						<div>
								<span style="COLOR: green">
										<font size="2">    // 'letter' at 'pos' occurs 'occurs[letter][pos]' times.</font>
								</span>
						</div>
						<div>
								<font size="2">
										<span>    vector&lt;vector&lt;<span style="COLOR: blue">int</span>&gt; &gt; occurs(m, vector&lt;<span style="COLOR: blue">int</span>&gt;(m, 0));</span>
								</font>
						</div>
						<div> </div>
						<div>
								<span style="COLOR: green">
										<font size="2">    // letter 'a' at pos 0, 1 time</font>
								</span>
						</div>
						<div>
								<font size="2">
										<span>    occurs[0][0] = 1;</span>
								</font>
						</div>
						<div> </div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">for</span> (<span style="COLOR: blue">int</span> letter = 1; letter &lt; m; ++letter) {</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        <span style="COLOR: blue">for</span> (<span style="COLOR: blue">int</span> pos = 0; pos &lt; letter; ++pos) {</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>            <span style="COLOR: blue">int</span> first_pos = 0;</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>            <span style="COLOR: blue">int</span> last_pos = 0;</span>
								</font>
						</div>
						<div> </div>
						<div>
								<font size="2">
										<span>            <span style="COLOR: blue">if</span> (AB[letter-1] == <span style="COLOR: maroon">'A'</span>) {</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>                <span style="COLOR: green">// after current pos</span></span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>                first_pos = pos + 1;</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>                last_pos = letter;</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>            } <span style="COLOR: blue">else</span> {</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>                assert(AB[letter-1] == <span style="COLOR: maroon">'B'</span>);</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>                <span style="COLOR: green">// before (and at) current pos</span></span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>                first_pos = 0;</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>                last_pos = pos;</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>            }</span>
								</font>
						</div>
						<div> </div>
						<div>
								<font size="2">
										<span>            <span style="COLOR: blue">int</span> occur = occurs[letter-1][pos];</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>            <span style="COLOR: blue">for</span> (<span style="COLOR: blue">int</span> t = first_pos; t &lt;</span>＝ last_pos; ++t) {</font>
						</div>
						<div>
								<font size="2">
										<span>                occurs[letter][t] += occur;</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>                assert(occurs[letter][t] &gt;= 0);</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>            }</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>        }</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>    }</span>
								</font>
						</div>
						<div>
								<font size="2">
										<span>    <span style="COLOR: blue">return</span> accumulate(occurs[m-1].begin(), occurs[m-1].end(), 0);</span>
								</font>
						</div>
						<div>
								<font size="2">}</font>
						</div>
						<div> </div>
						<div>第五步 优化</div>
						<div> </div>
						<div style="TEXT-INDENT: 21pt">前面提过一句，在递推的过程中其实隐藏了一个“部分和”的关系，利用这一性质，可以很容易地将复杂度降为O(N^2)，而且递推只是根据当前字母的出现位置退出下一字母的出现位置，因此可以省去2维数组，改用两个vector就行了。最后的代码就是前面一开始列出的 CODE 1。</div>
						<div> </div>
						<div>第六步 展望</div>
						<div> </div>
						<div style="TEXT-INDENT: 21pt">我猜测算法的复杂度能进一步降到 O(N log N)，不过自己已经没有能力实现了。另外，为了附庸风雅一把，我发现整个递推算法的过程如果用矩阵来描述，会变得相当清楚。比如对于序列”ABAAB”，很容易构造矩阵A1、B2、A3、A4、B5（每个矩阵都是6阶方阵），初始向量x=[1 0 0 0 0 0]<em><sup>T</sup></em>，生成向量y=B5*A4*A3*B2*A1*x，那么对应的字符串有sum(y)个（sum表示y的各分量之和）。</div>
						<div style="TEXT-INDENT: 21pt">注：也可以定义初始向量x=[1]，矩阵A1是2x1、矩阵B2是3x2、矩阵A3是4x3、……、矩阵B5是6x5，一样可以计算出向量y。</div>
						<div style="TEXT-INDENT: 21pt">例如：（这些矩阵中的元素都是0或1，排列起来像三角形（因为是求部分和），很有规律的。）</div>
						<div style="TEXT-INDENT: 21pt">A1 = [0; 1]</div>
						<div style="TEXT-INDENT: 21pt">B2 = [1 1; 0 1; 0 0]</div>
						<div style="TEXT-INDENT: 21pt">A3 = [0 0 0; 1 0 0; 1 1 0; 1 1 1]</div>
						<div style="TEXT-INDENT: 21pt">A4 = [0 0 0 0; 1 0 0 0; 1 1 0 0; 1 1 1 0; 1 1 1 1]</div>
						<div style="TEXT-INDENT: 21pt">B5 = [1 1 1 1 1; 0 1 1 1 1; 0 0 1 1 1; 0 0 0 1 1; 0 0 0 0 1; 0 0 0 0 0]</div>
						<div style="TEXT-INDENT: 21pt">算出y = B5*A4*A3*B2*A1 = [9 9 9 8 5 0]<em><sup> T</sup></em></div>
						<div style="TEXT-INDENT: 21pt">sum(y) = 40，与前面程序的结果相同。</div>
						<div> </div>
						<div>. 完 .</div>
						<br />
						<br />
						<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=653418</p>
				</div>
				<div class="postFoot">
						<script src="http://localhost:82/PromoteIcon.aspx?id=653418">
						</script>
[<a href="javascript:StorePage()">点击此处收藏本文</a>]   陈硕发表于 2006年04月06日 22:04:00 </div>
		</div>
		<div id="tagad">
				<div class="tag_csdn_zhaigao_460x60"> </div>
		</div>
		<script type="text/javascript"><![CDATA[ocument.write("<img src=http://counter.csdn.net/pv.aspx?id=24 border=0 width=0 height=0>");]]&gt;</script>
		<img height="0" src="http://counter.csdn.net/pv.aspx?id=24" width="0" border="0" />dynamic programming 发表于2006-04-07 08:51:00  IP: 10.61.98.*
<div class="post"><div class="postText">就是以dynamic programming算法。 <br /><br />Python实现如下： <br /><br />def genPositions(a, position): <br />doSum = { 'A':(lambda x: sum(position[:x])),'B':(lambda x: sum(position[x:])) } <br />return map( doSum[a[-1]], range(len(a)+1) ) <br /><br />def pn(a): <br />if( len(a) == 0 ): return [1] <br />return genPositions(a, pn(a[0:-1])) <br /><br />def count(a): <br />return sum(pn(a)) <br /><br /></div></div><br /><a name="654230"> </a><div class="post"><div class="postTitle">Solstice 发表于2006-04-07 15:09:00  IP: 207.46.89.*</div><div class="postText">拿 Scheme 写了一个递归版的，初学乍练，写得不地道，请大家拍砖。 <br /><br />(define (countAB AB) <br />(if (string? AB) <br />(sum (listAB AB)) <br />(display "The argument must be a AB-sequence!\n"))) <br /><br />(define (sum L) <br />(apply + L)) <br /><br />(define (listAB AB) <br />(if (= (string-length AB) 0) <br />(list 1) <br />(let ((last (- (string-length AB) 1))) <br />(next-listAB (string-ref AB last) (listAB (substring AB 0 last)))))) <br /><br />(define (next-listAB lastABchar sub-listAB) <br />(if (char=? lastABchar #\A) <br />(cons 0 (partial-sum sub-listAB)) <br />(append (reversed-partial-sum sub-listAB) (list 0)))) <br /><br />(define (partial-sum L) <br />(reverse (reversed-partial-sum (reverse L)))) <br /><br />(define (reversed-partial-sum L) <br />(if (null? L) <br />(list) <br />(cons (sum L) (reversed-partial-sum (cdr L))))) <br /><br />(countAB "ABABABAB")</div></div><br /><a name="666670"> </a><div class="post"><div class="postTitle">曾登高 发表于2006-04-17 16:50:00  IP: 211.100.21.*</div><div class="postText">TrackBack来自<a href="http://blog.csdn.net/zdg/archive/2006/04/17/666666.aspx">《上周技术关注：《断背山2》之Google爱情故事》</a>：<br /><br />今天周末，给大家讲一个发生在Google里面的爱情故事。说到爱情故事，真是无奇不有。如果你对传统男女之间的生离死别感到厌倦，那么李安导演的两个牛仔之间的断背之情可能会在一定程度上满足你的要求。当然，如果你不喜欢牛仔，那么王家卫的《春光乍泄》是个不错的后备选择——至少张国荣与梁朝伟都是国产帅哥。什么？！你很喜欢这种类型的爱情故事？！那好，下面是一个发生在Google里面的《断背山2》。</div></div><br /><a name="674578"> </a><div class="post"><div class="postTitle">S 发表于2006-04-24 09:47:00  IP: 218.94.21.*</div><div class="postText">谷歌，在深谷里面唱歌，只有自己才能听到！ <br /><br />现在搜索的数量和质量和baidu比差远了！ <br /><br />长期这样下去，我看连alltheweb都不如了</div></div><br /><a name="694509"> </a><div class="post"><div class="postTitle"><a href="http://ww/" target="_blank" rel="nofollow">请教</a> 发表于2006-04-28 09:18:00  IP: 61.141.169.*</div><div class="postText">// CODE 1 <br />// the best way <br />// O(N^2) <br />??? <br />为什么会是O(n^2) <br />我觉得你的算法复杂度是:O(nlogn)</div></div><br /><a name="694954"> </a><div class="post"><div class="postTitle">Solstice 发表于2006-04-28 13:07:00  IP: 207.46.89.*</div><div class="postText">外层循环执行N次，内层partial_sum和reverse的复杂度都是O(N)，所以一共是O(N^2)。</div></div><br /><a name="695039"> </a><div class="post"><div class="postTitle"><a href="http://ww/" target="_blank" rel="nofollow">璇锋暀</a> 发表于2006-04-28 13:51:00  IP: 59.40.26.*</div><div class="postText">明白了,谢谢</div></div><br /><a name="695158"> </a><div class="post"><div class="postTitle"><a href="http://ww/" target="_blank" rel="nofollow">再请教一个问题</a> 发表于2006-04-28 14:49:00  IP: 59.40.26.*</div><div class="postText">下面是一个对"活动安排"进行重新排列的问题的贪心算法:它的时间复杂度是O(nlogn),这个logn应该如何解释???是否能够给出一些直观的解释,谢谢 <br /><br />template&lt;class Type&gt; <br />void GreedySelector(int n, Type s[], Type f[], bool A[]) <br />{ <br />A[1]=true; <br />int j=1; <br />for(int i=2; i&lt;=n; i++) <br />{ <br />if(s[i]&gt;=f[j]) <br />{ <br />A[i]=true; <br />j=i; <br />} <br />else <br />{ <br />A[i]=false; <br />} <br />} <br />}</div></div><br /><a name="695619"> </a><div class="post"><div class="postTitle">Solstice 发表于2006-04-28 18:28:00  IP: 207.46.89.*</div><div class="postText">建议你去问写出这个算法的人。</div></div><br /><a name="714466"> </a><div class="post"><div class="postTitle">xinshijie 发表于2006-05-09 13:10:00  IP: 60.10.134.*</div><div class="postText">楼主，题目没看完也知道这种题目肯定是找递归关系啦。这种类型的题目N年前我中学竞赛训练时递归数列那块就出现过很多了。用了10分钟写了一下代码。。。感觉应该可以推出统一公式直接计算，等会推推试试，当年常干这活。呵呵 <br /><br />最近在做Google那道e的小数点后十万位的题目，头都大了。</div></div><br /><a name="764552"> </a><div class="post"><div class="postTitle">西玉林 发表于2006-05-30 22:12:00  IP: 162.105.199.*</div><div class="postText">算法在f[]已排序情况下是O(n),如果未排序，则是排序复杂度O(nlogn)</div></div><br /><a name="852606"> </a><div class="post"><div class="postTitle">malin 发表于2006-06-29 20:26:00  IP: 221.219.48.*</div><div class="postText">先写了一个，明天再加入DP试试 <br /><br />#include&lt;iostream&gt; <br /><br />using namespace std; <br /><br />char input[32]; <br />int len; <br /><br />int recurise(char left, char right, char posi) <br />{ <br />//cout &lt;&lt; "recurise call: " &lt;&lt; (int)left &lt;&lt; " " &lt;&lt; (int)right &lt;&lt; " " &lt;&lt; (int)posi &lt;&lt; endl; <br /><br />if( posi &gt;= len) <br />return 1; <br /><br />int all = left + right + 1; //当前共有 <br />int sum = 0; <br />int temp, i; <br /><br />if( 'A' == input[posi] ) //在之后 <br />{ <br />for( i = left + 1; i &lt;= all; i++ ) <br />{ <br />temp = recurise( i, all - i, posi + 1 ); <br /><br />if( -1 == temp || temp &gt; 1000000000 ) <br />return -1; <br />sum += temp; <br />} <br />} <br />else //'B'，在之前 <br />{ <br />for( i = left; i &gt;= 0; i-- ) <br />{ <br />temp = recurise( i, all - i, posi + 1); <br /><br />if( -1 == temp || temp &gt; 1000000000 ) <br />return -1; <br />sum += temp; <br />} <br />} <br /><br />return sum; <br />} <br /><br />int main(void) <br />{ <br />cin &gt;&gt; input; <br />cout &lt;&lt; "input: " &lt;&lt; input &lt;&lt; endl; <br /><br />len = strlen( input ); <br />int sum = recurise( 0, 0, 0 ); <br /><br />cout &lt;&lt; "result: " &lt;&lt; sum &lt;&lt; endl; <br />} <br /><br /></div></div><br /><a name="852707"> </a><div class="post"><div class="postTitle">malin 发表于2006-06-29 20:48:00  IP: 221.219.48.*</div><div class="postText">只有上一个字符的位置，和它左边右边的已排个数对现在的字符位置有影响，所以就用数字就可以了，不用字符串。加上DP可能更快。 <br />对不起我没仔细看楼主兄的内容，周末有时间再看看吧。感觉您考虑复杂了，也许是我肤浅了，见谅。</div></div><br /><a name="856943"> </a><div class="post"><div class="postTitle">malin 发表于2006-06-30 18:41:00  IP: 221.217.51.*</div><div class="postText">今天一看，原来是4月的帖子，哎 <br />这是加上DP的最终，基本上是最快的了 <br /><br />#include &lt;iostream&gt; <br />#include &lt;map&gt; <br /><br />using namespace std; <br /><br />#pragma pack(push,1) <br />struct key <br />{ <br />char left; <br />char right; <br />char posi; <br />char no; <br /><br />key( char _left, char _right, char _posi ) <br />{ <br />left = _left; <br />right = _right; <br />posi = _posi; <br />no = 0; <br />} <br /><br />bool operator&lt;( const key &amp;one ) const <br />{ <br />return *(int*)this &lt; *(int*)&amp;one; <br />} <br />}; <br />#pragma pack(pop) <br /><br />char input[32]; <br />int len; <br />map&lt;key, int&gt; dp_map; <br /><br />int recurise( char left, char right, char posi ); <br /><br />inline int from_dp( char left, char right, char posi ) <br />{ <br />key k( left, right, posi ); //make a key <br />map&lt;key, int&gt;::iterator i = dp_map.find( k ); //find <br />int temp; <br /><br />if( dp_map.end() == i ) //no found <br />{ <br />temp = recurise( left, right, posi ); <br />dp_map.insert( i, make_pair(k, temp) ); <br /><br />return temp; <br />} <br />else //found <br />{ <br />return i-&gt;second; <br />} <br />} <br /><br />int recurise( char left, char right, char posi ) <br />{ <br />if( posi &gt;= len ) <br />return 1; <br /><br />int all = left + right + 1; //in all at present <br />int sum = 0; <br />int temp, i; <br /><br />if( 'A' == input[posi++] ) //after <br />{ <br />for( i = left + 1; i &lt;= all; i++ ) <br />{ <br />temp = from_dp( i, all - i, posi ); <br /><br />if( -1 == temp || temp &gt; 1000000000 ) <br />return -1; <br />sum += temp; <br />} <br />} <br />else //'B', before <br />{ <br />for( i = left; i &gt;= 0; i-- ) <br />{ <br />temp = from_dp( i, all - i, posi ); <br /><br />if( -1 == temp || temp &gt; 1000000000 ) <br />return -1; <br />sum += temp; <br />} <br />} <br /><br />return sum; <br />} <br /><br />int main( void ) <br />{ <br />cin &gt;&gt; input; <br /><br />len = strlen( input ); <br />cout &lt;&lt; "m = " &lt;&lt; len + 1 &lt;&lt; endl; <br /><br />if(len &gt; 25) <br />return -1; <br /><br />int sum = recurise( 0, 0, 0 ); <br />cout &lt;&lt; "result: " &lt;&lt; sum &lt;&lt; endl; <br />} <br /><br /></div></div><br /><a name="857660"> </a><div class="post"><div class="postTitle">Solstice 发表于2006-06-30 21:40:00  IP: 221.216.152.*</div><div class="postText">请问你这个算法的复杂度是O(?) ？</div></div><br /><a name="930367"> </a><div class="post"><div class="postTitle">aRies 发表于2006-07-16 23:09:00  IP: 211.100.21.*</div><div class="postText">TrackBack来自<a href="http://blog.csdn.net/ariesying/archive/2006/07/16/930358.aspx">《一道Google top coder的850分例题及解答》</a>：<br /><br />一道Google top coder的850分例题及解答</div></div><br /><a name="930368"> </a><div class="post"><div class="postTitle">aRies 发表于2006-07-16 23:09:00  IP: 211.100.21.*</div><div class="postText">TrackBack来自<a href="http://blog.csdn.net/ariesying/archive/2006/07/16/930361.aspx">《一道Google top coder的850分例题及解答》</a>：<br /><br />一道Google top coder的850分例题及解答</div></div><br /><a name="1048049"> </a><div class="post"><div class="postTitle"><a href="http://blog.csdn.net/phoenixsh" target="_blank" rel="nofollow">phoenixsh</a> 发表于2006-08-10 21:29:00  IP: 58.33.28.*</div><div class="postText">不知道DP跟这道题有什么关系。malin的程序没看懂，不过他有一个地方说对了，就是“只有上一个字符的位置，和它左边右边的已排个数对现在的字符位置有影响”。知道这一点就可以递推下去了。只需要一个数组来保存上次最后一个字符在各个位置上的出现频率，当然计算中还需要另外一个数组保存当前结果。这个题是有O(n)的解法的。 <br /><br />to xinshijie: 我怀疑简单的公式解的存在性。 <br /><br /></div></div><br /><a name="1059151"> </a><div class="post"><div class="postTitle"><a href="http://blog.csdn.net/phoenixsh" target="_blank" rel="nofollow">phoenixsh</a> 发表于2006-08-13 19:37:00  IP: 218.82.51.*</div><div class="postText">想了一个周末，要想突破O(n^2)看来还是比较困难的。</div></div><img src ="http://www.cnitblog.com/hunter/aggbug/15932.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/hunter/" target="_blank">hunter's space</a> 2006-08-25 12:22 <a href="http://www.cnitblog.com/hunter/archive/2006/08/25/15932.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>破解“星空极速”</title><link>http://www.cnitblog.com/hunter/archive/2006/08/24/15885.html</link><dc:creator>hunter's space</dc:creator><author>hunter's space</author><pubDate>Thu, 24 Aug 2006 09:46:00 GMT</pubDate><guid>http://www.cnitblog.com/hunter/archive/2006/08/24/15885.html</guid><wfw:comment>http://www.cnitblog.com/hunter/comments/15885.html</wfw:comment><comments>http://www.cnitblog.com/hunter/archive/2006/08/24/15885.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/hunter/comments/commentRss/15885.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/hunter/services/trackbacks/15885.html</trackback:ping><description><![CDATA[
		<p class="textbox-label">
				<font color="#006400" size="2">
						<font size="3">
								<strong>
										<font color="#000000">能提速的“星空极速”？</font>
										<br />
								</strong>
						</font>
						<br />很多人都在使用路由器进行ADSL拨号，这样几台机子利用路由可以愉快的共享上网，电信的ADSL虚拟拨号用和是PPPOE的协议，这个协议是电信无法改变的，因此，电信很难限制大家共享上网。<br /><br />电信多次尝试封掉路由器未果，开始的时候有网络尖兵，相当于一个电信的网络扫描软件，不断的冲击路由器上的某些端口，导致路由无法正常工作，但是这个软件造成了网络的大量阻塞，在电信线路容量不扩充的前提下，是非常危险的软件，受害人可能会先是电信自己，同时现在的路由器通过刷固件升级，已经不害怕尖兵的扫描了，第一次攻击失败。<br /><br />最近的一次，电信发明了一个拨号服务端，叫做“星空极速”，电信号称这个软件可以提升上网速度，512K的ADSL直接升级为1M，1M的升级为1.5M，西安地区的有人已经试过了，根本没有提速，而且电信也没有这样宣传，电信是派人挨家挨户的给用户安装这个软件的，<font color="#ff0000">安装之后的唯一结果就是你可能无法使用路由器拨号了</font>。<br /><br /><font color="#0000ff">星空极速会改掉你的密码，给你的网络连接加一个PPPOE的密码协议转换，你在星空极速软件上使用的还是你原来的密码，但是实际PPPOE协议发出的密码，却是一套转换过的。<br /><br /></font><font color="#000000" size="3"><strong><font color="#000000">占领用户桌面？电信意欲何为</font></strong><font color="#000000"><font size="2"><font size="3"><font color="#0000ff"><font class="content"><br /><br /><div align="left"><font color="#000000" size="2">中国电信推广“星空极速”，到底目的何在？自从一位内部人士在cnbeta上爆料电信内部资料后，这一问题被广泛关注。<br /><br />下面是cnbeta和网易的联合报道链接页面</font></div><div align="center"><table cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr><td colspan="2"><a href="http://tech.163.com/special/000915RB/telecom0823.html" target="_blank"></a><a href="http://www.cnbeta.com//modules.php?name=News&amp;file=article&amp;sid=14425" target="_blank"><font size="2"><img alt="cnBeta.COM与网易联合报道星空极速事件" src="http://photo7.yupoo.com/20060824/132147_1828175530_iXZjn.jpg" border="0" /></font></a></td></tr><tr><td align="left" width="50%"><font size="2"><img src="http://www.cnbeta.com//athere/news/0608-vnet/index/tips.gif" border="0" /><strong><a href="http://www.cnbeta.com//modules.php?name=News&amp;file=article&amp;sid=14294" target="_blank">关注星空极速的目标 - '占领用户桌面'</a></strong></font></td><td align="right" width="50%"><strong><a href="http://www.cnbeta.com//modules.php?name=News&amp;file=article&amp;sid=14295" target="_blank"><font size="2">关注终极流氓软件</font></a></strong><a href="http://www.cnbeta.com//modules.php?name=News&amp;file=article&amp;sid=14295" target="_blank"><font size="2"><img src="http://www.cnbeta.com//athere/news/0608-vnet/index/tips.gif" border="0" /></font></a></td></tr><tr><td align="left" width="50%"><font size="2"><img src="http://www.cnbeta.com//athere/news/0608-vnet/index/tips.gif" border="0" /><strong><a href="http://www.cnbeta.com//modules.php?name=News&amp;file=article&amp;sid=14330" target="_blank">趁火打劫:'关于ADSL用户网络故障的紧急通知'</a></strong></font></td><td align="right" width="50%"><strong><a href="http://www.cnbeta.com//modules.php?name=News&amp;file=article&amp;sid=14348" target="_blank"><font size="2">电信员工投递:正视'星空极速' (更新)</font></a></strong><a href="http://www.cnbeta.com//modules.php?name=News&amp;file=article&amp;sid=14348" target="_blank"><font size="2"><img src="http://www.cnbeta.com//athere/news/0608-vnet/index/tips.gif" border="0" /></font></a></td></tr><tr><td align="left" width="50%"><font size="2"><img src="http://www.cnbeta.com//athere/news/0608-vnet/index/tips.gif" border="0" /><strong><a href="http://www.cnbeta.com//modules.php?name=News&amp;file=article&amp;sid=14350" target="_blank"> '星火燎原' 工程部署 微软也有参与</a></strong></font></td><td align="right" width="50%"><strong><a href="http://www.cnbeta.com//modules.php?name=News&amp;file=article&amp;sid=14385" target="_blank"><font size="2">有报告称中国电信劫持浏览器访问</font></a></strong><a href="http://www.cnbeta.com//modules.php?name=News&amp;file=article&amp;sid=14385" target="_blank"><font size="2"><img src="http://www.cnbeta.com//athere/news/0608-vnet/index/tips.gif" border="0" /></font></a></td></tr><tr><td align="left" width="50%"><font size="2"><img src="http://www.cnbeta.com//athere/news/0608-vnet/index/tips.gif" border="0" /><strong><a href="http://www.cnbeta.com//modules.php?name=News&amp;file=article&amp;sid=14424" target="_blank">上海电信下达告用户书可能强行安装'星空极速'</a></strong></font></td><td align="right" width="50%"><a href="http://www.cnbeta.com//modules.php?name=News&amp;file=article&amp;sid=14385" target="_blank"><img src="http://www.cnbeta.com//athere/news/0608-vnet/index/tips.gif" border="0" /></a></td></tr></tbody></table></div></font></font></font><div align="left"></div></font></font></font></font>
				<strong>
						<br />备份：<a href="http://blog.csdn.net/seven2000/archive/2006/08/24/1113305.aspx" target="_blank"><font size="2">“星空极速”背后--电信的野心与无耻</font></a><div align="center"><hr /></div><div align="left">用Sniffer破解星空极速<br /></div><div align="center"><table style="TABLE-LAYOUT: fixed" cellspacing="6" cellpadding="0" width="100%" border="0"><tbody><tr><td class="news"><p><span class="tpc_content"><font size="2">想必大家对星空极速痛恨有加,至于危害也不必多说,现在已经有人放出破解程序,但是此程序只对应西安市个别地区有效,因为西安市有V,G,A开头的用户名,不能100%解除星空极速,偶的方法100%有效,而且不限地区,全国通用.解除后可以用XP自代程序拨号,可多机上网<br /><br />第一步: 下载 SNIFFER PRO 4.7.5   33MB   英文不好的可以下个汉化补丁<br /><br />第二步: 安装SNIFFER PRO ,安装汉化补丁,重新启动系统<br /><br />第三步: 不要运行星空极速连接网络,运行程序,点击"文件"---"选定设置",选择你的网卡,确定</font></span></p><p><span class="tpc_content"><font size="2"><img alt="破解电信星空急速限制(仅供探讨交流)!,星空急速,GOOGLE,BAIDU" src="http://p.blog.csdn.net/images/p_blog_csdn_net/seven2000/sniffer1.jpg" border="0" /><br /><br />第四:点击菜单"监视器"___"主机列表",出现如图,</font></span></p><p><span class="tpc_content"><font size="2"><img alt="破解电信星空急速限制(仅供探讨交流)!,星空急速,GOOGLE,BAIDU" src="http://p.blog.csdn.net/images/p_blog_csdn_net/seven2000/sniffer2.jpg" border="0" /><br /><br /></font></span><span class="tpc_content"><font size="2">点击图中2处"本地",点击图中3处"捕捉"。这时连接运行星空极速连接网络,连接上网后可以看到图中4处,变为望远镜有个红点,这时候点击图中4处,这样就停止了捕捉<br /><br />第五,点击图中1处解码,出现如图报告<br /><img alt="破解电信星空急速限制(仅供探讨交流)!,星空急速,GOOGLE,BAIDU" src="http://p.blog.csdn.net/images/p_blog_csdn_net/seven2000/sniffer3.jpg" border="0" /><br /></font></span><span class="tpc_content"><font size="2">在2处,可以通过单击每一步序号,观察3处本机与服务器通讯记录,找到你的用户名(涂红处),和加过密的密码(涂黑处),<br /><br />第六:删除星空极速,用XP自带程序拨号,</font></span><span class="tpc_content"><font size="2"><br />注意,你的用户名不变,密码改为刚才截获的密码</font></span></p><p><span class="tpc_content"><font size="2">补充:<br /></font></span><span class="tpc_content"><font size="2">1.如果你使用的是千兆网卡（现在很多主板都是千兆网卡）那么一定要用SNIFFER.POR.V4.7.5 SP5<br />   </font></span><span class="tpc_content"><font size="2">没有打SP5的SNIFFER不能识别千兆网卡　在启动后host table里没有本地主机<br />   给大家一个下载连接</font><a href="http://www.mxh.com.cn/Soft_Down.asp?UrlID=1&amp;SoftID=4" target="_blank"><font color="#0000ff" size="2">http://www.mxh.com.cn/Soft_Down.asp?UrlID=1&amp;SoftID=4</font></a><br /><font size="2">2.网上给得很多ｓｉｎｆｆｅｒ的注册码用不成的<br />   给大家一个能用的　　　SR424-255RR-255OO-255RR</font></span></p></td></tr></tbody></table></div><div align="center"><hr /></div><div align="center">Mephisto的破解器<br /></div></strong>
				<font size="2">
						<br />上面这种方法比较通用，但对sniffer不熟的人使用起来可能有一定困难。mephisto为我们带来了它的破解器。<br /><br />他在windows下装了星空极速，在Linux下使用原密码就不能上网了，用SNIFFER看了一下，实际密码是在原来的密码上加了一串MD5码，这个MD5码是根据用户名算出来的，就比如说你原来的密码是aaaaaaa，用户名是j88888888，那么装了急速星空之后，密码可能会变成aaaaaaa3D8CAB，这个3D8CAB是由j88888888用户名算出来的，但是在急速星空上你还是输入aaaaaaa当作密码，就是说你没有办法知道真实密码了，虽然路由器用的是PPPOE协议拨号，但不知道真实密码当然不能用。<br />在分析完算法后</font>
				<font size="3">
						<font color="#d2691e">Mephisto<font color="#000000" size="2">算在他的blog上发布了他的破解器</font></font>
						<br />
						<br />
						<a href="/Files/hunter/xkjs_KeyGen.rar">
								<font color="#ff0000">点击这里下载文件</font>
						</a>
				</font>
				<br />
				<span style="COLOR: #ff0000">
						<span style="FONT-SIZE: 14px">
								<br />
								<font size="2">（2006.8.15）很多人报告他的互联星空使用本算号机无法正常工作，作者最新又研究了一下这个软件，详情请参考他的blog，当然也可以使用sniffer查看，这也是作者最早使用的方式，再次申明作者的blog地址：</font>
						</span>
				</span>
				<a href="http://mephistophilis.spaces.live.com/" target="_blank">
						<font size="2">http://mephistophilis.spaces.live.com/</font>
				</a>
				<br />
				<br />
				<span style="COLOR: #ff0000">
						<font size="2">（2006.8.2增加）</font>
				</span>
				<font color="#000000" size="2">因为有些人留言说出现了错误，但是却没有提供相应的信息，所以最好在问问题的时候能提供多一些的信息，比如你使用的互联星空版本，还有你在西安的哪个区，然后你的操作步骤，然后出现的结果...<br /><br />同时，在你提供上面的那些信息的时候，请不要透露你的个人信息，以避免不必要的麻烦，比如家里的电话、还有QQ号什么的，在这里留言或者直接去mephisto的blog留言，因为他是作者，反馈会更直观。<br /><br />下面说一下使用的方法，请大家确认一下：<br /></font>
				<span style="COLOR: #ff0000">
						<span style="FONT-SIZE: 14px">
								<font size="2">你先要保证，你使用的用户名和密码在互联星空上可以拨上去，再使用这个算号器算号，将刚才成功拨号的用户名和密码填进去，这时候算出一个新密码，卸载互联星空，使用原来的用户名和刚才用算号器算好的新密码，用windows自带的PPPOE拨号。<br /><font color="#000000">看一下这些操作步骤和你的是否一样，不一样在这里留言。</font></font>
						</span>
				</span>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<span style="COLOR: #d2691e">下面是mephisto在他的blog上的帖子</span>
		<strong>
				<br />-----------------------------------------------------------------------------------------------------<br /><font size="2">哈哈 问候一下中国电信</font><br /></strong>
		<span style="COLOR: #00008b">
				<font size="2">关键字：中国电信 陕西 西安 星空极速 2.5 破解 crack keygen 流氓软件 <br />希望上面的关键字可以帮助更多的星空极速的受害者搜到这个程序。<br />具体这个软件有多流氓我就不详细说明了，但是可以查看下面的链接：<br /></font>
				<a href="http://post-mp3js.baidu.com/f?kz=92364004" target="_blank">
						<font size="2">http://post-mp3js.baidu.com/f?kz=92364004</font>
				</a>
				<br />
				<a href="http://www.315ts.net/viewtousu.asp?id=18902&amp;tid=3" target="_blank">
						<font size="2">http://www.315ts.net/viewtousu.asp?id=18902&amp;tid=3</font>
				</a>
				<br />
				<a href="http://www.google.com/search?hl=zh-CN&amp;q=%E6%98%9F%E7%A9%BA%E6%9E%81%E9%80%9F+2.5&amp;lr=" target="_blank">
						<font size="2">http://www.google.com/search?hl=zh-CN&amp;q=%E6%98%9F%E7%A9%BA%E6%9E%81%E9%80%9F+2.5&amp;lr=</font>
				</a>
				<br />
				<br />
				<font size="2">程序的链接如下：<br /></font>
				<a href="http://mephistophilis.googlepages.com/md5.7z" target="_blank">
						<font size="2">http://mephistophilis.googlepages.com/md5.7z</font>
				</a>
				<br />
				<br />
				<font size="2">感谢：neogeo64帮我把md5的算法弄出来。<br /><br />注意：<br />这是免费软件，也就意味着如果使用这个软件造成什么问题软件的作者是不会负责的；<br />7z是用7-zip压缩的；<br />程序算出来密码不确保正确，但是这个程序在我这里确实运行的十分正常（西安），并且得到了正确的密码；<br />程序保证不是不是什么盗号软件，黑客程序之类的东西，如果不是在我这里下载的我可不保证程序没有问题；<br />有什么问题欢迎大家提问和讨论；<br />但是如果您说话的语气跟谁欠你什么一样最好请早早的滚远。</font>
		</span>
		<br />----------------------------------------------------------------------------------------<br /><span style="COLOR: #8b0000">使用介绍：</span><br /><a href="http://www.schongux.com/attachment/keygen.JPG" target="_blank"><img title="点击在新窗口中浏览此图片" alt="点击在新窗口中浏览此图片" src="http://www.schongux.com/attachment/keygen.JPG" border="0" /></a><img src ="http://www.cnitblog.com/hunter/aggbug/15885.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/hunter/" target="_blank">hunter's space</a> 2006-08-24 17:46 <a href="http://www.cnitblog.com/hunter/archive/2006/08/24/15885.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自己动手修改jeolee模版</title><link>http://www.cnitblog.com/hunter/archive/2006/08/23/15814.html</link><dc:creator>hunter's space</dc:creator><author>hunter's space</author><pubDate>Wed, 23 Aug 2006 10:01:00 GMT</pubDate><guid>http://www.cnitblog.com/hunter/archive/2006/08/23/15814.html</guid><wfw:comment>http://www.cnitblog.com/hunter/comments/15814.html</wfw:comment><comments>http://www.cnitblog.com/hunter/archive/2006/08/23/15814.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/hunter/comments/commentRss/15814.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/hunter/services/trackbacks/15814.html</trackback:ping><description><![CDATA[现学现卖，刚刚学了点css的语法常识，把jeolee的模版稍微修改了一下。<br />源模版文件 <a href="/Skins/jeolee/style.css">http://www.cnitblog.com/Skins/jeolee/style.css</a><br /><table class="TableEdit" id="TableEdit" width="100%"><tbody><tr><td>分析后作出如下修改：<a id="Editor_Edit_hlEntryLink" title="view: 自己动手修改jeolee模版" href="/hunter/archive/2006/08/23/15814.html" target="_blank"><font color="#002c99"></font></a></td></tr></tbody></table><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 id="Codehighlighter1_1002_1039_Open_Text"> #wrap {<br /> MARGIN:0px auto 0px -510px; WIDTH: 1000px; POSITION:absolute; HEIGHT: 100%; TEXT-ALIGN: left<br />}<br />#content {<br /> PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 12px; FLOAT: left; PADDING-BOTTOM: 0px; MARGIN: 0px 0px 10px 10px; WIDTH: 700px; COLOR: #444444; LINE-HEIGHT: 18px; PADDING-TOP: 0px; FONT-FAMILY: YoonGothic, AppleGothic; TEXT-ALIGN: left<br />}<br />#menu {<br /> POSITION:absolute; MARGIN:-70px 60px; FONT-SIZE: 11px; FLOAT: right; VERTICAL-ALIGN: top; WIDTH: 222px; COLOR: #333333; LINE-HEIGHT: 15px; FONT-FAMILY: YoonGothic, AppleGothic, lucida grande,trebuchet ms,verdana,trebuchet,sans-serif; TEXT-ALIGN: left<br />}<br />#header H1 A {<br /> FONT-SIZE: 18px; COLOR: #ffffff<br />}<br />.date {<br /> PADDING-BOTTOM: 0px; MARGIN: 10px 0px 0px; HEIGHT: 20px; FONT-WEIGHT: bold; FONT-SIZE: 14px; COLOR: Purple; TEXT-ALIGN: center <br />}<br />.author {<br /> CLEAR: both; FONT-WEIGHT: normal; FONT-SIZE: 11px; PADDING-BOTTOM: 0px; COLOR: #555555; FONT-FAMILY: verdana,trebuchet,sans-serif; LETTER-SPACING: -0.1em; TEXT-ALIGN: right<br />}<br />#notebottom {<br /> display:none;BACKGROUND: url(images/notebottom.gif) no-repeat; WIDTH: 816px; POSITION: relative; TOP: -11px; HEIGHT: 67px<br />}<br />#footer {<br /> display:none;PADDING-BOTTOM: 30px<br />}</span></div><br />#warp 主体框架    #content  正文   #menu  导航目录 <br />#header H1 A    标题中链接的字体<br />#footer 页脚<br />.date  分类字体    .author  每个主体后的作者信息<img src ="http://www.cnitblog.com/hunter/aggbug/15814.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/hunter/" target="_blank">hunter's space</a> 2006-08-23 18:01 <a href="http://www.cnitblog.com/hunter/archive/2006/08/23/15814.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>