




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1.題意:找出原串中出現(xiàn)超過(guò)2次的子串的數(shù)目,每個(gè)子串出現(xiàn)多次時(shí)不可重疊。分析:枚舉子串的長(zhǎng)度len,找到滿(mǎn)足連續(xù)的heighti=len的最左端 l 和最右端的位置 r,如果r-l=len說(shuō)明子串沒(méi)有重疊。#include #include #include using namespace std;const int maxn = 1005;int N;char smaxn;int samaxn,tmaxn,t2maxn,cmaxn;void suffix_sa(int n, int m) int i, *x=t, *y=t2; for (i=0; im; i+) ci = 0; for (
2、i=0; in; i+) cxi=si+; for (i=0; i=0; i-) sa-cxi = i; for (int k=1; k=n; k=1) int p = 0; for (i=n-k; in; i+) yp+ = i; for (i=0; i= k) yp+ = sai-k; for (i=0; im; i+) ci = 0; for (i=0; in; i+) cxyi+; for (i=0; i=0; i-) sa-cxyi = yi; swap(x,y); p = 1; xsa0 = 0; for (i=1; i=n) break; m = p; int rankmaxn,
3、heightmaxn;void getheight() int i, j, k=0; for (i=1; i=N; i+) ranksai = i; for (i=0; iN; i+) if (k) k-; int j = saranki-1; while (si+k = sj+k) k+; heightranki = k; void solve() N = strlen(s); suffix_sa(N+1,z+1); getheight(); int res = 0; int i, j, k, l, r; for (i=1; iN/2+1; i+) l = N,r = -1; for (j=
4、2; j=i) r = max(r,max(saj-1,saj); l = min(l,min(saj-1,saj); else if (heightj=i) res+; r = -1; l = N; if (r-l=i) res+; printf(%dn,res);int main() while (scanf(%s,s),s0!=#) solve(); return 0;2. 題意:給出長(zhǎng)度為n的數(shù)字序列,求重復(fù)出現(xiàn)次數(shù)不小于k的最長(zhǎng)序列(連續(xù))的長(zhǎng)度。例如序列 1 2 3 2 3 2 3 1,k=2,那么序列2 3 2 3重復(fù)出現(xiàn)了兩次,長(zhǎng)度為4。分析:二分枚舉長(zhǎng)度,如果在height數(shù)
5、組中連續(xù)出現(xiàn)超過(guò)k次的話就滿(mǎn)足。#include #include #include using namespace std;const int maxn = 1000002;int smaxn;int samaxn,tmaxn,t2maxn,cmaxn;int N;void build_sa(int n,int m) int i, *x=t, *y=t2; for (i=0; im; i+) ci = 0; for (i=0; in; i+) cxi = si+; for (i=1; i=0; i-) sa-cxi = i; int p; for (int k=1; k=n; k=1) p
6、= 0; for (i=n-k; in; i+) yp+ = i; for (i=0; i= k) yp+ = sai-k; for (i=0; im; i+) ci = 0; for (i=0; in; i+) cxyi+; for (i=0; i=0; i-) sa-cxyi = yi; swap(x, y); p = 1; xsa0 = 0; for (i=1; i= n) break; m = p; int rankmaxn,heightmaxn;void getheight() int i, j, k = 0; for (i=1; i=N; i+) ranksai = i; for
7、(i=0; iN; i+) if (k) k-; int j = saranki-1; while (si+k = sj+k) k+; heightranki = k; bool ok(int len, int k) int i; int tot = 1; for (i=1; i= len) tot+; if (tot = k) return true; else tot = 1; return false;void solve(int k) int i, j; int l, r, mid, res; l = k; r = N; while (l = r) mid = (l+r)/2; if
8、(ok(mid, k) res = mid; l = mid+1; else r = mid-1; printf(%dn,res);int main() / freopen(in.in,r,stdin); int k, i; while (scanf(%d %d,&N,&k)!=EOF) for (i=0; iN; i+) scanf(%d, &si); build_sa(N+1,20001);/ N+1之后,sa下標(biāo)就是從1開(kāi)始了 getheight(); solve(k); return 0;3. 題意:Gardon是個(gè)怕麻煩的人(恩,就是愛(ài)偷懶的人),很顯然將64個(gè)圓盤(pán)逐一搬動(dòng)直到所有的
9、盤(pán)子都到達(dá)第三個(gè)柱子上很困難,所以Gardon決定作個(gè)小弊,他又找來(lái)了一根一模一樣的柱子,通過(guò)這個(gè)柱子來(lái)更快的把所有的盤(pán)子移到第三個(gè)柱子上。下面的問(wèn)題就是:當(dāng)Gardon在一次游戲中使用了N個(gè)盤(pán)子時(shí),他需要多少次移動(dòng)才能把他們都移到第三個(gè)柱子上?很顯然,在沒(méi)有第四個(gè)柱子時(shí),問(wèn)題的解是2N-1,但現(xiàn)在有了這個(gè)柱子的幫助,又該是多少呢?分析:先將A柱子上的k個(gè)盤(pán)子通過(guò)四個(gè)柱子移動(dòng)的D柱子上,在將剩下的n-k盤(pán)子通過(guò)三個(gè)柱子移動(dòng)到C柱子上,在將D柱上的盤(pán)子通過(guò)四個(gè)柱子移動(dòng)到C柱子上。 dpi = min(2*dpk+an-k)#include #include #include using name
10、space std;long long d66 = 0,1,3;long long a66;int main() int i, j, n; d64 = 18433; for (i=1; i=63; i+) ai = (1LLi)-1; for (i=2; i=63; i+) di = 2*d1+ai-1; for (j=2; ji; j+) di = min(di,2*dj+ai-j); while (scanf(%d,&n)!=EOF) printf(%lldn,dn); return 0;代碼模版startstart1234567891011121314151617181920212223
11、242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481
12、49150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223#define _CRT_SECURE_NO_DEPRECATE#include #include #include #include #include
13、 #include #include #include #include #include #include #include #include #include #include #include #include #pragma comment(linker, /STACK:266777216)usingnamespacestd;#define pb push_back#define ppb pop_back#define pi 3.1415926535897932384626433832795028841971#define mp make_pair#define x first#def
14、ine y second#define pii pair#define pdd pair#define INF 1000000000#define FOR(i,a,b) for (int _n(b), i(a); i =_b;i-)#define all(c) (c).begin(), (c).end()#define SORT(c) sort(all(c)#define rep(i,n) FOR(i,1,(n)#define rept(i,n) FOR(i,0,(n)-1)#define L(s) (int)(s).size()#define C(a) memset(a),0,sizeof(
15、a)#define VI vector #define ll long longconstintdi = 0, 1, 0, -1 ;constintdj = 1, 0, -1, 0 ;inta, b, c, d, n, m, k;charmas20022002;intcs20022002, cs2420022002;inthor20022002, ver20022002;boolused20022002;pii sof4;pii q4000002;voidbfs(intbi,intbj)inta = 0, b = 0;qb+ = mp(bi, bj);usedbibj = 1;while(a
16、b)intci = qa.x;intcj = qa+.y;sof0 = min(sof0, pii(ci, cj);sof1 = min(sof1, pii(cj, ci);sof2 = min(sof2, pii(-ci, -cj);sof3 = min(sof3, pii(-cj, -ci);rept(i, 4)intni = ci + dii;intnj = cj + dji;if(ni = n | nj = m)continue;if(usedninj | masninj != mascicj)continue;usedninj = 1;qb+ = mp(ni, nj);inlinei
17、ntsum(intx,inty)if(x 0 | y 0)return0;returncsxy;inlineintsum(intx1,inty1,intx2,inty2)returnsum(x2, y2) - sum(x1 - 1, y2) - sum(x2, y1 - 1) + sum(x1 - 1, y1 - 1);inlineintsum2(intt,intx,inty)if(x 0 | y 2)return0;if(cnt = 1)if(sum2(0, r1 + 1, c1 + 1, r2 - 1, c2 - 1) = 1)return2;elsereturn0;rept(i, 4)i
18、f(!sum2(i, r1 + 1, c1 + 1, r2 - 1, c2 - 1)return2;return0;voidinit() memset(cs, 0,sizeof(cs);memset(cs2, 0,sizeof(cs2);memset(hor, 0,sizeof(hor);memset(ver, 0,sizeof(ver);memset(used, 0,sizeof(used);a = b = c = d = n = m = k = 0;intmain()/freopen(data.in, r, stdin);/freopen(output.txt, w, stdout);while(gets(mas0)init();sscanf(mas0,%d%d, &n, &m);rept(i, n)gets(masi);rept(j, m)csij = masij -0;if(!i & !j);elseif(!j) csij += csi - 1j;elseif(!i) csij += csij - 1;elsecsij += csi - 1j + csij - 1 - csi - 1j - 1;rept(i, n)rept(j, m)ho
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024成都師范學(xué)院輔導(dǎo)員招聘筆試真題
- 2025年抗肝片吸蟲(chóng)病藥合作協(xié)議書(shū)
- 2025年空氣和廢氣監(jiān)測(cè)儀器項(xiàng)目合作計(jì)劃書(shū)
- 2025年湖南省退役軍人事務(wù)廳下屬事業(yè)單位招聘考試筆試試題【答案】
- 2025年江西省農(nóng)業(yè)農(nóng)村廳下屬事業(yè)單位招聘考試筆試試題【答案】
- 2025年教師招聘考試教育綜合理論知識(shí)復(fù)習(xí)題庫(kù)(300題)【答案】
- 2025年印刷品、記錄媒介復(fù)制品合作協(xié)議書(shū)
- 項(xiàng)目投資管理制度 (一)
- 課堂教學(xué)效益年活動(dòng)開(kāi)展情況匯報(bào)
- 消防值班制度
- 2025江蘇省惠隆資產(chǎn)管理限公司招聘30人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 籍貫對(duì)照表完整版
- 2022年北京公共交通控股(集團(tuán))有限公司招聘筆試試題及答案解析
- 壓力管道基礎(chǔ)知識(shí)(管理類(lèi))
- 氣體滅火系統(tǒng)驗(yàn)收表1
- 新北師大版六年級(jí)上冊(cè)數(shù)學(xué)全冊(cè)教學(xué)課件
- DB1309T 256-2021 榆三節(jié)葉蜂綜合防治技術(shù)規(guī)程
- 土木工程概論全套課件完整版電子教案最新板
- 超星爾雅學(xué)習(xí)通《聲光影的內(nèi)心感動(dòng)電影視聽(tīng)語(yǔ)言(四川大學(xué))》章節(jié)測(cè)試答案
- 燃?xì)夤こ逃?jì)價(jià)規(guī)則及定額應(yīng)用
- 上教社深圳版小學(xué)英語(yǔ)1-6年級(jí)單詞匯總
評(píng)論
0/150
提交評(píng)論