end陣列記錄下模式串下標傳參需大於0因為同時也需要記錄是否為尾串。然後建好自動機。在query操作時,開個陣列標記下經過了哪些目標串,即mark下end陣列。
**如下
#include
#include
#include
#include
#include
#include
using
namespace std;
struct
tree
void
init
()void
insert
(char
*s,int idx)
end[p]=idx;
}void
build()}
while
(!q.
empty
())else}}
}bool used[
510];
intquery
(char
*s,int n,
int idx)
temp=fail[temp];}}
if(!flag)
return
false
;printf
("web %d:"
,idx);
for(
int i=
1;i<=n;i++)
if(used[i])
printf
(" %d"
,i);
printf("
\n");return
true;}
void
debug()}
};char str[
1000010
];tree
ac;int
main
() ac.
build
();int ans=0;
scanf
("%d"
,&m);
for(
int i=
0;iprintf
("total: %d\n"
,ans);
}}
hdu2896 病毒侵襲
剛剛看完ac自動兩天就發現了這道自動機的題目,這題不是很難,但是有幾個細節需要注意一下,首先 中的病毒型別不能重複,也就是說沒有可能出現兩個同樣的病毒,我的處理方法是利用set這樣的話判重和排序都省了,其次輸出的 編號和最終的病毒 數不是一樣的 我就是卡在這裡一直wa 爆棧的童鞋記得size是128...
HDU 2896 病毒侵襲
那什麼可見字元是坑爹的吧 include include include include include include include include include include include include include include include include include i...
hdu 2896 病毒侵襲
本題需要注意幾個方面 1 字元的範圍是可見的ascll碼字元,陣列要開到127。2 雖然題目的資料弱了,但是自己要考慮的周全。資料一 2 sherhe2 shesher答案 web 1 2 web 2 1 2 total 2資料二 2aaa 1aaaa答案 web 1 1 2 total 1 inc...