有一個字串,長度在1000000以內,求它最大的鏈節個數,即把s表示成s'+s'+s'······。求s'的個數。用KMP的思想,求出next數組,然後可以用手畫方法發現從next[length(s)]到length(s)間的字串可以不斷向前推,只要這個長度能被總長度整除,它就是最大鏈節長度,否則就是1.View Code 1 program pku2406(input,output); 2 var 3 i,j : longint; 4 s : ansistring;
有三維座標中的16個點,然後又有若干點,求每一個點和前16個點中哪個更近。View Code 1 program pku1046(input,output); 2 type 3 node = record 4 x,y,z : longint; 5 end; 6 const 7 oo = 10000000; 8 var 9 color : array[1..16] of node;10 now : node;11
有一個長度不超過400000的字串s,求滿足{既是s的首碼,又是s的尾碼}的字串,輸出每一個串的起始位置。首先,它本身滿足條件,接下來,用KMP求出next數組,每次去掉next[i]到i的一段字元,剩餘字串仍滿足條件,直到找到頭為止。View Code 1 program pku2752(input,output); 2 var 3 s : ansistring; 4 next : array[0..500000] of longint; 5
這道題需要涉及到置換群的知識,只需知道一個定理。最小交換次數=元素個數-環的個數。View Code 1 program pku1674(input,output); 2 var 3 number :array[0..11000] of integer; 4 v :array[0..11000] of boolean; 5 n,cases:longint; 6 answer :longint; 7 procedure init; 8 var 9
求一個圖中到其他點的最短路的最大值最小的點和這個值。floyd一遍完事View Code 1 program pku1125(input,output); 2 var 3 f:array[0..300,0..300] of longint; 4 n:longint; 5 procedure init; 6 var 7 i,j,s,x,y:longint; 8 begin 9 fillchar(f,sizeof(f),30);10 for i:=1 to
題意略過,把棋盤上點交叉黑白染色,壞點為-1,則每個騎士在合理跳躍的前提下總會跳到一個不同顏色的點,我們把這兩個點連邊,問題轉化為最大獨立子集問題,用匈牙利最大資料0.39水過,第9個點用cena暴棧,但是直接運行沒有問題,囧View Code 1 program knight(input,output); 2 type 3 node = ^link; 4 link = record 5 goal : longint; 6
給一個n個頂點的圖(怎麼最近的隨筆都拿這句話開頭^_^),Q條詢問,(x,y),查詢從x到y的路徑上的最大邊的最小值。(Q<=40000)最大最小問題99%都是二分答案,這道題卻偏偏是那1%.用floyd,最後的關鍵語句變成f[i,j]=min(f[i,j],max(f[i,k],f[k,j]))即可。演算法執行後f[i,j]就是問題(i,j)的答案。View Code 1 program pku3615(input,output); 2 var 3 f : array[0..