锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
浠婂ぉ鍦╲ijos鏈変漢闂垜trie鏍戞庝箞寮勩傜儲鎬у氨鍐欒緇嗙偣錛岃浼楀鏂版墜鍙傝冧竴涓嬨?br>Trie鏍戝氨鏄瓧絎︽爲錛屽叾鏍稿績鎬濇兂灝辨槸絀洪棿鎹㈡椂闂淬?br>涓句釜綆鍗曠殑渚嬪瓙銆?br>緇欎綘100000涓暱搴︿笉瓚呰繃10鐨勫崟璇嶃傚浜庢瘡涓涓崟璇嶏紝鎴戜滑瑕佸垽鏂粬鍑烘病鍑虹幇榪囷紝濡傛灉鍑虹幇浜嗭紝絎竴嬈″嚭鐜扮鍑犱釜浣嶇疆銆?br>榪欓褰撶劧鍙互鐢╤ash鏉ワ紝浣嗘槸鎴戣浠嬬粛鐨勬槸trie鏍戙傚湪鏌愪簺鏂歸潰瀹冪殑鐢ㄩ旀洿澶с傛瘮濡傝瀵逛簬鏌愪竴涓崟璇嶏紝鎴戣璇㈤棶瀹冪殑鍓嶇紑鏄惁鍑虹幇榪囥傝繖鏍穐ash灝變笉濂芥悶浜嗭紝鑰岀敤trie榪樻槸寰堢畝鍗曘?br>鐜板湪鍥炲埌渚嬪瓙涓紝濡傛灉鎴戜滑鐢ㄦ渶鍌葷殑鏂規硶錛屽浜庢瘡涓涓崟璇嶏紝鎴戜滑閮借鍘繪煡鎵懼畠鍓嶉潰鐨勫崟璇嶄腑鏄惁鏈夊畠銆傞偅涔堣繖涓畻娉曠殑澶嶆潅搴﹀氨鏄疧(n^2)銆傛樉鐒跺浜?00000鐨勮寖鍥撮毦浠ユ帴鍙椼傜幇鍦ㄦ垜浠崲涓濊礬鎯熾傚亣璁炬垜瑕佹煡璇㈢殑鍗曡瘝鏄痑bcd錛岄偅涔堝湪浠栧墠闈㈢殑鍗曡瘝涓紝浠錛宑錛宒錛宖涔嬬被寮澶寸殑鎴戞樉鐒朵笉蹇呰冭檻銆傝屽彧瑕佹壘浠寮澶寸殑涓槸鍚﹀瓨鍦╝bcd灝卞彲浠ヤ簡銆傚悓鏍風殑錛屽湪浠寮澶翠腑鐨勫崟璇嶄腑錛屾垜浠彧瑕佽冭檻浠浣滀負絎簩涓瓧姣嶇殑……榪欐牱涓涓爲鐨勬ā鍨嬪氨娓愭笎娓呮櫚浜?#8230;…
鍋囪鏈塨錛宎bc錛宎bd錛宐cd錛宎bcd錛宔fg錛宧ii榪?涓崟璇嶏紝鎴戜滑鏋勫緩鐨勬爲灝辨槸榪欐牱鐨勩?br>
瀵逛簬姣忎竴涓妭鐐癸紝浠庢牴閬嶅巻鍒頒粬鐨勮繃紼嬪氨鏄竴涓崟璇嶏紝濡傛灉榪欎釜鑺傜偣琚爣璁頒負綰㈣壊錛屽氨琛ㄧず榪欎釜鍗曡瘝瀛樺湪錛屽惁鍒欎笉瀛樺湪銆?br>閭d箞錛屽浜庝竴涓崟璇嶏紝鎴戝彧瑕侀『鐫浠栦粠璺熻蛋鍒板搴旂殑鑺傜偣錛屽啀鐪嬭繖涓妭鐐規槸鍚﹁鏍囪涓虹孩鑹插氨鍙互鐭ラ亾瀹冩槸鍚﹀嚭鐜拌繃浜嗐傛妸榪欎釜鑺傜偣鏍囪涓虹孩鑹詫紝灝辯浉褰撲簬鎻掑叆浜嗚繖涓崟璇嶃?br>榪欐牱涓鏉ユ垜浠闂拰鎻掑叆鍙互涓璧峰畬鎴愶紝鎵鐢ㄦ椂闂翠粎浠呬負鍗曡瘝闀垮害錛屽湪榪欎竴涓牱渚嬶紝渚挎槸10銆?br>鎴戜滑鍙互鐪嬪埌錛宼rie鏍戞瘡涓灞傜殑鑺傜偣鏁版槸26^i綰у埆鐨勩傛墍浠ヤ負浜嗚妭鐪佺┖闂淬傛垜浠敤鍔ㄦ侀摼琛紝鎴栬呯敤鏁扮粍鏉ユā鎷熷姩鎬併傜┖闂寸殑鑺辮垂錛屼笉浼氳秴榪囧崟璇嶆暟×鍗曡瘝闀垮害銆?br>紼嬪簭闈炲父濂藉疄鐜幫紝鍖哄尯鍑犺錛屾垜灝變笉鍐欎簡錛岃嚜宸辯悽紓ㄥ惂銆?br>濡傛灉榪樻槸涓嶆噦璇風暀璦銆?br>
涓嬮潰鎻愪緵涓涓煡鎵懼崟璇嶆槸鍚﹀湪緇欏畾鐨勫瓧鍏鎬腑鐨勬爣紼嬶細
program trie;
type
rec=record
Got:boolean;
next:array['a'..'z'] of Longint;
end;
var
n,i,j,Now,Tn:Longint;
s:string;
T:array[1..1000] of rec;
flag:boolean;
begin
Readln(n);
Tn:=1;
T[1].Got:=False;
fillchar(T[1].next,sizeof(T[1].next),0);
for i:=1 to n do
begin
readln(s);
Now:=1;
for j:=1 to length(s) do
if T[now].Next[s[j]]<>0 then now:=t[now].next[s[j]] else
begin
Inc(Tn);
T[tn].Got:=false;
fillchar(T[tn].next,sizeof(T[tn].next),0);
T[Now].next[s[j]]:=Tn;
Now:=Tn;
end;
T[now].Got:=true;
end;
readln(s);
while s<>'exit' do
begin
Now:=1;flag:=true;
for j:=1 to length(s) do
if T[now].Next[s[j]]<>0 then now:=t[now].next[s[j]] else
begin
flag:=false;
break;
end;
if flag then
if T[now].Got=false then flag:=false;
if flag then writeln('the word is in the tree') else
writeln('can''t find it!');
Readln(s);
end;
end.
涓涓崟璇嶅墠緙鏍戠殑棰橈紝浣嗘槸鎴戝嵈鐢╰rie鏍?bm綆楁硶綆鍖栫増鍋氱殑
瀵嗙爜鐮磋瘧
銆愰棶棰樻弿榪般?br>鐢變簬鏈榪戝姛璇捐繃浜庣箒蹇欙紝Tim绔熺劧蹇樿浜嗚嚜宸辯數鑴戠殑瀵嗙爜錛屽垢榪愮殑鏄疶im鍦ㄨ璁$數鑴戝瘑鐮佺殑鏃跺欙紝鐢ㄤ簡涓涓潪甯哥壒孌婄殑鏂規硶璁板綍涓嬩簡瀵嗙爜銆傝繖涓柟娉曟槸錛歍im鎶婂瘑鐮佸拰鍏跺畠鐨勪竴浜涘亣瀵嗙爜鍏卞悓璁板綍鍦ㄤ簡涓涓湰瀛愪笂闈€備負浜嗚兘澶熶粠榪欎簺瀛楃涓蹭腑鎵懼嚭姝g‘鐨勫瘑鐮侊紝Tim鍙堝湪鍙﹀涓涓湰瀛愪笂闈㈠啓浜嗕竴涓緢闀跨殑瀛楃涓詫紝鑰屾紜殑瀵嗙爜灝辨槸鍦ㄨ繖涓瓧絎︿覆涓嚭鐜版鏁版渶澶氱殑涓涓瘑鐮併備緥濡備覆ababa錛屽亣鑻ュ瘑鐮佹槸abab鍜宎ba錛岄偅涔堟紜殑瀵嗙爜鏄痑ba錛屽洜涓篴ba鍦ㄨ繖涓瓧絎︿覆涓嚭鐜頒簡2嬈°?br>鐜板湪浣犲緱鍒頒簡Tim鐨勮繖涓や釜鏈瓙錛屽笇鏈涗綘鑳藉緙栧啓涓涓▼搴忓府鍔㏕im鎵懼嚭姝g‘鐨勫瘑鐮併?br>銆愯緭鍏ャ?br>杈撳叆鐢變袱涓儴鍒嗙粍鎴愩傚叾涓涓閮ㄥ垎鐢辮嫢騫茶緇勬垚錛屾瘡涓琛岃褰曚簡涓涓瘑鐮侊紝瀵嗙爜鐨勫潎闀垮害灝忎簬絳変簬255浣嶏紝騫朵笖閮界敱灝忓啓瀛楁瘝緇勬垚銆傜劧鍚庝竴涓┖琛岋紝絎簩閮ㄥ垎璁板綍浜嗕竴涓緢闀跨殑瀛楃涓詫紝騫朵笖浠?#8217;.’緇撴潫錛屽叾涓彧鍖呭惈浜嗗皬鍐欏瓧姣嶃?br>
銆愯緭鍑恒?br>杈撳嚭鏂囦歡鍚嶄負Pass.out銆傝緭鍑烘枃浠剁敱浠呮湁涓琛岋紝涓轟竴涓暣鏁幫紝琛ㄧず姝g‘瀵嗙爜鍦ㄥ瓧絎︿覆涓嚭鐜扮殑嬈℃暟銆傚鏋滆繖涓嚭鐜版鏁頒負0錛岃緭鍑?#8220;No find”銆?br>
銆愭牱渚嬨戯細
Pass.in Pass.out
ab 6
abc
bdc
abcd
abcabcabcdbdabcbabdbcabdbdbdbd.
program pass;
const
filein='pass.in';
fileout='pass.out';
type
rec=record
which:Longint;
Next:array['a'..'z'] of Longint;
end;
var
o,now,i,Tn,Dn,temp,Ans:Longint;
s:string;
c:char;
T:array[1..1000000] of REc;
data:array[1..5000] of string;
dLong:array[1..5000] of longint;
use:array[1..5000] of boolean;
d:array[1..3000000] of char;
Appear:array['a'..'z'] of Longint;
Long:Longint;
f:boolean;
function Compare(x:Longint):Longint;
var
s,i,Now,L,temp:Longint;
begin
s:=0;
fillchar(appear,sizeof(appear),0);
L:=length(data[x]);
for i:=1 to L do
Appear[data[x][i]]:=i;
Now:=L;
while NOw<=Long do
begin
if D[now]<>data[x][L] then Inc(now,L-Appear[D[now]]) else
begin
temp:=L-1;
while (temp>0) and (Data[x][temp]=d[Now-(L-temp)]) do dec(temp);
if temp=0 then Inc(s);
Inc(Now);
end;
end;
Compare:=S;
end;
procedure sort(l,r:Longint);
var
i,j,x:Longint;
sy:string;
ly:Longint;
begin
i:=l;j:=r;x:=dLong[(l+r) div 2];
repeat
while dLong[i]<x do inc(i);
while dlong[j]>x do dec(j);
if i<=j then
begin
sy:=data[i];
data[i]:=data[j];
data[j]:=sy;
ly:=dlong[i];
dlong[i]:=dlong[j];
dlong[j]:=ly;
inc(i);
dec(j);
end;
until i>j;
if i<r then sort(i,r);
if j>l then sort(l,j);
end;
begin
fillchar(use,sizeof(use),true);
fillchar(t,sizeof(t),0);
Assign(input,filein);
Assign(output,fileout);
rewrite(output);
reset(input);
tn:=1;
readln(s);
Dn:=0;
while s<>'' do
begin
Inc(dn);
data[dn]:=s;
dLong[dn]:=length(s);
readln(s);
end;
sort(1,Dn);
for o:=1 to Dn do
begin
s:=data[o];
NOw:=1;
f:=true;
for i:=1 to Length(s) do
if t[now].Next[s[i]]<>0 then
begin
Now:=t[now].next[s[i]];
if t[now].which<>0 then
begin
f:=false;
break
end;
end else
begin
Inc(tn);
t[now].next[s[i]]:=tn;
now:=tn;
end;
if f then t[now].which:=o;
if not f then use[o]:=false;
end;
Long:=0;
repeat
read(c);
if c<>'.' then
begin
Inc(Long);
d[Long]:=c;
end;
until c='.';
for i:=1 to Dn do
begin
if use[i] then
begin
temp:=Compare(i);
if temp>ans then ans:=temp;
end;
end;
if ans=0 then writeln('No find') else
writeln(Ans);
close(input);
close(output);
end.
]]>
43
42
41
40
39
38
37
(-1,-1)錛?鐨勫潗鏍囦負錛?錛?錛夛紝3鐨勫潗鏍囦負錛?錛?錛夈傜紪紼嬪疄鐜拌緭鍏ヤ換鎰忎竴鐐瑰潗鏍囷紙x,y錛夛紝杈撳嚭鎵瀵瑰簲鐨勬暟瀛椼?/p>
// 瑙g瓟
鍚堝茍綆楁硶鐨勫悎騫舵鏁版槸涓涓潪甯擱噸瑕佺殑閲?鏍規嵁璁$畻褰撴暟緇勪腑鏈?鍒?涓厓绱犳椂,鍚堝茍嬈℃暟鏄?嬈?褰撴湁5鍒?涓厓绱犳椂,鍚堝茍嬈℃暟鏄?嬈?褰撴湁9鍒?6涓厓绱犳椂,鍚堝茍嬈℃暟鏄?嬈★紝鎸夌収榪欎竴瑙勫緥,褰撴湁N涓瓙搴忓垪鏃跺彲浠ユ帹鏂嚭鍚堝茍鐨勬鏁版槸X(2 >=N,絎﹀悎姝ゆ潯浠剁殑鏈灝忛偅涓猉)銆? 婧愮▼搴忥細 program hebing; const n=10; var a:array[1..n] of integer; i:integer; procedure init; var i:integer; begin for i:=1 to n do read(a[i]); readln; end; procedure merge(low,mid,high:integer); var h,i,j,k:integer; b:array[1..n] of integer; begin h:=low; i:=low; j:=mid+1; while (h<=mid) and (j<=high) do begin if (a[h]<=a[j]) then begin b[i]:=a[h]; h:=h+1; end else begin b[i]:=a[j]; j:=j+1; end; i:=i+1; end; if h>mid then for k:=j to high do begin b[i]:=a[k]; i:=i+1; end else for k:=h to mid do begin b[i]:=a[k]; i:=i+1; end; for k:=low to high do a[k]:=b[k]; end; procedure mergesort(low,high:integer); var mid:integer; begin if low<high then begin mid:=(low+high) div 2; mergesort(low,mid); mergesort(mid+1,high); merge(low,mid,high); end; end;
]]>
鏁e垪鏂規硶鏄嬌鐢ㄥ嚱鏁癶ash灝哢鏄犲皠鍒拌〃T[0..m-1]鐨勪笅鏍囦笂錛坢=O(|U|)錛夈傝繖鏍蜂互U涓叧閿瓧涓鴻嚜鍙橀噺錛屼互h涓哄嚱鏁扮殑榪愮畻緇撴灉灝辨槸鐩稿簲緇撶偣鐨勫瓨鍌ㄥ湴鍧銆備粠鑰岃揪鍒板湪O(1)鏃墮棿鍐呭氨鍙畬鎴愭煡鎵俱?
鈥︹?
闃呰鍏ㄦ枃
]]>
]]>
鐮旂┒鍙戠幇璐ㄦ暟闄?浠ュ閮芥槸濂囨暟錛岃屽鏁伴櫎浜嗐愬鏁?濂囨暟銆?鎴栧啀鍔犫?濂囨暟鈥濓級閮芥槸璐ㄦ暟銆傞偅涔堢敤璁$畻鏈哄厛鎶娿愬鏁?濂囨暟銆?鎴栧啀鍔犫?濂囨暟鈥濓級錛堟瘮濡?錛?5錛?1錛?5錛?7錛?3錛?5錛?9鈥︹︼級閮芥眰鍑烘潵錛屽啀鎵懼鏁頒腑涓婇潰娌℃彁鍒扮殑閭d簺鏁幫紝閭d簺鏁板氨鏄礌鏁般?
鏈夎繎浼煎叕寮忥細 x 浠ュ唴璐ㄦ暟涓暟綰︾瓑浜?x / ln(x) .ln鏄嚜鐒跺鏁扮殑鎰忔濄傚噯紜殑璐ㄦ暟鍏紡灝氭湭緇欏嚭銆?0 浠ュ唴鍏?4 涓川鏁般?00 浠ュ唴鍏?25 涓川鏁般?
鈥︹?
闃呰鍏ㄦ枃
]]>
鏂規硶2錛氬驚鐜腑鐩存帴璁$畻1鐨勬暟閲?
鏂規硶3錛氬茍琛岃綆楃殑
PS錛?
榪欎簺鏂規硶鏄綆椾簩榪涘埗褰㈠紡1鐨勪釜鏁幫紝濡傛灉鐢ㄦ潵鍒ゆ柇涓涓暟鏄惁鏄?鐨勬暣鏁版騫傦紝鍙互鐢ㄨ繖浜涙柟娉曪紝浣嗘槸瀵規榪樻湁鏇村ソ鐨勬柟娉曪紝灝辨槸 A xor (A-1) == 0銆?
闃呰鍏ㄦ枃
]]>
1銆佷粠鍓╀綑鐨勭墿鍝佷腑錛岄夊嚭鍙互瑁呭叆鑳屽寘鐨勪環鍊兼渶澶х殑鐗╁搧銆傚埄鐢ㄨ繖縐嶈鍒欙紝浠峰兼渶澶х殑鐗╁搧棣栧厛琚鍏ワ紙鍋囪鏈夎凍澶熷閲忥級錛岀劧鍚庢槸涓嬩竴涓環鍊兼渶澶х殑鐗╁搧錛屽姝ょ戶緇笅鍘匯傝繖縐嶇瓥鐣ヤ笉鑳戒繚璇佸緱鍒版渶浼樿В銆備緥濡傦紝n=2, weight=[100, 10, 10], prize=[20, 15, 15], count=105銆傚綋鍒╃敤浠峰艱椽濠噯鍒欐椂錛岃幏寰楃殑瑙d負x= [1, 0, 0]錛岃繖縐嶆柟妗堢殑鎬諱環鍊間負20銆傝屾渶浼樿В涓篬0, 1, 1]錛屽叾鎬諱環鍊間負30銆?
鈥︹?
闃呰鍏ㄦ枃
]]>