锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美午夜精品久久久久久超碰,欧美在线一级va免费观看,尤物yw午夜国产精品视频明星http://www.shnenglu.com/MatoNo1/archive/2012/10/24/193781.htmlMato_No1Mato_No1Wed, 24 Oct 2012 07:11:00 GMThttp://www.shnenglu.com/MatoNo1/archive/2012/10/24/193781.htmlhttp://www.shnenglu.com/MatoNo1/comments/193781.htmlhttp://www.shnenglu.com/MatoNo1/archive/2012/10/24/193781.html#Feedback0http://www.shnenglu.com/MatoNo1/comments/commentRss/193781.htmlhttp://www.shnenglu.com/MatoNo1/services/trackbacks/193781.html鍘熼鍦板潃
鏈矙鑼跺湪2009騫?鏈堟浘緇忓湪k-i+1}, i<=k<j錛岀浜岄」闇瑕佹弧瓚沖師瀛楃涓瞇i..j]榪欎竴孌墊伆濂界敱[i..k]榪欎竴孌電殑鑻ュ共嬈″鍒跺緱鍒皚
錛堝姞涓妅-i+1鏄洜涓哄浜庝互涓嬩笁縐嶉噸鍙犲瓧絎︿覆錛屼笉鍘嬬緝姣斿帇緙╄鐭細AA鍨嬨丄AA鍨嬨丄BAB鍨嬶級
杈圭晫錛欶[i][i]=1錛?br />
闂鏄湪涓婅堪鏂圭▼鐨勭浜岄」閲屽浣曟眰鍑哄彲琛岀殑k銆傛樉鐒訛紝鍙渶瑕佸[i..j]榪欎竴孌典綔exKMP錛屾眰鍑簄x錛岀劧鍚巏鍙褰撲笖浠呭綋婊¤凍錛氾紙1錛塶x[k+1]=j-k錛涳紙2錛?k-i+1)|(j-i+1)錛?br />
涓嶈繃錛屾湰棰樺湪鍐檈xKMP鐨勮繃紼嬩腑浼氬嚭鐜板緢鍥х殑闂……鐢變簬涓嬫爣涓嶆槸浠?寮濮嬶紝鑰屾槸浠巌寮濮嬶紝鎵浠ュ緢澶氬湴鏂瑰叧浜庝笅鏍囩殑璁$畻閮借鏀規帀錛岄潪甯鎬笉鏂逛究錛岃屼笖寰堝鏄撶柕鎺夈備笌鍏惰繖鏍鳳紝榪樹笉濡傛妸[i..j]榪欎竴孌靛鍒跺埌涓涓柊瀛楃涓查噷錛屼笅鏍囦粠0寮濮嬨傚浜庡叾瀹冪殑鏌愪簺瀛楃涓茬畻娉曞拰鏁版嵁緇撴瀯錛屾垨璁鎬篃鏄繖鏍峰洤……

浠g爜錛?br />
#include <iostream>
#include 
<stdio.h>
#include 
<stdlib.h>
#include 
<string.h>
using namespace std;
#define re(i, n) for (int i=0; i<n; i++)
#define re1(i, n) for (int i=1; i<=n; i++)
#define re2(i, l, r) for (int i=l; i<r; i++)
#define re3(i, l, r) for (int i=l; i<=r; i++)
#define rre(i, n) for (int i=n-1; i>=0; i--)
#define rre1(i, n) for (int i=n; i>0; i--)
#define rre2(i, r, l) for (int i=r-1; i>=l; i--)
#define rre3(i, r, l) for (int i=r; i>=l; i--)
#define ll long long
const int MAXN = 110, INF = ~0U >> 2;
int n, F[MAXN][MAXN], nx[MAXN], res;
char ss[MAXN + 1], ss0[MAXN + 1];
void init()
{
    scanf(
"%s", ss); n = strlen(ss);
}
int sol0(int l, int r)
{
    
int W = r - l + 1; re3(i, l, r) ss0[i - l] = ss[i];
    nx[
0= W; nx[1= nx[0- 1; re(i, W) if (ss0[i] != ss0[i + 1]) {nx[1= i; break;}
    
int k = 1, len, p = k + nx[k] - 1, x, y;
    re2(i, 
2, W) {
        len 
= nx[i - k];
        
if (i + len <= p) nx[i] = len; else {
            x 
= p + 1; y = p - i + 1if (y < 0) {x++; y = 0;}
            
for (; x<=&& ss0[x]==ss0[y]; x++, y++) ;
            nx[i] 
= y; k = i; p = i + y - 1;
        }
    }
    
int res0 = INF, tmp, V;
    re2(i, 
1, W) if (!(W % i) && nx[i] == W - i) {
        V 
= F[l][l + i - 1+ 2; tmp = W / i; while (tmp) {tmp /= 10; V++;}
        
if (W < V) V = W;
        
if (V < res0) res0 = V;
    }
    
return res0;
}
void solve()
{
    re(i, n) F[i][i] 
= 1;
    
int j, tmp;
    re2(x, 
1, n) re(i, n-x) {
        j 
= i + x; F[i][j] = sol0(i, j);
        re2(k, i, j) {tmp 
= F[i][k] + F[k + 1][j]; if (tmp < F[i][j]) F[i][j] = tmp;}
    }
    res 
= F[0][n - 1];
}
void pri()
{
    printf(
"%d\n", res);
}
int main()
{
    init();
    solve();
    pri();
    
return 0;
}


Mato_No1 2012-10-24 15:11 鍙戣〃璇勮
]]>
COCI 2011锝?012 #5 鍚庝袱棰橀瑙?/title><link>http://www.shnenglu.com/MatoNo1/archive/2012/04/18/171899.html</link><dc:creator>Mato_No1</dc:creator><author>Mato_No1</author><pubDate>Wed, 18 Apr 2012 12:26:00 GMT</pubDate><guid>http://www.shnenglu.com/MatoNo1/archive/2012/04/18/171899.html</guid><wfw:comment>http://www.shnenglu.com/MatoNo1/comments/171899.html</wfw:comment><comments>http://www.shnenglu.com/MatoNo1/archive/2012/04/18/171899.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/MatoNo1/comments/commentRss/171899.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/MatoNo1/services/trackbacks/171899.html</trackback:ping><description><![CDATA[<a title="鐩稿叧閾炬帴" href="http://www.shnenglu.com/MatoNo1/archive/2012/03/18/168229.html">鐩稿叧閾炬帴</a><br />浠婂ぉ鍦ㄥ洖欏句互鍓嶇殑棰樼洰鐨勬椂鍊欙紝縐冪劧鍙戠幇COCI 2011锝?012 #5鐨勫悗涓ら騫墮潪紲炵妵棰橈紙鑷沖皯涓鑸漢鍙互鎹夌殑錛?#8230;…鏄垜褰撴椂鎯沖偦鎺変簡鍥?#8230;…<br /><br />blokovi錛?br />棣栧厛寰堝鏄撳彂鐜版渶浼樻柟妗堝繀鐒舵槸浠庨《鍒板簳錛屽厛灝介噺寰鍙寵竟鏀撅紝鏀懼埌鏌愪竴涓漿鎶樼偣澶勫啀灝介噺寰宸﹁竟鏀?#8230;…<br />鐒跺悗灝辨槸鏋氫婦榪欎釜杞姌鐐癸紝涔辯畻涓涓嬪氨琛屼簡錛屾毚鍔汷(N<sup>2</sup>)鐨勫彲浠ヨ繃7涓偣錛堟湰娌欒尪鐜板満璧涙椂灝辨槸鐢ㄨ繖涓殑錛?#8230;…<br />浼樺寲錛氬彲浠ヤ粠涓婂埌涓嬩緷嬈℃灇涓捐漿鎶樼偣錛岃鐩墠鐨勮漿鎶樼偣涓篿錛屽垯鍦ㄤ笅涓嬈℃灇涓炬椂錛?i+1)涓鴻漿鎶樼偣錛夛紝鎶?i+1)寰鍙沖鉤縐?鍗曚綅錛岀劧鍚庢牴鎹偅涓噸蹇冭綆楀叕寮忓彲浠ュ緱鍑猴紝絎?i+2)涓強浠ュ悗鐨勫繀鐒舵槸鏁翠綋鍚戝彸騫崇Щ(2*m2)/(m1+m2)錛屽叾涓璵1涓哄墠i涓殑璐ㄩ噺鍜岋紝m2涓虹(i+1)涓殑璐ㄩ噺……鍦ㄦ鍩虹涓婄淮鎶よ漿鎶樼偣鍓嶉噸蹇冧綅緗佽漿鎶樼偣鐨勯噸蹇冪殑妯潗鏍囷紙鐩稿浜庢渶涓婇潰鐨勯偅涓級浠ュ強鏈涓嬮潰鐨勯偅涓殑閲嶅績鐨勬í鍧愭爣錛堢浉瀵逛簬鏈涓婇潰鐨勯偅涓級灝辮浜嗭紙娉ㄦ剰杞姌鐐規槸絎竴涓垨鏈鍚庝竴涓殑鐗規畩鎯呭喌瑕佸崟鐙鐞嗭級錛屾椂闂村鏉傚害O(N)銆?br /><br />poplocavanje錛?br />鍏跺疄榪欓鍙鐢ˋC鑷姩鏈洪殢渚夸貢鎼炰竴涓嬪氨琛屼簡……Trie涓婄殑姣忎釜緇撶偣緇存姢涓涓狵K錛岃〃紺鴻緇撶偣鎵浠h〃鐨勫瓧絎︿覆鐨勫悗緙鐨勬渶澶у尮閰嶉暱搴︼紙褰撶劧鍓嶆彁鏉′歡鏄緇撶偣鏄嵄闄╃殑錛夛紝鍒欙細錛?錛夎嫢璇ョ粨鐐規湰鏉ュ氨浠h〃涓涓緟鍖歸厤鐨勫瓙涓詫紝鍒橩K鍊間負瀛愪覆闀垮害錛涳紙2錛夎嫢璇ョ粨鐐規槸閫氳繃澶辮觸鎸囬拡涓婃函鍒頒竴涓嵄闄╃粨鐐圭殑錛屽垯璇ョ粨鐐圭殑KK灝辨槸涓婃函鍒扮殑閭d釜鍗遍櫓緇撶偣鐨凨K銆傜劧鍚庡仛涓嬈″尮閰嶏紝璁頒笅鎵鏈夌殑鍖歸厤鍖洪棿錛屽啀姹傚嚭鏈鍖洪棿瑕嗙洊鐨勬婚暱搴︼紙鎺掑簭+鎵弿鍗沖彲錛屼笉闇浠諱綍鏁版嵁緇撴瀯錛夊氨琛屼簡銆?br /><br />娉ㄦ剰鍑犱釜鏄撶柕鐨勫湴鏂癸細<br />錛?錛塗rie鐨勫ぇ灝忚寮鍒?M鎵嶈兘榪囷紙涓嶈繃鍐嶅ぇ灝辮MLE浜嗗洤……錛夛紱<br />錛?錛夊湪寤鴻嚜鍔ㄦ満璁$畻KK鐨勬椂鍊欙紝濡傛灉涓涓粨鐐規湰鏉ュ氨鏄嵄闄╃殑錛堝嵆涓婅堪絎?縐嶇粨鐐癸級錛屾榪囩▼涓張鍙戠幇瀹冩槸涓婅堪絎?縐嶇粨鐐癸紝鍒?strong><span style="color: #ff0000;">涓?/span><span style="color: red;">鑳介噸鏂拌綆桲K</span></strong>錛?br />錛?錛夋渶鍚庢眰鏈鍖洪棿瑕嗙洊鎬婚暱搴︾殑鏂規硶錛氬厛璁頒笅鎵鏈夌殑鍖洪棿錛屾寜鐓у厛宸︾鐐歸掑搴忓悗鍙崇鐐歸掑搴忔帓搴忥紝褰撲腑鍘繪帀琚埆鐨勫尯闂磋鐩栫殑鍖洪棿錛岀劧鍚庡厛鐪嬩竴涓嬫帓搴忓悗鐨勭涓涓尯闂村拰鏈鍚庝竴涓尯闂達紝寰楀嚭絎竴涓尯闂翠箣鍓嶄笌鏈鍚庝竴涓尯闂翠箣鍚庣殑鏈瑕嗙洊鐨勯儴鍒嗭紝涓棿鐨勬壂鎻忔眰瑙f椂錛屽鏋滄煇鍖洪棿鐨勫乏绔偣澶т簬(鍓嶄竴鍖洪棿鐨勫彸绔偣+1)錛屽垯璁″叆涓棿鐨勭┖褰?#8230;…涓嶈繃榪樻湁涓縐嶆柟娉曞氨鏄笉鍘繪帀琚埆鐨勮鐩栫殑鍖洪棿錛岃屾槸鍦ㄦ壂鎻忚繃紼嬩腑緇存姢鍙崇鐐規渶澶у糾axr錛岀劧鍚庢妸涓婇潰鏂規硶涓殑鎵鏈夊彸绔偣鏀逛負maxr鍗沖彲銆?br /><br />浠g爜錛?br /><a title="blokovi" >blokovi</a> <a title="poplocavanje" >poplocavanje</a><img src ="http://www.shnenglu.com/MatoNo1/aggbug/171899.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/MatoNo1/" target="_blank">Mato_No1</a> 2012-04-18 20:26 <a href="http://www.shnenglu.com/MatoNo1/archive/2012/04/18/171899.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>KMP銆丄C鑷姩鏈哄湪瀛楃涓插尮閰嶇被鍔ㄦ佽鍒掗棶棰樹腑鐨勫簲鐢?/title><link>http://www.shnenglu.com/MatoNo1/archive/2011/10/30/159339.html</link><dc:creator>Mato_No1</dc:creator><author>Mato_No1</author><pubDate>Sun, 30 Oct 2011 03:22:00 GMT</pubDate><guid>http://www.shnenglu.com/MatoNo1/archive/2011/10/30/159339.html</guid><wfw:comment>http://www.shnenglu.com/MatoNo1/comments/159339.html</wfw:comment><comments>http://www.shnenglu.com/MatoNo1/archive/2011/10/30/159339.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/MatoNo1/comments/commentRss/159339.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/MatoNo1/services/trackbacks/159339.html</trackback:ping><description><![CDATA[鏈変竴綾誨姩鎬佽鍒掞紙鍏朵腑涔熷寘鍚掓帹錛夐棶棰橈紝瑕佹眰婊¤凍涓浜涢檺鍒舵潯浠剁殑瀛楃涓詫紝榪欎簺闄愬埗鏉′歡鏄?#8220;闇瑕佸惈鏈夋煇涓瓙涓?#8221;鎴?#8220;涓嶈兘鍚湁鏌愪釜瀛愪覆”錛岄偅涔圞MP銆丄C鑷姩鏈虹瓑灝辨湁澶х敤浜嗐?br /><br />銆愪緥1銆?a title="HDU3689" >HDU3689</a><br />棰樻剰錛氬瓧絎﹂泦涓湁涓浜涘瓧絎︼紝緇欏嚭姣忎釜瀛楃鐨勫嚭鐜版鐜囷紙瀹冧滑鐨勫拰淇濊瘉涓?錛夛紝鍐嶇粰鍑轟竴涓瓙涓睟錛屾眰錛氫換緇欎竴涓暱搴︿負N鐨勫瓧絎︿覆A錛堝彧鑳藉寘鍚瓧絎﹂泦涓殑瀛楃錛夛紝浣垮緱S鏄疉鐨勫瓙涓茬殑姒傜巼銆?br /><br />姹傝В榪欑被闂棣栧厛瑕佽繘琛岃ˉ闆嗚漿鍖栥傚洜涓哄瓙涓插彲鑳芥湁閲嶅彔錛堟瘮濡?ababa"涓氨鍑虹幇浜嗕袱涓?aba"錛夛紝鎵浠ュ厛杞寲涓?#8220;姹備換緇欎竴涓暱搴︿負N鐨勫瓧絎︿覆A錛堝彧鑳藉寘鍚瓧絎﹂泦涓殑瀛楃錛夛紝浣垮緱<span style="color: red"><strong>B涓嶆槸A鐨勫瓙涓?/strong></span>鐨勬鐜?#8221;錛岀劧鍚庡啀鐢?鍑忓幓榪欎釜姒傜巼鍗充負緇撴灉銆?br />璁綟[i][j]涓?#8220;鍦ㄦ墍鏈夐暱搴︿負i鐨?span style="color: red"><strong>涓嶅嚭鐜癇</strong></span>鐨勫瓧絎︿覆涓紝鍚庣紑涓嶣鐨勫墠緙鍖歸厤闀垮害涓簀錛堝嵆璇ュ瓧絎︿覆鐨勫悗緙涓嶣鐨勫墠緙鐨?span style="color: red"><strong>鏈澶?/strong></span>鍖歸厤闀垮害涓簀錛夌殑姒傜巼”錛屽緢鏄劇劧錛孎鏄敱閫掓帹寰楀埌浜嗭紝鍏抽敭鏄浣曡繘琛岀姸鎬佽漿縐伙紵鎴栬呰錛屽湪閫掓帹榪囩▼涓紝鍝簺鐘舵佸彲鑳芥垚涓篎[i][j]鐨勫墠瓚嬬姸鎬侊紵<br />鍋囪F[i-1][k]鏄疐[i][j]鐨勫墠瓚嬬姸鎬侊紝涔熷氨鏄錛?span style="color: red"><strong>鍦ㄥ瓧絎﹂泦涓嚦灝戝瓨鍦ㄤ竴涓瓧絎錛屼嬌寰椾富涓茬殑絎琲浣嶏紙鏈鍚庝竴浣嶏級鍙朿鏃訛紝鑳藉浠嶧[i-1][k]杞Щ鍒癋[i][j]</strong></span>銆傝繖灝遍渶瑕佹眰涓涓糞[k][c]錛岃〃紺哄綋涓諱覆鐨勫悗緙涓嶣鐨勫墠緙鐨勶紙鏈澶э級鍖歸厤闀垮害涓簁鏃訛紝鍦ㄤ富涓插悗鍐嶅姞涓婁竴涓瓧絎錛屽叾鍖歸厤闀垮害浼氬彉鎴愪粈涔堛備婦渚嬶細璁劇洰鍓嶄富涓睞'="abasab"錛孊="asabs"錛屽叾鍖歸厤闀垮害涓?錛岃嫢鍦ˋ'鍚庡姞涓婁竴涓瓧絎?s'錛屽垯鍖歸厤闀垮害鍙樹負5錛屾墍浠[4]['s']=5錛岃岃嫢鍦ˋ'鍚庡姞涓婁竴涓瓧絎?a'錛屽垯鍖歸厤闀垮害浼氬彉鎴?錛屾墍浠[4]['a']=1銆傛樉鐒禨鍊煎拰A鍓嶉潰鐨勫摢浜涘瓧絎︽槸娌℃湁鍏崇郴鐨勩?br />閭d箞榪欎釜S鍊煎浣曡綆楋紵鍏跺疄鍙互鍙戠幇錛孲鍜孠MP綆楁硶涓殑nx鏁扮粍紲炰技錛屽洜姝ゅ畬鍏ㄥ彲浠ユ寜鐓ц綆梟x鏁扮粍鐨勫姙娉曟潵璁$畻S銆傚叿浣撴潵璇達紝鍏堣瀵笲浣淜MP鑷韓鍖歸厤錛屾眰鍑哄叾nx鏁扮粍錛岀劧鍚庯紝鍦ㄦ眰S[k][c]鐨勬椂鍊欙紝灝濊瘯鍦˙鐨勭k浣嶏紙鐢變簬B鐨勪笅鏍囦粠0寮濮嬫墍浠[k-1]錛夊悗鍔犱笂瀛楃c錛岀湅鐪嬩細“鍥為”鍒板摢閲屽嵆鍙備唬鐮侊細 <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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">     </span><span style="color: #0000ff">int</span><span style="color: #000000"> j </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">; nx[</span><span style="color: #000000">0</span><span style="color: #000000">] </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br />     re2(i, </span><span style="color: #000000">1</span><span style="color: #000000">, m) {<br />            </span><span style="color: #0000ff">while</span><span style="color: #000000"> (j </span><span style="color: #000000">&&</span><span style="color: #000000"> A[i] </span><span style="color: #000000">!=</span><span style="color: #000000"> A[j]) j </span><span style="color: #000000">=</span><span style="color: #000000"> nx[j </span><span style="color: #000000">-</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">];<br />            </span><span style="color: #0000ff">if</span><span style="color: #000000"> (A[i] </span><span style="color: #000000">==</span><span style="color: #000000"> A[j]) j</span><span style="color: #000000">++</span><span style="color: #000000">;<br />            nx[i] </span><span style="color: #000000">=</span><span style="color: #000000"> j;<br />     }<br />     re(i, m) re(k, SZ) {<br />           j </span><span style="color: #000000">=</span><span style="color: #000000"> i;<br />           </span><span style="color: #0000ff">while</span><span style="color: #000000"> (j </span><span style="color: #000000">&&</span><span style="color: #000000"> A[j] </span><span style="color: #000000">!=</span><span style="color: #000000"> k </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">97</span><span style="color: #000000">) j </span><span style="color: #000000">=</span><span style="color: #000000"> nx[j </span><span style="color: #000000">-</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">];<br />           </span><span style="color: #0000ff">if</span><span style="color: #000000"> (A[j] </span><span style="color: #000000">==</span><span style="color: #000000"> k </span><span style="color: #000000">+</span><span style="color: #000000"> </span><span style="color: #000000">97</span><span style="color: #000000">) S[i][k] </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">++</span><span style="color: #000000">j; </span><span style="color: #0000ff">else</span><span style="color: #000000"> S[i][k] </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">;<br />     }</span></div>榪欓噷m鏄疊鐨勯暱搴︺傛敞鎰忥紝褰搃=m鏃訛紝S[i][j]鏄棤鎰忎箟鐨勶紝鍥犱負鍓嶉潰宸茬粡璇磋繃浜嗕笉鑳藉嚭鐜癇銆?br />鍦ㄦ眰鍑篠鍊煎悗灝辮兘姹傚嚭F鍊間簡銆傚浜庣姸鎬丗[i][j]錛岃嫢瀛樺湪涓涓瓧絎浣垮緱x=S[i][c]錛堟弧瓚?<=x<m錛夛紝鍒橣[i][j]鏄疐[i+1][x]鐨勫墠瓚嬬姸鎬併傚綋鐒訛紝鐢變簬鏈鏄眰姒傜巼鑰屼笉鏄眰鎬繪暟錛屼笖姣忎釜瀛楃鍑虹幇鐨勬鐜囪繕涓嶄竴鏍鳳紝鎵浠ヨ漿縐葷殑鏃跺欙紝搴旀槸灝咶[i+1][x]鍔犱笂F[i][j]*P[c]錛圥[c]鏄瓧絎鍑虹幇鐨勬鐜囷級錛岃竟鐣岋細F[0][0]=1錛孎[0][1..m-1]鍧囦負0銆?br />鏈緇堢粨鏋滀負1-∑F[N][0..m-1]銆?br /><br /><a title="浠g爜" >浠g爜</a><br /><br />銆愪緥2銆?a title="PKU1625" >PKU1625</a>錛?a title="URAL1158" >URAL1158</a>錛?br />棰樻剰錛氱粰鍑轟竴浜涘瓙涓詫紝姹傞暱搴︿負N錛屽悇涓瓧絎﹂兘灞炰簬緇欏畾鐨勫瓧絎﹂泦鐨勬墍鏈夊瓧絎︿覆涓紝涓嶅寘鍚換浣曚竴涓粰鍑虹殑瀛愪覆鐨勫瓧絎︿覆涓暟錛堥渶瑕佷嬌鐢ㄥ帇9浣嶇殑楂樼簿搴︼級銆?br /><br />鏈鏄劇劧鏄愪緥1銆戠殑澶氬瓙涓插艦寮忥紝鑰岀敤鏉ヨВ鍐沖涓瓧絎︿覆鍚屾椂鍖歸厤鐨勫彧鏈堿C鑷姩鏈猴紝閭d箞濡備綍鍦ㄦ湰棰樹腑浣跨敤AC鑷姩鏈烘眰瑙e憿錛?br />瑙傚療銆愪緥1銆戜腑鐨凢[i][j]錛屽彲浠ユ兂璞′竴涓嬶紝涓涓浘涓湁m涓《鐐癸紝鍒嗗埆琛ㄧず鍖歸厤闀垮害涓?..(m-1)錛岀劧鍚庝笉鏂柊鍔犲叆鐨勫瓧絎﹁榪欎簺鐘舵佸湪榪欎簺緇撶偣闂翠笉鏂漿縐伙紙鐘舵佽漿縐誨氨鏄浘涓殑杈癸級錛岃繖鏍鳳紝F[i][<span>j]灝辮〃紺?#8220;闃舵i鍒拌揪緇撶偣j涓?#8221;銆傝孉C鑷姩</span><span>鏈烘槸鍩轟簬Trie錛堟爲錛夌殑錛?/span><span>鍏朵腑鏈夌幇鎴?/span><span>鐨勭粨</span><span>鐐癸紝榪欏氨鎻ず浜嗘湰棰樼殑鐘?/span><span>鎬?/span><span><strong>錛?/strong></span><br /><span>F[i][j]</span><span>琛?/span><span>紺?/span><strong><span style="color: #ff0000">闀垮害涓篿鐨勫悎娉曠殑瀛楃涓詫紙灝辨槸婊¤凍瀛楃闆嗛檺鍒朵笖涓嶅寘鍚換浣曚竴涓粰瀹氬瓙涓詫級涓紝鍦ㄥ尮閰嶅埌鏈鍚庝竴浣嶏紙</span></strong><strong style="color: #ff0000">絎琲浣嶏級鍚庯紝鍒氬ソ鍒拌揪緇撶偣j鐨勫瓧絎︿覆鐨?/strong><strong style="color: #ff0000">涓暟</strong>銆?br />鍚屾牱錛孲[k][c]琛ㄧず“鐩墠鍒拌揪緇撶偣k錛屾帴涓嬫潵鐨勪竴涓瓧絎︽槸c鐨勬椂鍊欙紝浼氬埌杈懼摢涓粨鐐廣傚湪瀵規墍鏈夌殑瀛愪覆寤虹珛浜嗚嚜鍔ㄦ満涔嬪悗錛孲鍊煎彧瑕佺被浼煎湴鎼炲氨鑳芥眰鍑烘潵浜嗐傜劧鍚嶧鐨勮漿縐諱篃灝辨悶瀹氫簡銆?br />涓嶈繃錛屾湰棰樿涓囧垎娉ㄦ剰AC鑷姩鏈虹殑涓涓狟UG錛氬湪寤虹珛浜嗚嚜鍔ㄦ満浠ュ悗錛岄渶瑕佹妸鎵鏈夋湰韜笉鍗遍櫓錛堝鏋滀竴涓粨鐐逛唬琛ㄧ殑瀛楃涓插垰濂芥槸鏌愪竴涓粰鍑虹殑涓嶈兘鍑虹幇鐨勫瓙涓詫紝鍒欒緇撶偣鏄嵄闄╃粨鐐癸級錛屼絾閫氳繃澶辮觸鎸囬拡涓嶆柇涓婃函鑳藉鍒拌揪涓涓嵄闄╃粨鐐圭殑緇撶偣錛屼篃鏍囪涓哄嵄闄╃粨鐐癸紝姣斿涓や釜瀛愪覆鏄?abcde"鍜?bc"錛屽垯浠h〃"abcd"鐨勯偅涓粨鐐圭敱浜庡寘鍚簡"bc"鎵浠ヤ篃鏄嵄闄╃殑銆?br />姝ゅ錛屾湰棰樼殑杈撳叆瑕佹敞鎰忥紝瀛楃闆嗙殑ASCII鐮佽寖鍥存槸-128~127錛屾墍浠ュ繀欏葷敤char鑰屼笉鏄痷nsigned char錛屼笖鐢變簬鍙兘鍖呭惈絀烘牸鎵浠ュ繀欏葷敤gets()鑰屼笉鏄痵canf()杈撳叆錛屽張鍥犱負C/C++涓湪鏈夎礋鏁頒笅鏍囷紝鍥犳鍦ㄨ緭鍏ヤ箣鍚庤繕瑕佽漿鍖栦竴涓嬶紙鍔?28錛夈?br /><br /><a title="浠g爜" >浠g爜</a><br /><br />銆愪緥3銆?a title="PKU3691" >PKU3691</a><br />棰樻剰錛氱粰鍑轟竴浜涘瓙涓插拰涓涓瓧絎︿覆A錛堝叾姣忎釜瀛楃鍧囧睘浜庡瓧絎﹂泦{'A', 'C', 'G', 'T'}錛夛紝姹傝嚦灝戣鏀瑰姩A鐨勫嚑涓瓧絎︼紙涓嶈兘鏀規垚涓嶅睘浜庡瓧絎﹂泦鐨勫瓧絎︼級錛屼嬌寰楀畠涓嶅寘鍚換浣曚竴涓粰鍑虹殑瀛愪覆錛岃嫢涓嶇鎬庝箞鏀歸兘涓嶈錛屽垯緇撴灉涓?1銆?br /><br />榪欏氨鏄湡姝g殑DP浜嗐傝F[i][j]涓哄墠i浣嶏紝鍒拌揪鐨勭粨鐐逛負j錛屾渶灝戞敼鍔ㄧ殑瀛楃涓暟錛屽垯杞Щ鏂圭▼涓?br />F[i][j] = min{F[i-1][x] + (A[i] != c)}錛宑∈{'A', 'C', 'G', 'T'}錛孲[x][c]=j銆傝竟鐣岋細F[0][root]=0錛屽叾浣欑殑F[0][]=+∞錛孉鐨勫疄闄呬笅鏍囦粠1寮濮嬨?br />姹係鏁扮粍鐨勬柟娉曡銆愪緥2銆?br /><br /><a title="浠g爜" >浠g爜</a><br /><br />銆愪緥4銆?a title="PKU3208" >PKU3208</a><br />棰樻剰錛氬惈鏈夎繛緇殑涓変釜鏁板瓧6鐨勬鏁存暟錛岀О涓?beastly number"錛屾眰絎琍涓紙1<=P<=50000000錛?beastly number"錛堝叾浣嶆暟涓嶄細瓚呰繃15浣嶏級銆?br />錛堣繖棰樻槸鏈矙鑼跺湪PKU涓婅嚦浠婁負姝紝鑷繁鎯沖嚭綆楁硶鐨凙C浜烘暟鏈灝戠殑棰橈級<br />鏈鍏跺疄鏄敤涓嶇潃KMP鐨勶紝鍥犱負"666"榪欐牱綆鍗曠殑瀛愪覆……<br /><br />鎬濊礬錛氱敱浜庝綅鏁頒笉浼氳秴榪?5浣嶏紙鍚庢潵鍙戠幇鏈澶氬彧鏈?0浣嶏級錛屾墍浠ユ瘡涓?beastly number"閮藉彲浠ョ湅鎴愪竴涓暱搴︿負15錛屽瓧絎﹂泦涓篬'0'..'9']鐨勫瓧絎︿覆錛堟敞鎰忔槸鍙互鏈夊墠瀵?鐨勶紝鍥犱負浣嶆暟鍙兘涓嶈凍15浣嶏級A錛屾暣涓繃紼嬩篃灝辨槸浠庨珮浣嶏紙絎?浣嶏級鍚戜綆浣嶏紙絎?4浣嶏級姹傚嚭A鐨勫悇浣嶃?br /><br />棰勫鐞嗭細姹傚嚭F[i][j]錛岃〃紺鴻嫢A鐨勫墠i浣嶅凡緇忕‘瀹氾紙鍏朵腑涓嶅惈"666"錛屽噯紜潵璇存槸闈炴湯灝句笉鍚?666"錛夛紝涓斿墠i浣嶇殑鏈熬鍒氬ソ鏈塲涓?6'錛坖鐨勮寖鍥存槸0鍒?錛夋椂錛屾湁澶氬皯涓?beastly number"錛堟敞鎰忥紝鍓峣浣嶆棦鐒跺凡緇忕‘瀹氾紝灝變笉鍙洿鏀逛簡錛岃兘澶熷喅瀹氱殑鍙湁絎琲浣嶇殑鍚庨潰錛夈?br />鏄劇劧鍏堣姹傚嚭F0[i][j]琛ㄧず鏈夊灝戜釜涓嶆槸"beastly number"銆傚叾閫掓帹鏂圭▼涓嶅ソ鍐欙紝瑙佷唬鐮侊紙鍏跺疄涔熸槸寰堝ソ鐞嗚В鐨勶級銆傜劧鍚嶧[i][j]=10<sup>14-i</sup> - F0[i][j]銆?br /><br />鐒跺悗灝辨槸涓嶆柇璋冩暣杈圭晫鏉ユ瀯閫犱簡銆傚噯紜潵璇達紝璁懼墠i-1浣嶅凡緇忕‘瀹氾紝鐜板湪瑕佺‘瀹氱i浣嶏紝鍒欐灇涓劇i浣嶆槸0~9涓殑鍝釜鍊鹼紝鐒跺悗姹傚嚭婊¤凍鏉′歡鐨勬渶灝忕殑"beastly number"鍜屾渶澶х殑"beastly number"鐨勫悕嬈★紙娉ㄦ剰錛屽悕嬈℃槸浠?寮濮嬬殑錛夛紝鐪嬬湅P鍦ㄤ笉鍦ㄥ叾涓紝榪欐牱灝辮兘紜畾浜嗐備弗閲嶆敞鎰忥細濡傛灉宸茬‘瀹氱殑浣嶆暟涓凡緇忓嚭鐜頒簡"666"錛屾帴涓嬫潵鐨勫氨涓嶇敤鏋氫婦浜嗭紝鐩存帴鍦ㄥ悗闈㈡帴涓奝-L灝辮浜嗭紝L涓哄乏杈圭晫銆?br /><br />浣嗘槸錛屼負浠涔堣鎶婃湰棰樻斁鍦↘MP鐨勪笓棰橀噷闈㈠憿鍥э紵<span>鍥犱負濡傛灉榪欎釜瀛愪覆涓嶆槸"666"鑰屾槸涓浜涚粨鏋勫</span><span>鏉傜殑涓滀笢姣斿"123131"榪欐牱鐨勶紝鍙湁鍊熷姪K</span><span>MP綆楁硶浜嗐傝繖鏃訛紝F[i][j]灝辮〃紺?A鐨勫墠i浣嶅凡緇忕‘瀹氾紙闈炴湯灝句笉鍚繖涓瓙涓詫級錛屼笖鍏跺悗緙涓庤繖涓瓙涓茬殑鍓嶇紑鍖?/span><span>閰嶉暱搴︿負</span><span>j錛?/span>鏈夊灝戜釜"beastly number" 錛岃漿縐繪柟紼嬩笌鍓嶅嚑涓緥瀛愮被浼箋?br /><br /><a title="浠g爜" >浠g爜</a><br /><br />鎬葷粨錛?br />KMP綆楁硶鍜孉C鑷姩鏈虹殑鐘舵佽漿縐繪ц川鍐沖畾浜嗗畠浠湪瀛楃涓插尮閰嶇被DP闂涓殑宸ㄥぇ浣滅敤銆傚湪瀹為檯搴旂敤涓紝瑕佹敞鎰忕伒媧諱嬌鐢ㄥ畠浠傛澶栵紝AC鑷姩鏈虹殑閭d釜BUG鏄竴瀹氳娉ㄦ剰鐨勩?<img src ="http://www.shnenglu.com/MatoNo1/aggbug/159339.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/MatoNo1/" target="_blank">Mato_No1</a> 2011-10-30 11:22 <a href="http://www.shnenglu.com/MatoNo1/archive/2011/10/30/159339.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍚庣紑鏁扮粍http://www.shnenglu.com/MatoNo1/archive/2011/10/23/158926.htmlMato_No1Mato_No1Sun, 23 Oct 2011 08:51:00 GMThttp://www.shnenglu.com/MatoNo1/archive/2011/10/23/158926.htmlhttp://www.shnenglu.com/MatoNo1/comments/158926.htmlhttp://www.shnenglu.com/MatoNo1/archive/2011/10/23/158926.html#Feedback2http://www.shnenglu.com/MatoNo1/comments/commentRss/158926.htmlhttp://www.shnenglu.com/MatoNo1/services/trackbacks/158926.html
銆?銆戜竴浜涘畾涔夛細
瀛楃涓詫細騫夸箟鐨勫瓧絎︿覆鏄寚“鍏冪礌綾誨瀷鏈夊簭錛屼笖鍏冪礌鍊兼湁涓瀹氳寖鍥寸殑搴忓垪”錛屽叾鍏冪礌涓嶄竴瀹氶潪瑕佹槸瀛楃錛屽彲浠ユ槸鏁板瓧絳夛紝鍥犳鏁存暟銆佷簩榪涘埗鏁扮瓑涔熸槸瀛楃涓詫紱
瀛楃闆嗭細瀛楃涓茬殑鍏冪礌鍊肩殑鑼冨洿縐頒負瀛楃闆嗭紝鍏跺ぇ灝忚涓篠Z銆?br />瀛楃涓茬殑闀垮害錛氬瓧絎︿覆涓厓绱犵殑涓暟錛屼竴鑸涓篘錛岄暱搴︿負N鐨勫瓧絎︿覆A絎竴嬈℃彁鍒版椂涓鑸敤A[0..N-1]鏉ヨ〃紺猴紱
鍓嶇紑錛氬瓧絎︿覆A[0..N-1]鐨勪粠A[0]寮濮嬬殑鑻ュ共涓繛緇殑瀛楃緇勬垚鐨勫瓧絎︿覆縐頒負A鐨勫墠緙錛屼互涓?#8220;鍓嶇紑i”鎴栬?#8220;緙栧彿涓篿鐨勫墠緙”鎸囩殑閮芥槸A[0..i]錛?br />鍚庣紑錛氬瓧絎︿覆A[0..N-1]鐨勫埌A[N-1]緇堟鐨勮嫢騫蹭釜榪炵畫鐨勫瓧絎︾粍鎴愮殑瀛楃涓茬О涓篈鐨勫悗緙錛屼互涓?#8220;鍚庣紑i”鎴栬?#8220;緙栧彿涓篿鐨勫悗緙”鎸囩殑閮芥槸A[i..N-1];

瀵逛簬涓涓暱搴︿負N鐨勫瓧絎︿覆錛屽皢鍏禢涓悗緙鎸夊瓧鍏稿簭澶у皬榪涜鎺掑簭錛屽緱鍒頒袱涓暟緇剆a[i]鍜宺ank[i]錛宻a[i]涓烘帓鍦ㄧi浣嶇殑鍚庣紑鐨勭紪鍙鳳紙涔熷氨鏄竴鑸鐨刼rd[i]錛夛紝rank[i]涓烘帓鍦ㄥ悗緙i鎺掑湪鐨勪綅緗紙縐頒負鍚庣紑i鐨勫悕嬈★級銆俿a銆乺ank鍊肩殑鑼冨洿鍧囦負[0..N-1]銆俿a鍜宺ank浜掗嗭紝鍗硈a[i]=j絳変環浜巖ank[j]=i錛屾垨鑰呰鎴恠a[rank[i]]=rank[sa[i]]=i銆傝繖閲岋紝sa縐頒負鍚庣紑鏁扮粍錛宺ank縐頒負鍚嶆鏁扮粍銆?br />
銆?銆戠敤鍊嶅綆楁硶姹傚悗緙鏁扮粍錛?br />鍦ㄨ鏂囬噷錛屽悗緙鏁扮粍鏈変袱縐嶆眰娉曪細鍊嶅綆楁硶鍜孌C3綆楁硶錛屽墠鑰呯殑鏃墮棿澶嶆潅搴︿負O(NlogN)錛屼絾甯告暟杈冨皬錛屽悗鑰呯殑鏃墮棿澶嶆潅搴︿負O(N)錛屼絾甯告暟杈冨ぇ錛屽湪瀹為檯搴旂敤涓紝涓よ呯殑鎬繪椂闂寸浉宸笉澶э紝涓斿悗鑰呮瘮鍓嶈呴毦鐞嗚В寰楀錛堟湰娌欒尪鐞嗚В鍓嶈呴兘鐢ㄤ簡鍑犲ぉ鏃墮棿……鍚庤呭氨鏈ㄦ暍鐪嬩簡錛夈傝繖閲屽氨鎬葷粨涓涓嬪嶅綆楁硶鍚у洤……
棣栧厛錛岃創涓涓嬫湰娌欒尪鐨勭敤鍊嶅綆楁硶姹傚悗緙鏁扮粍鐨勬ā鏉匡細
void suffix_array()
{
    
int p, v0, v1, v00, v01;
    re(i, SZ) S[i] 
= 0;
    re(i, n) rank[i] 
= A[i];
    re(i, n) S[A[i]]
++;
    re2(i, 
1, SZ) S[i] += S[i - 1];
    rre(i, n) sa[
--S[A[i]]] = i;
    
for (int j=1; j<n; j<<=1) {
        p 
= 0; re2(i, n-j, n) tmp[p++= i;
        re(i, n) 
if (sa[i] >= j) tmp[p++= sa[i] - j;
        re(i, SZ) S[i] 
= 0;
        re(i, n) S[rank[i]]
++;
        re2(i, 
1, SZ) S[i] += S[i - 1];
        rre(i, n) sa[
--S[rank[tmp[i]]]] = tmp[i];
        tmp[sa[
0]] = p = 0;
        re2(i, 
1, n) {
            v0 
= sa[i - 1]; v1 = sa[i];
            
if (v0 + j < n) v00 = rank[v0 + j]; else v00 = -1;
            
if (v1 + j < n) v01 = rank[v1 + j]; else v01 = -1;
            
if (rank[v0] == rank[v1] && v00 == v01) tmp[sa[i]] = p; else tmp[sa[i]] = ++p;
        }
        re(i, n) rank[i] 
= tmp[i];
        SZ 
= ++p;
    }
}
榪欓噷A鏄緟姹俿a鍜宺ank鐨勫瓧絎︿覆銆?br />
<1>鍊嶅綆楁硶鐨勬濇兂錛?br />璁癛[i][j]涓篈[i..i+2j-1]錛堝鏋滆秺鐣岋紝鍒欏悗闈㈢敤@濉厖錛夊湪A鐨勬墍鏈夐暱搴︿負2j鐨勫瓙涓詫紙瓚婄晫鍒欏悗闈㈢敤@濉厖錛変腑鐨勫悕嬈★紙rank錛夊箋傚嶅綆楁硶灝辨槸鎸夐樁孌墊眰鍑烘墍鏈塕[i][j]鐨勫鹼紝鐩村埌2j>N涓烘銆傞鍏堬紝R[i][0]鐨勫氨鏄瓧絎[i]鍦ˋ[0..N-1]涓殑鍚嶆錛屾槸鍙互鐩存帴鐢ㄨ鏁版帓搴忔潵瀹炵幇鐨勩傜劧鍚庯紝鑻[0..N-1][j-1]宸茬煡錛屽垯鍙互鎸夌収浠ヤ笅鏂規硶姹傚嚭R[0..N-1][j]鐨勫鹼細瀵規瘡涓猧錛?<=i<N錛夛紝鏋勯犱竴涓簩鍏冪粍<Xi, Yi>錛屽叾涓璛i=R[i][j-1]錛孻i=R[i+2j][j-1]錛堣嫢i+2j>=N錛屽垯Yi=-∞錛夛紝鐒跺悗瀵硅繖N涓簩鍏冪粍鎸夌収絎竴鍏抽敭瀛椾負X錛岀浜屽叧閿瓧涓篩錛堣嫢涓よ呴兘鐩哥瓑鍒欏垽瀹氫負鐩哥瓑錛夎繘琛屾帓搴忥紙鍙互鐢ㄥ熀鏁版帓搴忔潵瀹炵幇錛夛紝鎺掑簭鍚庯紝<Xi, Yi>鐨勫悕嬈″氨鏄殑R[i][j]鐨勫箋?br />
<2>涓寮濮嬶紝瀵笰涓殑鍚勪釜瀛楃榪涜璁℃暟鎺掑簭錛?
re(i, SZ) S[i] = 0;
re(i, n) rank[i] 
= A[i];
re(i, n) S[A[i]]
++;
re2(i, 
1, SZ) S[i] += S[i - 1];
rre(i, n) sa[
--S[A[i]]] = i;
榪欎釜鏈ㄦ湁紲為┈濂借鐨勶紝鍦ㄦ悶鎳備簡鍩烘暟鎺掑簭涔嬪悗鍙互縐掓帀銆傚敮涓涓嶅悓鐨勬槸榪欓噷鍔犱簡涓鍙ワ細rank[i]=A[i]錛岃繖閲岀殑rank[i]鏄垵濮嬬殑i鐨勫悕嬈★紝MS涓嶇鍚坮ank[i]鐨勫畾涔夊拰sa涓巖ank闂寸殑浜掗嗘с傝繖閲屽氨瑕佽В閲婁竴涓嬩簡鍥с傚洜涓哄湪姹俿a鐨勮繃紼嬩腑錛宺ank鍊煎彲鑳戒笉絎﹀悎瀹氫箟錛屽洜涓洪暱搴︿負2j鐨勫瓙涓插彲鑳戒細鏈夌浉絳夌殑錛屾鏃跺畠浠殑rank鍊間篃瑕佺浉絳夛紝鑰宻a鍊肩敱浜庢湁涓嬫爣鐨勯檺鍒舵墍浠ヤ笉鍙兘鏈夌浉絳夌殑銆傚洜姝わ紝鍦ㄨ繃紼嬩腑錛宺ank鍏跺疄鏄敤鏉ヤ唬鏇緼鐨勫瓙涓茬殑錛岃繖鏍穜ank鍊煎彧闇瑕佽〃紺轟竴涓?#8220;鐩稿欏哄簭”灝辮浜嗭紝涔熷氨鏄細rank[i0]>(=, <)rank[i1]錛屽綋涓斾粎褰揂[i0..i0+2j-1]>(=, <)A[i1..i1+2j-1]銆傝繖鏍鳳紝鍙互鐩存帴灝咥[i]鍊間綔涓哄垵濮嬬殑rank[i]鍊箋?br />
<3>j錛堜唬鏇?j錛夌殑鍊間粠1寮濮嬩笉鏂嶅錛屽浜屽厓緇勮繘琛屽熀鏁版帓搴忔眰鍑烘柊闃舵鐨剆a鍊鹼細
for (int j=1; j<n; j<<=1) {
    p 
= 0; re2(i, n-j, n) tmp[p++= i;
    re(i, n) 
if (sa[i] >= j) tmp[p++= sa[i] - j;
    re(i, SZ) S[i] 
= 0;
    re(i, n) S[rank[i]]
++;
    re2(i, 
1, SZ) S[i] += S[i - 1];
    rre(i, n) sa[
--S[rank[tmp[i]]]] = tmp[i];
娉ㄦ剰榪欎釜鍩烘暟鎺掑簭鐨勮繃紼嬫槸寰堢壒鍒殑銆傞鍏堬紝瀹冨茍涓嶆槸瀵笰鍦ㄨ繘琛屾帓搴忥紝鑰屾槸瀵逛笂涓闃舵姹傚嚭鐨剅ank鍦ㄨ繘琛屾帓搴忋傚洜涓哄墠闈㈠凡緇忚榪囷紝鍦ㄦ眰sa鐨勮繃紼嬩腑錛宺ank灝辨槸鐢ㄦ潵浠f浛A鐨勫搴旈暱搴︾殑瀛愪覆鐨勶紝鐢變簬涓嶈兘鐩存帴瀵瑰瓙涓茶繘琛屾帓搴忥紙閭f牱鐨勮瘽鏃墮棿寮閿寰堟亹鎬栫殑錛夛紝鎵浠ュ彧鑳藉rank榪涜鎺掑簭銆傚彟澶栵紝榪欓噷鍦ㄥ浜屽厓緇?lt;x, y>鐨勭浜屽叧閿瓧錛坹錛夎繘琛屾帓搴忕殑榪囩▼涓姞浜嗕紭鍖栵細榪欎簺y鍏跺疄灝辨槸鎶婁笂涓闃舵鐨剆a鏁翠綋宸︾Щ浜唈錛屽彸杈圭┖鍑虹殑閮ㄥ垎鍏ㄩ儴鐢ˊ錛堢┖涓詫級濉厖寰楀埌鐨勶紝鐢變簬絀轟覆鐨勫瓧鍏稿簭鑲畾鏈灝忥紝鍥犳灝嗗彸杈圭殑絀轟覆鎸夌収涓嬫爣欏哄簭鍏堝啓鍏ヤ復鏃秙a錛堜唬鐮佷腑鐢╰mp琛ㄧず鐨勫氨鏄復鏃秙a錛屼篃灝辨槸瀵圭浜屽叧閿瓧y鎺掑簭鍚庣殑ord緇撴灉錛夛紝鐒跺悗錛屼笂涓闃舵鐨剆a濡傛灉宸︾Щ鍚庤繕鏈ㄦ湁娑堝け鐨勶紙涔熷氨鏄痵a鍊煎ぇ浜庣瓑浜巎鐨勶級錛屽啀鎸夐『搴忓啓鍏ヤ復鏃秙a錛屽氨寰楀埌浜嗘帓搴忕粨鏋溿傚墿涓嬬殑瀵箈鐨勬帓搴忕粨鏋滃氨鏄笂涓闃舵鐨剆a錛屽敮涓涓嶅悓鐨勬槸瀵逛簬x鐩稿悓鐨勶紝鎸夌収涓存椂鍚嶆閫掑鐨勯『搴忋?br />
<4>姹傚嚭鏂伴樁孌電殑rank鍊鹼細
tmp[sa[0]] = p = 0;
re2(i, 
1, n) {
    v0 
= sa[i - 1]; v1 = sa[i];
    
if (v0 + j < n) v00 = rank[v0 + j]; else v00 = -1;
    
if (v1 + j < n) v01 = rank[v1 + j]; else v01 = -1;
    
if (rank[v0] == rank[v1] && v00 == v01) tmp[sa[i]] = p; else tmp[sa[i]] = ++p;
}
re(i, n) rank[i] 
= tmp[i];
SZ 
= ++p;
鐢變簬涓嬩竴闃舵闇瑕佷嬌鐢ㄦ湰闃舵鐨剅ank鍊鹼紝鍥犳鍦ㄦ眰鍑轟簡鏈樁孌電殑sa鍊間互鍚庯紝闇瑕佹眰rank鍊箋傦紙浠g爜涓殑tmp璧蜂簡涓存椂rank鐨勪綔鐢紝鐩殑鏄妭鐪佺┖闂達級
鍥犱負sa鍊煎凡緇忔眰鍑猴紝鍥犳鍙渚濇鎵弿sa灝卞彲浠ュ緱鍒皉ank鍊鹼紝鍞竴瑕佸仛鐨勫伐浣滃氨鏄壘鍒板摢浜涘瓙涓叉槸鐩哥瓑鐨勶紝瀹冧滑鐨剅ank鍊煎簲璇ョ浉絳夛紝闄ゆ涔嬪錛宺ank鍊煎彧瑕佷緷嬈″姞1鍗沖彲銆傚垽瀹氱浉絳夌殑鏂規硶錛氬彧闇鍒ゅ畾rank[i]鍜宺ank[i+j]鏄惁閮藉搴旂浉絳夊嵆鍙傝嫢rank[i+j]瓚婄晫錛岀敤-∞錛堝綋鐒朵換浣曚竴涓礋鏁伴兘琛岋紝浠g爜涓敤浜?1錛夋潵琛ㄧず銆?br />鏈鍚庤繕鏈変竴涓紭鍖栵細鐢變簬鏈樁孌電殑鍚嶆鐨勮寖鍥村彧鏈塠0..p]榪欎箞澶氾紝涓嬩竴闃舵鐨?#8220;瀛楃闆?#8221;錛堝叾瀹炲氨鏄痳ank闆嗭級鐨勫ぇ灝廠Z鍙互璁句負p+1錛岃繖鏍峰彲浠ョ渷涓浜涙椂闂淬?br />
榪欐牱鍚庣紑鏁扮粍sa鍜屽悕嬈℃暟緇剅ank灝卞叏閮ㄦ眰瀹屼簡銆?br />
浠ュ悗榪樻湁涓浜涙洿閲嶈鐨勪笢涓滃氨鏄疉C鑷姩鏈恒佸悗緙鏁扮粍絳夌殑搴旂敤闂錛岀畻浜嗭紝浠ュ悗鍐嶆悶鍚у洤銆?br />

Mato_No1 2011-10-23 16:51 鍙戣〃璇勮
]]>
AC鑷姩鏈烘ā鏉塊鈥斺擧DU2222http://www.shnenglu.com/MatoNo1/archive/2011/10/19/158635.htmlMato_No1Mato_No1Wed, 19 Oct 2011 11:47:00 GMThttp://www.shnenglu.com/MatoNo1/archive/2011/10/19/158635.htmlhttp://www.shnenglu.com/MatoNo1/comments/158635.htmlhttp://www.shnenglu.com/MatoNo1/archive/2011/10/19/158635.html#Feedback0http://www.shnenglu.com/MatoNo1/comments/commentRss/158635.htmlhttp://www.shnenglu.com/MatoNo1/services/trackbacks/158635.htmlHDU2222錛屽叾瀹炲氨鏄竴涓8鐨勫涓插尮閰嶇殑闂錛堢粰鍑轟竴涓富涓插拰N涓瓙涓詫紝姹傚嚭鍑犱釜瀛愪覆鍦ㄤ富涓蹭腑鍑虹幇榪囷級銆?br />
鎴戠湡鏄お娌欒尪浜?#8230;…榪欎箞姘寸殑棰樼洰璋冧簡N涔咃紝鎵句簡N浣嶇鐘囧府鎴戠湅浠g爜錛屾渶緇堟墠鎵懼嚭鏉UG……

鏄撶柕鐐癸細
錛?錛夋湰棰樼殑瀛愪覆鏄彲浠ョ浉鍚岀殑錛屾鏃禩rie鐨勬瘡涓粨鐐硅璁句竴涓猰ul鍊鹼紝琛ㄧず璇ョ粨鐐瑰搴旂殑瀛楃涓插湪鎵鏈夊瓙涓蹭腑閲嶅鐨勬鏁幫紝鍙﹀錛?span style="color: red">涓嶈涓轟簡鐪佺┖闂存妸mul瀹氫箟鎴恈har鍨嬶紝鏈夊彲鑳芥墍鏈夌殑瀛楃涓插叏鐩稿悓錛屽洜姝ら渶瑕佸畾涔夋垚int錛堜簨瀹炶瘉鏄庝笉浼氱垎絀洪棿錛夛紝榪欐槸鏈矙鑼惰鎶樼(浜嗚繖涔堜箙鐨勪富瑕佸師鍥?/strong>錛?br />錛?錛塗rie閲囩敤闈欐佸瓨鍌紝0鍙風粨鐐逛綔涓虹┖緇撶偣錛圢ULL錛夛紝鍥犳鐪熸鐨勭粨鐐圭紪鍙蜂粠1寮濮嬶紝鍙﹀root涓鑸兘鏄?鍙風粨鐐癸紱
錛?錛夋敞鎰忓湪寤虹珛鑷姩鏈轟互鍙婂尮閰嶇殑鏃跺欙紝鎵鏈夎娌縡ail涓婃函鐨勫湴鏂癸紝鍏惰竟鐣岄兘鏄?錛圢ULL錛屾敞鎰忎笉鏄痳oot錛夋垨鑰呮壘鍒頒竴涓湁瀵瑰簲瀛愮粨鐐圭殑緇撶偣銆傛敞鎰忓埌0榪樻病鏈夋壘鍒扮殑澶勭悊鏂規硶錛氬湪寤虹珛鑷姩鏈虹殑鏃跺欙紝灝員[j]緗負root錛涘湪鍖歸厤鐨勬椂鍊欙紝灝唜緗負root錛?br />
浠g爜錛堟ā鏉匡級錛堥偅浜涙爣浜咥ttention鐨勫湴鏂歸兘鏄槗鐤電殑錛夛細
#include <iostream>
#include 
<stdio.h>
#include 
<string>
using namespace std;
using std::string;
#define re(i, n) for (int i=0; i<n; i++)
#define root 1
const int MAXN = 500001, MAXLEN = 1000001, SZ = 26, INF = ~0U >> 2;
struct node {
    
int mul, ch[SZ], fail;    //Attention
} T[MAXN];
int N, Q[MAXN], res;
string s0, A;
char tmp[MAXLEN], tmp0[51];
void ins()
{
    
int len = s0.length(), x = root, c;
    re(i, len) {
        c 
= s0[i] - 97;
        
if (!T[x].ch[c]) {T[x].ch[c] = ++N; T[N].mul = 0; re(j, SZ) T[N].ch[j] = 0;}
        x 
= T[x].ch[c];
    }
    T[x].mul
++;
}
void mkf()
{
    Q[
0= root; T[root].fail = 0;
    
int i, j, x;
    
for (int front=0, rear=0; front<=rear; front++) {
        i 
= Q[front];
        re(k, SZ) 
if (j = T[i].ch[k]) {
            x 
= T[i].fail;
            
while (x && !T[x].ch[k]) x = T[x].fail;        //Attention
            if (x) T[j].fail = T[x].ch[k]; else T[j].fail = root;    //Attention
            Q[++rear] = j;
        }
    }
}
void solve()
{
    
int len = A.length(), x = root, y, c; res = 0;
    re(i, len) {
        c 
= A[i] - 97;
        
while (x && !T[x].ch[c]) x = T[x].fail;    //Attention
        if (!x) x = root; else x = T[x].ch[c];    //Attention
        y = x;
        
while (y) {res += T[y].mul; T[y].mul = 0; y = T[y].fail;}      //Attention
    }
}
int main()
{
    
int tests, n;
    scanf(
"%d"&tests);
    re(testno, tests) {
        N 
= 1; T[root].mul = 0; re(i, SZ) T[root].ch[i] = 0;
        scanf(
"%d"&n); getchar();
        re(i, n) {
            gets(tmp0);
            s0 
= tmp0;
            ins();
        }
        gets(tmp);
        A 
= tmp;
        mkf();
        solve();
        printf(
"%d\n", res);
    }
    
return 0;
}

銆?011騫?0鏈?9鏃ャ戜粖澶╁彂鐜頒簡鍖歸厤榪囩▼涓殑涓涓彲浼樺寲鐨勫湴鏂癸細瀵逛簬涓涓偣x浠ュ強瀹冪殑鎵鏈夎繑鍥炵粨鐐癸紙榪欓噷鎶婃墍鏈夋部鐫x鐨勫け璐ユ寚閽堜笉鏂笂婧洿鍒皉oot璺緞涓婄殑緇撶偣閮界О涓鴻繑鍥炵粨鐐癸級錛岀敱浜庝笉鍙噸澶嶈鏁幫紝鍙互灝嗗畠浠殑mul鍊肩疆涓哄師鏉ul鍊肩殑鐩稿弽鏁幫紙-mul錛夛紝鑰屼笉鏄?錛岃〃紺鴻緇撶偣宸茬粡緇熻榪囥傝繖鏍峰湪涓嬩竴嬈鐨勪笂婧繃紼嬩腑涓鏃﹀彂鐜頒竴涓猰ul鍊間負璐熺殑鐐瑰氨涓嶇敤緇х畫涓婃函浜嗭紝鍥犱負涓婇潰鐨勭偣涓瀹氫篃宸茬粡緇熻榪囦簡銆?br />褰撶劧錛岃繖浠呴檺浜庡崟涓諱覆錛屽鏋滄槸澶氫富涓插垯闇瑕佸湪姣忔鍖歸厤涔嬪墠鎶奣rie鏍戜腑鎵鏈夌粨鐐圭殑mul鍊鹼紙濡傛灉鏄礋鏁扮殑鐨勮瘽錛夊叏閮ㄩ噸鏂板彇鍙嶃備負浜嗚妭鐪佹椂闂達紝鍙互鍦ㄥ尮閰嶈繃紼嬩腑鎶婃墍鏈夌粺璁¤繃鐨勶紙mul鍊兼敼涓鴻礋鏁扮殑錛夌粨鐐瑰叏閮ㄦ斁榪涗竴涓緟鍔╃殑闃熷垪閲岋紝鐒跺悗鍙栧弽鏃跺彧瑕佸鐞嗛槦鍒椾腑鐨勭粨鐐瑰氨琛屼簡銆?br />
鍔犲叆璇ヤ紭鍖栧悗鐨勪唬鐮侊紙solve閮ㄥ垎錛夛細
void solve()
{
    
int len = A.length(), x = root, y, c; res = 0;
    re(i, len) {
        c 
= A[i] - 97;
        
while (x && !T[x].ch[c]) x = T[x].fail;
        
if (!x) x = root; else x = T[x].ch[c];
        y 
= x;
        
while (y && T[y].mul >= 0) {res += T[y].mul; T[y].mul = -T[y].mul; y = T[y].fail;}
    }
}

涓嬮潰鏄紭鍖栫殑瀹炴祴緇撴灉錛堢涓涓負浼樺寲鍚庣殑錛岀浜屼釜涓轟紭鍖栧墠鐨勶級錛屽彲浠ョ湅鍑猴紝璇ヤ紭鍖栫殑鍔涘害寰堝ぇ銆?img height="48" alt="" src="http://www.shnenglu.com/images/cppblog_com/matono1/嫻嬭瘎緇撴灉/ACauto.gif" width="564" border="0" longdesc="" />


Mato_No1 2011-10-19 19:47 鍙戣〃璇勮
]]>
鐜艦涓茬殑鏈浼樻柇鐐歸棶棰?/title><link>http://www.shnenglu.com/MatoNo1/archive/2011/04/23/144852.html</link><dc:creator>Mato_No1</dc:creator><author>Mato_No1</author><pubDate>Sat, 23 Apr 2011 08:09:00 GMT</pubDate><guid>http://www.shnenglu.com/MatoNo1/archive/2011/04/23/144852.html</guid><wfw:comment>http://www.shnenglu.com/MatoNo1/comments/144852.html</wfw:comment><comments>http://www.shnenglu.com/MatoNo1/archive/2011/04/23/144852.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/MatoNo1/comments/commentRss/144852.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/MatoNo1/services/trackbacks/144852.html</trackback:ping><description><![CDATA[銆愰棶棰樻弿榪般?br>緇欏嚭涓涓幆褰㈢殑瀛楃涓睸錛岄暱搴︿負N錛岀幇鍦ㄨ鎵懼埌涓涓柇寮鐐癸紝浣垮緱浠庤繖閲屾柇寮鍚庣殑瀛楃涓插瓧鍏稿簭鏈灝忋傛垨鑰呰錛屽浜庨暱搴︿負N鐨勫瓧絎︿覆S[0..N-1]錛屾壘鍒頒竴涓綅緗甶錛屼嬌寰楀瓧絎︿覆S' = S[i..N-1] + S[0..i-1]鐨勫瓧鍏稿簭鏈灝忋傝嫢瀛樺湪澶氫釜榪欐牱鐨勬渶浼樻柇鐐癸紝鍒欏彇鏈宸﹁竟(i鏈灝?鐨勯偅涓?br>銆怱ample Input銆?br>amandamanda<br>銆怱ample Output銆?br>10<br>錛堜粠絎?0浣嶆柇寮鍚庡緱鍒扮殑瀛楃涓?aamandamand"鐨勫瓧鍏稿簭鏄?1涓柇寮浣嶇疆涓渶灝忕殑錛?br><br>銆愬垎鏋愩?br>棣栧厛灝嗚繖涓幆褰覆鎷嗗紑錛氬彧闇灝哠[0..N-1]鐨勫悗闈㈠啀鎺ヤ笂S[0..N-2]鍗沖彲錛堝瀵逛簬鏍蜂緥錛屽彲鏋勯犲瓧絎︿覆T = "amandamandaamandamand"錛夛紝鍒橳鐨勪換鎰忎竴涓暱搴︿負N鐨勫瓙涓睺[i..i-N+1]灝辨槸S浠庣i浣嶆柇寮寰楀埌鐨勫瓧絎︿覆銆傛鏃墮棶棰樺氨鍙樻垚浜嗭細<span style="COLOR: red"><strong>緇欏嚭涓涓暱搴︿負(2N-1)鐨勫瓧絎︿覆錛屾眰鍑哄叾鎵鏈夐暱搴︿負N鐨勫瓙涓蹭腑瀛楀吀搴忔渶灝忕殑</strong></span>銆?br><br>璁綟[x]涓?span style="COLOR: red"><strong>T涓墍鏈夎搗濮嬩綅灝忎簬N鐨勯暱搴︿負x鐨勫瓙涓蹭腑瀛楀吀搴忔渶灝忕殑瀛愪覆鐨勮搗濮嬩綅錛堣嫢鏈夊涓垯鍙栨渶宸﹁竟鐨勶級</strong></span>錛屽瀵逛簬T="abaabaaababaabaaa"錛屾湁F[0]=F[1]=0錛孎[2]=2錛孎[3]=F[4]=5……鏈鐨勭洰鐨勫氨鏄眰鍑篎[N]鐨勫箋備竴寮濮嬪凡鐭ョ殑鍙湁F[0]=0錛堥暱搴︿負0鐨勫瓧絎︿覆閮芥槸絀轟覆錛屽瓧鍏稿簭閮芥槸鏈灝忕殑錛屽彇鏈宸﹁竟鐨勭0浣嶏級銆?br><br>鍙互鍙戠幇錛孎鏁扮粍鏈夊緢澶氶噸瑕佺殑鎬ц川錛?br><span style="COLOR: #ff0000"><strong>鎬ц川1 F[0..N]鏁扮粍鏄崟璋冮掑鐨勩?/strong></span><br>璇佹槑錛氱敤鍙嶈瘉娉曘傝瀛樺湪涓涓紉(0<=x<N)浣垮緱F[x]>F[x+1]鍒欐牴鎹畾涔夛紝鏈塗[F[x+1]..F[x+1]+x]<=T[F[x]..F[x]+x]錛堣繖閲屼竴瀹氫笉浼氳秺鐣岋紝鍗矲[x]+x鐨勫間竴瀹氫笉澶т簬(2N-1)錛屽洜涓簒<N錛屽張鏍規嵁寰桭[x]<N錛屾晠F[x]+x<2N錛夛紝榪欐牱錛屽繀鏈塗[F[x+1]..F[x+1]+x-1]<=T[F[x]..F[x]+x-1]銆傜劧鑰屾牴鎹瓼[x]鐨勫畾涔夊張鍙互寰楀埌T[F[x+1]..F[x+1]+x-1]>T[F[x]..F[x]+x-1]錛堝惁鍒橣[x]鐨勫煎氨搴旇絳変簬F[x+1]鐨勫間簡錛夛紝鐭涚浘錛屾晠鍦‵[0..N]涓笉鍙兘瀛樺湪浠諱綍F[x]>F[x+1]鐨勬儏鍐碉紝涔熷嵆F[0..N]鏁扮粍鏄崟璋冮掑鐨勶紙浠ヤ笅灝咶[0..N]鏁扮粍綆縐頒負F鏁扮粍錛夈?br><span style="COLOR: #ff0000"><strong>鎬ц川2 瀵逛簬浠繪剰鍊紉(0<=x<N)錛屽繀鐒舵弧瓚矲[x+1]=F[x]鎴朏[x+1]>F[x]+x銆?/strong></span><br>璇佹槑錛氬洜涓哄墠闈㈠凡緇忚瘉鏄庝簡F鏁扮粍鏄崟璋冮掑鐨勶紝榪欓噷鍙渶璇佹槑瀵逛簬浠繪剰x(0<=x<N)錛屼笉瀛楩[x]<F[x+1]<=F[x]+x鐨勬儏鍐靛嵆鍙?br>榪欓噷鍚屾牱鐢ㄥ弽璇佹硶銆傝瀛樺湪涓涓紉(0<=x<N)浣垮緱F[x]<F[x+1]<=F[x]+x銆傚垯鏍規嵁瀹氫箟鏈塗[F[x+1]..F[x+1]+x]<T[F[x]..F[x]+x]涓擳[F[x]..F[x]+x-1]<=T[F[x+1]..F[x+1]+x-1]錛岃繖鏍峰繀鏈塗[F[x]..F[x]+x-1]=T[F[x+1]..F[x+1]+x-1]涓擳[F[x+1]+x]<T[F[x]+x]銆傝D=F[x+1]-F[x]錛屽垯T[F[x]]=T[F[x]+D]錛屽洜涓篋<=x錛屽彲寰桾[F[x]+D]=T[F[x]+2D]錛屽嵆T[F[x]]=T[F[x]+2D]銆傝繖鏍鳳紝T[F[x]..F[x]+x-D-1]=T[F[x]+2D..F[x]+x+D-1]錛涘張鍥犱負T[F[x]+x-D]=T[F[x]+x]錛岃孴[F[x+1]+x]錛堝嵆T[F[x]+x+D]]錛?lt;T[F[x]+x]錛岃繖鏍鳳紝T[F[x]+x+D]<T[F[x]+x-D]錛屼篃灝辨槸錛孴[F[x]+2D..F[x]+x+D]<T[F[x]..F[x]+x-D]錛佽繖鏍峰彲浠ュ緱鍑猴紝浠?F[x]+2D)浣嶅紑濮嬬殑浠繪剰闀垮害涓嶅皬浜?x-D)鐨勫瓙涓詫紝鍏跺瓧鍏稿簭閮藉皬浜庝粠F[x]浣嶅紑濮嬬殑鍚屾牱闀垮害鐨勫瓙涓詫紝鐢變簬F[x]<F[x+1]<=F[x]+x錛孌=F[x+1]-F[x]錛屾墍浠ユ湁1<=D<=x錛岃繖鏍鳳紝F[x]鐨勫煎氨搴旇鏄?F[x]+2D)浜嗭紝榪欐樉鐒朵笉鍙兘銆傛墍浠ワ紝涓寮濮嬪亣璁劇殑榪欑鎯呭喌鏄笉鍙兘瀛樺湪鐨勶紝鍗沖浜庝換鎰忓紉錛?<=x<N錛夛紝蹇呯劧婊¤凍F[x+1]=F[x]鎴朏[x+1]>F[x]+x銆?br><br>鏍規嵁F鏁扮粍鐨勪互涓婁袱涓ц川鍙互璁捐鍑烘湰棰樼殑綆楁硶錛?br>璁劇洰鍓嶅凡緇忔眰鍑轟簡F[0..x-1]鐨勫鹼紝涓擣[x-1]=i銆傞鍏堝皢T[0..i-1]鍏ㄩ儴鍒犲幓錛堝洜涓篎鏁扮粍鏄崟璋冮掑鐨勶紝F[x]鐨勫間竴瀹氫笉灝忎簬i錛夛紝鐒跺悗瀵筎鑷韓浣滄墿灞昁MP錛堝氨鏄互T涓烘ā鏉夸覆錛孴涓哄瓙涓茬殑鎵╁睍KMP錛岀浉褰撲簬鍏墮澶勭悊閮ㄥ垎錛夛紝涓寮濮嬪厛灝咶[x]緗負i錛岃絎琷浣嶇殑鍖歸厤闀垮害涓簄ext[j]錛岃嫢next[j]=x-1涓擳[j+x-1]<T[i+x-1]錛屽垯灝咶[x]鐨勫兼敼涓簀錛岃繖鏍鋒壂鎻忎竴閬嶏紝鍗蟲眰鍑轟簡F[x]鐨勫箋傝嫢鎵弿榪囩▼涓湭鍑虹幇浠諱綍next[j]=x-1錛屽垯璁炬墍鏈塶ext[j]鍊間笉灝忎簬x鐨勬渶灝弉ext[j]鍊間負y錛屽垯鍙互鐩存帴寰楀埌F[x..y-1]鐨勫煎潎絳変簬F[x-1]銆傚氨榪欐牱鐩村埌姹傚嚭F[N]鐨勫間負姝€?br><br>鏃墮棿澶嶆潅搴︼細O(N<span style="FONT-FAMILY: symbol">Ö</span>N)錛屽彲浠ユ牴鎹ц川2寰楀埌銆? <img src ="http://www.shnenglu.com/MatoNo1/aggbug/144852.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/MatoNo1/" target="_blank">Mato_No1</a> 2011-04-23 16:09 <a href="http://www.shnenglu.com/MatoNo1/archive/2011/04/23/144852.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>KMP鍜屾墿灞昁MPhttp://www.shnenglu.com/MatoNo1/archive/2011/04/17/144390.htmlMato_No1Mato_No1Sun, 17 Apr 2011 11:11:00 GMThttp://www.shnenglu.com/MatoNo1/archive/2011/04/17/144390.htmlhttp://www.shnenglu.com/MatoNo1/comments/144390.htmlhttp://www.shnenglu.com/MatoNo1/archive/2011/04/17/144390.html#Feedback1http://www.shnenglu.com/MatoNo1/comments/commentRss/144390.htmlhttp://www.shnenglu.com/MatoNo1/services/trackbacks/144390.html銆愮畻娉曘?br />璁緉ext[i]涓烘弧瓚矪[i-z+1..i]==B[0..z-1]鐨勬渶澶х殑z鍊鹼紙涔熷氨鏄疊鐨勮嚜韜尮閰嶏級銆傝鐩墠next[0..lenB-1]涓巈x[0..i-1]鍧囧凡姹傚嚭錛岃鐢ㄥ畠浠潵姹俥x[i]鐨勫箋?br />鏍規嵁ex鐨勫畾涔夛紝鏈堿[i-1-ex[i-1]+1..i-1]==B[0..ex[i-1]-1]錛岃繖鏃訛紝鑻ユ湁A[i]==B[ex[i-1]]錛屽垯鍙互鐩存帴寰楀埌ex[i]=ex[i-1]+1錛堝洜涓篿-1-ex[i-1]+1鍗砳-ex[i-1]錛岀幇鍦ㄧ敱浜嶢[i]==B[ex[i-1]]錛屽彲寰桝[i-ex[i-1]..i]==B[0..ex[i-1]]錛屽嵆A[i-ex[i-1]+1-1..i]==B[0..ex[i-1]+1-1]錛屾墍浠x[i]=ex[i-1]+1錛夈傝嫢A[i]!=B[ex[i-1]]錛?br />璁緅=next[ex[i-1]-1]錛屽垯鏍規嵁next瀹氫箟寰桞[ex[i-1]-j..ex[i-1]-1]==B[0..j-1]錛屽張鍥犱負A[i-ex[i-1]..i-1]==B[0..ex[i-1]-1]寰桝[i-j..i-1]==B[ex[i-1]-j..ex[i-1]-1]錛岃繖鏍鋒湁A[i-j..i-1]==B[0..j-1]錛佷篃灝辨槸姝ゆ椂鍙渶鍐嶆瘮杈傾[i]涓嶣[j]鐨勫兼槸鍚︾浉絳夊嵆鍙紝鑻ョ浉絳夛紝鍙緱ex[i]=j+1錛岃嫢浠嶄笉鐩哥瓑錛屽垯鏇存柊j涓簄ext[j-1]錛岀戶緇瘮杈傾[i]涓嶣[j]鏄惁鐩哥瓑……鐩村埌A[i]涓嶣[j]鐩哥瓑鎴栫洿鍒癹==0鏃訛紝A[i]浠嶄笉絳変簬B[j]錛屾鏃秂x[i]=0銆傝竟鐣岋細姹俥x[0]鏃訛紝鍒濆j錛堢敤鏉ヤ唬鏇縠x[i-1]錛変負0銆?br />鐜板湪榪樻湁涓涓棶棰橈紝濡備綍姹俷ext錛熸樉鐒秐ext灝辨槸浠鑷韓涓烘ā鏉夸覆錛孊涓哄瓙涓茬殑“鑷韓鍖歸厤”錛岀敤綾諱技鐨勫姙娉曞嵆鍙紝鍞竴涓嶅悓鐨勬槸next[0]=lenB鍙互鐩存帴寰楀埌錛屾眰next[1]鏃訛紝鍒濆j錛堜唬鏇縩ext[i-1]錛変負0銆?br />銆愭牳蹇冧唬鐮併?br />
    lenA = strlen(A); lenB = strlen(B);
    next[
0= lenB;
    
int j = 0;
    re2(i, 
1, lenB) {
        
while (j && B[i] != B[j]) j = next[j - 1];
        
if (B[i] == B[j]) j++;
        next[i] 
= j;
    }
    j 
= 0;
    re(i, lenA) {
        
while (j && A[i] != B[j]) j = next[j - 1];
        
if (A[i] == B[j]) j++;
        ex[i] 
= j;
    }
鎵╁睍KMP錛氱粰鍑烘ā鏉夸覆A鍜屽瓙涓睟錛岄暱搴﹀垎鍒負lenA鍜宭enB錛岃姹傚湪綰挎ф椂闂村唴錛屽浜庢瘡涓狝[i]錛?<=i<lenA)錛屾眰鍑篈[i..lenA-1]涓嶣鐨勬渶闀垮叕鍏卞墠緙闀垮害錛岃涓篹x[i]錛堟垨鑰呰錛宔x[i]涓烘弧瓚矨[i..i+z-1]==B[0..z-1]鐨勬渶澶х殑z鍊鹼級銆傛墿灞昁MP鍙互鐢ㄦ潵瑙e喅寰堝瀛楃涓查棶棰橈紝濡傛眰涓涓瓧絎︿覆鐨勬渶闀垮洖鏂囧瓙涓插拰鏈闀塊噸澶嶅瓙涓層?br />銆愮畻娉曘?br />璁緉ext[i]涓烘弧瓚矪[i..i+z-1]==B[0..z-1]鐨勬渶澶х殑z鍊鹼紙涔熷氨鏄疊鐨勮嚜韜尮閰嶏級銆傝鐩墠next[0..lenB-1]涓巈x[0..i-1]鍧囧凡姹傚嚭錛岃鐢ㄥ畠浠潵姹俥x[i]鐨勫箋?br />璁緋涓虹洰鍓岮涓蹭腑鍖歸厤鍒扮殑鏈榪滀綅緗紝k涓鴻鍏跺尮閰嶅埌鏈榪滀綅緗殑鍊鹼紙鎴栬呰錛宬鏄湪0<=i0<i鐨勬墍鏈塱0鍊間腑錛屼嬌i0+ex[i0]-1鐨勫兼渶澶х殑涓涓紝p涓鴻繖涓渶澶у鹼紝鍗砶+ex[k]-1錛夛紝鏄劇劧錛宲涔嬪悗鐨勬墍鏈変綅閮芥槸鏈煡鐨勶紝涔熷氨鏄洰鍓嶈繕鏃犳硶鐭ラ亾A[p+1..lenA-1]涓殑浠諱綍涓浣嶅拰B鐨勪換浣曚竴浣嶆槸鍚︾浉絳夈?br />鏍規嵁ex鐨勫畾涔夊彲寰楋紝A[k..p]==B[0..p-k]錛屽洜涓篿>k錛屾墍浠ュ張鏈堿[i..p]==B[i-k..p-k]錛岃L=next[i-k]錛屽垯鏍規嵁next鐨勫畾涔夋湁B[0..L-1]==B[i-k..i-k+L-1]銆傝冭檻i-k+L-1涓巔-k鐨勫叧緋伙細
錛?錛塱-k+L-1<p-k錛屽嵆i+L<=p銆傝繖鏃訛紝鐢盇[i..p]==B[i-k..p-k]鍙互寰楀埌A[i..i+L-1]==B[i-k..i-k+L-1]錛屽張鍥犱負B[0..L-1]==B[i-k..i-k+L-1]鎵浠[i..i+L-1]==B[0..L-1]錛岃繖灝辮鏄巈x[i]>=L銆傚張鐢變簬next鐨勫畾涔夊彲寰楋紝A[i+L]蹇呯劧涓嶇瓑浜嶣[L]錛堝惁鍒橝[i..i+L]==B[0..L]錛屽洜涓篿+L<=p錛屾墍浠[i..i+L]==B[i-k..i-k+L]錛岃繖鏍稡[0..L]==B[i-k..i-k+L]錛屾晠next[i-k]鐨勫煎簲涓篖+1鎴栨洿澶э級錛岃繖鏍鳳紝鍙互鐩存帴寰楀埌ex[i]=L錛?/strong>
錛?錛塱+k-L+1>=p-k錛屽嵆i+L>p銆傝繖鏃訛紝棣栧厛鍙互鐭ラ亾A[i..p]鍜孊[0..p-i]鏄浉絳夌殑錛堝洜涓篈[i..p]==B[i-k..p-k]錛岃宨+k-L+1>=p-k錛岀敱B[0..L-1]==B[i-k..i-k+L-1]鍙緱B[0..p-i]==B[i-k..p-k]錛屽嵆A[i..p]==B[0..p-i]錛夛紝鐒跺悗錛屽浜嶢[p+1]鍜孊[p-i+1]鏄惁鐩哥瓑錛岀洰鍓嶆槸涓嶇煡閬撶殑錛堝洜涓哄墠闈㈠凡緇忚榪囷紝p鏄洰鍓岮涓蹭腑鍖歸厤鍒扮殑鏈榪滀綅緗紝鍦╬涔嬪悗鏃犳硶鐭ラ亾浠諱綍涓浣嶇殑鍖歸厤淇℃伅錛夛紝鍥犳錛岃浠嶢[p+1]涓嶣[p-i+1]寮濮嬪線鍚庣戶緇尮閰嶏紙璁緅涓虹洰鍓岯鐨勫尮閰嶄綅緗殑涓嬫爣錛屼竴寮濮媕=p-i+1錛屾瘡嬈℃瘮杈傾[i+j]涓嶣[j]鏄惁鐩哥瓑錛岀洿鍒頒笉鐩哥瓑鎴栬呰秺鐣屼負姝紝姝ゆ椂鐨刯鍊煎氨鏄痚x[i]鐨勫鹼級銆傚湪榪欑鎯呭喌涓嬶紝p鐨勫煎繀鐒朵細寰楀埌寤朵幾錛屽洜姝ゆ洿鏂発鍜宲鐨勫箋?br />杈圭晫錛歟x[0]鐨勫奸渶瑕侀鍏堟眰鍑猴紝鐒跺悗灝嗗垵濮嬬殑k璁句負0錛宲璁句負ex[0]-1銆?br />瀵逛簬姹俷ext鏁扮粍錛屼篃鏄?#8220;鑷韓鍖歸厤”錛岀被浼糑MP鐨勬柟娉曞鐞嗗嵆鍙傚敮涓鐨勪笉鍚岀偣涔熷湪杈圭晫涓婏細鍙互鐩存帴鐭ラ亾next[0]=lenB錛宯ext[1]鐨勫奸鍏堟眰鍑猴紝鐒跺悗鍒濆k=1錛宲=ex[1]銆?br />
闇瑕佷弗閲嶆敞鎰忕殑鏄紝鍦ㄤ笂榪扮殑鎯呭喌錛?錛変腑錛屾湰璇ヤ粠A[p+1]涓嶣[p-i+1]寮濮嬪尮閰嶏紝浣嗘槸錛岃嫢p+1<i錛屼篃灝辨槸p-i+1<0錛堣繖縐嶆儏鍐墊槸鏈夊彲鑳藉彂鐢熺殑錛屽綋ex[i-1]=0錛屼笖鍓嶉潰鐨別x鍊奸兘娌℃湁寤朵幾鍒癷鍙婁互鍚庣殑鏃跺欙級鐨勮瘽錛岄渶瑕佸皢A銆丅鐨勪笅鏍囬兘鍔?錛堝洜涓烘鏃秔蹇呯劧絳変簬i-2錛屽鏋淎銆丅鐨勪笅鏍囩敤涓や釜鍙橀噺x銆亂鎺у埗鐨勮瘽錛寈鍜寉閮借鍔?錛夛紒錛?/span>

銆愭牳蹇冧唬鐮併?br />
lenA = strlen(A); lenB = strlen(B);
    next[
0= lenB; next[1= lenB - 1;
    re(i, lenB
-1if (B[i] != B[i + 1]) {next[1= i; break;}
    
int j, k = 1, p, L;
    re2(i, 
2, lenB) {
        p 
= k + next[k] - 1; L = next[i - k];
        
if (i + L <= p) next[i] = L; else {
            j 
= p - i + 1;
            
if (j < 0) j = 0;
            
while (i + j < lenB && B[i + j] == B[j]) j++;
            next[i] 
= j; k = i;
        }
    }
    
int minlen = lenA <= lenB ? lenA : lenB; ex[0= minlen;
    re(i, minlen) 
if (A[i] != B[i]) {ex[0= i; break;}
    k 
= 0;
    re2(i, 
1, lenA) {
        p 
= k + ex[k] - 1; L = next[i - k];
        
if (i + L <= p) ex[i] = L; else {
            j 
= p - i + 1;
            
if (j < 0) j = 0;
            
while (i + j < lenA && j < lenB && A[i + j] == B[j]) j++;
            ex[i] 
= j; k = i;
        }
    }
銆愭椂闂村鏉傚害鍒嗘瀽銆?br />鍦↘MP鍜屾墿灞昁MP涓紝涓嶇鏄疉涓茶繕鏄疊涓詫紝鍏跺尮閰嶄綅緗兘鏄崟璋冮掑鐨勶紝鏁呮繪椂闂村鏉傚害鏄嚎鎬х殑錛岄兘涓篛(lenA + lenB)錛堝彧鏄墿灞昁MP姣擪MP鐨勫父鏁版洿澶т竴浜涳級銆?br />銆愬簲鐢ㄣ?br />KMP鍜屾墿灞昁MP鍦ㄨВ鍐沖瓧絎︿覆闂涓湁澶х敤銆傚緢澶氱湅涓婂幓寰堢尌鐞愮殑瀛楃涓查棶棰橈紝閮藉彲浠ュ綊緇撳埌榪欎袱縐嶇畻娉曚箣涓傚彟澶栵紝榪欓噷鐨?#8220;瀛楃涓?#8221;鍙互寤朵幾涓轟竴鍒囩被鍨嬬殑鏁扮粍錛岃屼笉浠呬粎鏄瓧絎︽暟緇勩?img src ="http://www.shnenglu.com/MatoNo1/aggbug/144390.html" width = "1" height = "1" />

Mato_No1 2011-04-17 19:11 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              在线亚洲精品福利网址导航| 欧美午夜片在线观看| 久久麻豆一区二区| 午夜精品视频在线观看一区二区| 宅男噜噜噜66国产日韩在线观看| 在线午夜精品| 久久国产精品高清| 欧美freesex8一10精品| 亚洲国产日韩在线一区模特| 久久精品日产第一区二区| 欧美一区二区在线| 久久夜色精品亚洲噜噜国产mv| 欧美影视一区| 老司机67194精品线观看| 麻豆精品一区二区av白丝在线| 免费亚洲电影在线| 亚洲美女中文字幕| 亚洲影视在线播放| 久久成人国产精品| 久久这里只有| 久久久国产亚洲精品| 欧美电影在线免费观看网站| 欧美日韩在线直播| 国产午夜亚洲精品理论片色戒| 好男人免费精品视频| 亚洲精选一区| 久久久国际精品| 亚洲国产另类久久久精品极度 | 亚洲欧美中文日韩在线| 久久久久久亚洲精品杨幂换脸| 亚洲精品1区| 久久精品男女| 国产精品视频| 亚洲一区二区三区中文字幕在线| 国产精品久久久久久久久婷婷 | 欧美精品一区二区视频| 欧美在线观看天堂一区二区三区 | 欧美激情免费在线| 国产一区日韩欧美| 亚洲一区二区三区在线观看视频 | 亚洲一线二线三线久久久| 蜜臀av一级做a爰片久久| 国产亚洲毛片在线| 午夜精品福利一区二区蜜股av| 亚洲国产黄色| 美女久久一区| 91久久亚洲| 欧美激情91| 久久综合色播五月| 一区免费观看| 亚洲国产精品www| 欧美在线视频免费播放| 亚洲视频精选| 欧美性猛交xxxx免费看久久久 | 亚洲欧美中文字幕| 国产精品久久久久久久久久ktv| 亚洲乱码精品一二三四区日韩在线 | 久久色在线播放| 在线高清一区| 欧美国产日韩在线观看| 蜜臀av国产精品久久久久| 亚洲精品乱码久久久久| 91久久一区二区| 欧美高清不卡| 亚洲视频观看| 亚洲一本视频| 久久久av网站| 一区二区三区中文在线观看| 久久大逼视频| 久久激情综合网| 在线观看日韩av电影| 欧美国产高清| 欧美片网站免费| 亚洲欧美日韩区| 欧美高清视频一区二区三区在线观看| 久久久国产视频91| 日韩亚洲欧美一区| 亚洲精品免费电影| 欧美性大战xxxxx久久久| 亚洲一区久久久| 性欧美1819sex性高清| 欧美三级黄美女| 国产字幕视频一区二区| 久久超碰97中文字幕| 久久av一区二区| 在线激情影院一区| 欧美激情a∨在线视频播放| 欧美精品 日韩| 宅男精品视频| 欧美一区二区免费观在线| 精品白丝av| 亚洲第一精品电影| 国产精品高清免费在线观看| 欧美在线观看视频| 久久久久一区| 亚洲一区三区电影在线观看| 久久国产视频网| 一区二区日韩免费看| 欧美亚洲综合在线| 亚洲午夜av在线| 免费观看30秒视频久久| 欧美一级片久久久久久久| 免费人成精品欧美精品| 久久都是精品| 欧美午夜视频在线观看| 欧美刺激午夜性久久久久久久| 欧美视频中文字幕在线| 欧美国产日产韩国视频| 国产午夜精品全部视频播放 | 91久久久在线| 狠狠色狠狠色综合人人| 一区二区三区精品视频| 亚洲精品国产无天堂网2021| 性欧美8khd高清极品| 午夜一区二区三视频在线观看| 欧美电影在线观看| 欧美激情精品久久久久久黑人| 国产欧美一区二区色老头| 亚洲欧美卡通另类91av| 蜜臀av性久久久久蜜臀aⅴ| 久久精品国产第一区二区三区最新章节 | 久久一区二区三区国产精品| 午夜精品久久久久久久久| 欧美久久久久免费| 亚洲国产第一页| 国产精品久久久对白| 亚洲国产精品久久人人爱蜜臀 | 久久视频精品在线| 欧美日韩精品免费观看视频| 亚洲成色最大综合在线| 国外成人网址| 欧美一区激情视频在线观看| 午夜在线成人av| 国产女人精品视频| 午夜精品久久| 久久久噜噜噜| 影音先锋日韩资源| 老司机午夜精品视频在线观看| 噜噜噜躁狠狠躁狠狠精品视频| 国产欧美视频一区二区| 久久香蕉精品| 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 久久综合伊人77777蜜臀| 久久人人精品| 91久久精品国产| 欧美日本免费| 一本一本久久a久久精品综合妖精| 亚洲五月婷婷| 国产欧美一区二区三区在线看蜜臀| 午夜电影亚洲| 模特精品在线| 99在线精品视频| 国产精品永久免费| 久久久伊人欧美| 亚洲国产欧美日韩| 亚洲在线免费| 怡红院精品视频| 欧美精品v国产精品v日韩精品| 亚洲人成毛片在线播放| 亚洲一区日本| 亚洲高清视频一区| 欧美日本一区二区三区| 亚洲一区二区三区四区在线观看| 久久久精品国产99久久精品芒果| 1769国内精品视频在线播放| 欧美 日韩 国产在线 | 亚洲乱码国产乱码精品精天堂 | 1024国产精品| 欧美亚洲成人免费| 久久国产福利国产秒拍| 免费看亚洲片| 日韩一级免费观看| 国产在线播精品第三| 免费一级欧美片在线观看| 夜夜爽99久久国产综合精品女不卡| 午夜精品福利在线观看| 在线精品在线| 欧美日韩精品是欧美日韩精品| 亚洲一本大道在线| 亚洲人成在线观看| 老色批av在线精品| 久久riav二区三区| 亚洲少妇最新在线视频| 亚洲福利电影| 国产一区二区三区四区| 国产精品a久久久久| 免费观看久久久4p| 欧美一区二区啪啪| 一区二区三区免费观看| 狼狼综合久久久久综合网| 亚洲欧美一区二区精品久久久| 红桃视频一区| 国产农村妇女毛片精品久久麻豆| 久久综合久色欧美综合狠狠| 中文日韩在线| 亚洲日本中文字幕| 免费欧美高清视频| 狂野欧美激情性xxxx| 亚洲欧美日韩电影| 一个色综合av|