锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
浠?鍒癗(100000)涓換鎰忔嬁鎺変袱涓暟錛屾妸鍓╀笅鐨?9998涓暟欏哄簭鎵撲貢錛屽茍涓旀斁鍏ユ暟緇凙涓傝姹傚彧鎵弿涓閬嶆暟緇勶紝鎶婅繖涓や釜鏁版壘鍑烘潵銆傚彲浠ヤ嬌鐢ㄦ渶鍒頒笉瓚呰繃5涓眬閮ㄥ彉閲忥紝涓嶈兘鐢ㄦ暟緇勫彉閲忥紝騫朵笖涓嶈兘鏀瑰彉鍘熸暟緇勭殑鍊箋?br />
鎬濊礬錛?br />
閬嶅巻涓嬈℃暟緇勶紝姹傚嚭榪欎袱涓暟鐨勫拰a+b 涓庣Нa*b
a+b = 1+2+3+4+...+N- sum(A[]);聽聽聽 (1)
a*b =聽 1*2*3*4*...*N / multi(A[]);聽聽 (2)
涓昏瑙e喅sum涓巑ulti鐨勬孩鍑洪棶棰?br />
(1) 鍙寲涓?(N-A[0]) + (N-1-A[1]) + ...+ (3-A[N-3]) + 2 + 1
(2) 鍙互鐢ㄥ鏁版潵浠f浛鍘熸暟榪涜姹傜Н鐨勭瓑浠瘋繍綆?閬垮厤婧㈠嚭鐨勯棶棰橈紝浣嗘槸榪欑鏂規硶浼氫駭鐢熶竴浜涚簿搴︿笂鐨勯棶棰橈紝涓嶇煡閬撳ぇ瀹舵湁浠涔堟洿濂界殑鏂規硶錛?br />鍏堟眰鍑簂og(a*b)聽:
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽= log(1*2*3*4*....*N)/log(A[0]*A[1]*A[2]*...*A[N-3])
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽= log(N)-log(A[0]) + log(N-1)-log(A[1]) + ... +log(3)-log(A[N-3]) + log(2) + log(1)
聽聽聽聽聽聽聽聽聽
鐭ラ亾浜嗕袱鏁扮殑鍜屼笌縐?鐢辨灝卞彲浠ヨ綆楀嚭a璺焍鐨勫兼潵.
浠g爜濡備笅錛?br />#include聽<iostream>
#include聽<Ctime>
#include聽<Cmath>
using聽namespace聽std;
#define聽N聽100000
//鐢熸垚涓嶅悓鐨勯殢鏈烘暟鐨勬暟緇?/span>
void聽GetDiffRandomNum(int聽A[],聽int聽n)
{
聽聽聽聽srand(unsigned(time(NULL)));
聽聽聽聽int聽i=0;
聽聽聽聽for(int聽index聽=聽n-1;聽index聽>聽0;聽index--)
聽聽聽聽{
聽聽聽聽聽聽聽聽i聽=聽rand()聽%聽index;
聽聽聽聽聽聽聽聽swap(A[i],聽A[index]);
聽聽聽聽}
}
int聽main()
{
聽聽
聽聽聽聽int聽A[N]={0};
聽聽聽聽for(int聽i=0;聽i<N;聽i++)
聽聽聽聽{
聽聽聽聽聽聽聽聽A[i]聽=聽i+1;
聽聽聽聽}
聽聽聽聽GetDiffRandomNum(A,聽N);
聽聽聽聽//DISPLAY(A,聽N);
聽聽聽聽
聽聽聽聽unsigned聽int聽sum聽=聽0;
聽聽聽聽double聽logSum聽=聽0;
聽聽聽聽for(i=0;聽i<N-2;聽i++)
聽聽聽聽{
聽聽聽聽聽聽聽聽sum聽+=聽N-i-A[i];聽聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽logSum聽+=聽log(N-i)-log(A[i]);
聽聽聽聽}
聽聽聽聽sum聽+=聽2聽+聽1;
聽聽聽聽logSum聽+=聽log(2)+log(1);
聽聽聽聽double聽multi聽=聽exp(logSum);
聽聽聽聽//涓ゆ暟鐨勫拰涓庣Н
聽聽聽聽cout<<int(sum)<<'\t'<<int(multi)<<endl;
聽聽聽聽//姹傚嚭涓ゆ暟
聽聽聽聽for(i=1;聽i<=N;聽i++)
聽聽聽聽{
聽聽聽聽聽聽聽聽double聽temp聽=聽i*(sum-i);
聽聽聽聽聽聽聽聽if(multi-0.5<=temp聽&&聽temp聽<=聽multi+0.5)
聽聽聽聽聽聽聽聽聽聽聽聽cout<<i<<'\t'<<int(sum-i)<<endl;
聽聽聽聽}
聽
聽聽聽聽return聽0;
}
PS錛堣阿璋㈡灊~鐨勫府鍔╋級璇峰ぇ瀹舵寚瀵?br />
//................................
閫氳繃澶у鐨勫府鍔╋細
寰楀埌鍙︿竴涓啓娉曪紝涓嶄細浜х敓綺懼害闂
(1+N)*N /2 - S = a + b
1/6 * n*(n + 1)*(2n + 1) - X = a*a + b*b
娉細
1/6 * n*(n + 1)*(2n + 1)=1*1 + 2*2 + 3*3 +...+N*N
X = A[0]*A[0] + A[1]*A[1] +...A[N-3]*A[N-3]
聽
==>
a + b = m
a*a + b*b = n
鐢變簬鍙В鍑篴,b
聽聽聽聽unsigned聽int聽sqrSum聽=聽0;
聽聽聽聽for(i=0;聽i<N-2;聽i++)
聽聽聽聽{
聽聽聽聽聽聽聽聽sum聽+=聽N-i-A[i];聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽sqrSum聽+=聽((N-i)*(N-i))聽-聽((A[i])*A[i]);
聽聽聽聽聽
聽聽聽聽}
聽聽聽聽sum聽+=聽2聽+聽1;聽
聽聽聽聽sqrSum聽+=聽2*2聽+聽1*1;
]]>
聽
1.涓茬殑妯″紡鍖歸厤鐨勬敼榪涚畻娉?榪欎釜緗戠珯瀵規垜鐨勭悊瑙e府鍔╁緢澶?鐗瑰埆鏄彸杈圭殑閭e潡璇存槑閮ㄥ垎,浠ュ墠鑷繁鑴戠瓔鑰佹槸杞笉榪囨潵) http://cist.dhu.edu.cn/kejian/%CA%FD%BE%DD%BD%E1%B9%B9%BE%AB%C6%B7%BF%CE%B3%CC/%D4%DA%CF%DF%D1%A7%CF%B0/text/chapter04/section3/c5.htm
2.KMP 綆楁硶鐨勬敞璁?http://www.cublog.cn/u/20/showart_136705.html聽
3.KMP綆楁硶涓帹瀵糿ext[],nextval[]--鎵嬭 http://jiasimon040510.t8log.ccut.cn/blog-htm-do-showone-tid-6983.html
4.綆楁硶鍘熺悊錛?
鍦ㄥ尮閰嶈繃鍜屼腑錛屽綋涓諱覆涓i涓瓧絎︿笌妯″紡涓蹭腑絎琷涓瓧絎︹滃け閰嶁濇椂錛坰[i]!=t[j])錛屽皢妯″紡涓插敖閲忓悜鍙崇Щ鍔紝璁╂ā寮忎覆涓k錛坘<j)涓瓧絎︿笌si瀵歸綈緇х畫姣旇緝,
瑕佽榪欎釜鏉′歡鎴愮珛錛岄偅涔堝湪k涔嬪墠鐨刱涓猼瀛楃[0 鍒?k-1]蹇呴』鍦╥涔嬪墠鐨刱涓猻瀛楃[i-k 鍒?i-1]鐩稿尮閰嶅嵆錛?/p>
聽聽 t[0, 1, 2...k-1] == s[i-k, i-k+1, i-k+2...i-1]聽聽聽聽 ---(1)
鑰岀敱涔嬪墠鐨勯儴鍒嗗尮閰嶆垚鍔熺殑緇撴灉鍙煡錛?br />聽聽
聽聽 t[0, 1, 2...j-1] == s[i-j, i-j+1, i-j+2...i-1]聽聽聽聽 ---(2)
==>
聽聽 t[j-k, j-k+1, j-k+2...j-1] == s[i-k, i-k+1, i-k+2...i-1]聽聽 --(3)
鐢?1)涓?3)鍙緱錛?/p>
聽聽 t[0, 1, 2...k-1] == t[j-k, j-k+1, j-k+2...j-1]聽聽聽聽 ---(4)
姹傚嚭k鍊?灝辨槸next[j]鐨勫間簡
鎬諱箣,鐩稿鎴戞潵璇?綆楁硶涓嶆槸寰堝ソ鎳?浣嗘槸澶у鐪嬪埌鎴戣繖涔堢鐨勪漢鍒版渶鍚庨兘鑳芥槑鐧戒竴浜?澶у灝辨洿娌℃湁鐞嗙敱鐪嬩笉鎳備簡,紲濆ぇ瀹舵垚鍔熼檮涓婃垜鐨勬祴璇曟簮鐮?