當太陽的光輝逐漸被月亮遮蔽,世界失去了光明,大地迎來最黑暗的時刻。。。。在這樣的時刻,人們卻異常興奮——我們能在有生之年看到500年一遇的世界奇觀,那是多麼幸福的事兒啊~~
但網路上總有那麼些**,開始藉著民眾的好奇心,打著介紹日食的旗號,大肆傳播病毒。小t不幸成為受害者之一。小t如此生氣,他決定要把世界上所有帶病毒的**都找出來。當然,誰都知道這是不可能的。小t卻執意要完成這不能的任務,他說:「子子孫孫無窮匱也!」(愚公後繼有人了)。
萬事開頭難,小t收集了好多病毒的特徵碼,又收集了一批詭異**的原始碼,他想知道這些**中哪些是有病毒的,又是帶了怎樣的病毒呢?順便還想知道他到底收集了多少帶病毒的**。這時候他卻不知道何從下手了。所以想請大家幫幫忙。小t又是個急性子哦,所以解決問題越快越好哦~~
input第一行,乙個整數n(1<=n<=500),表示病毒特徵碼的個數。
接下來n行,每行表示乙個病毒特徵碼,特徵碼字串長度在20—200之間。
每個病毒都有乙個編號,依此為1—n。
不同編號的病毒特徵碼不會相同。
在這之後一行,有乙個整數m(1<=m<=1000),表示**數。
接下來m行,每行表示乙個**原始碼,原始碼字串長度在7000—10000之間。
每個**都有乙個編號,依此為1—m。
以上字串中字元都是ascii碼可見字元(不包括回車)。
output依次按如下格式輸出按**編號從小到大輸出,帶病毒的**編號和包含病毒編號,每行乙個含毒**資訊。
web **編號: 病毒編號 病毒編號 …
冒號後有乙個空格,病毒編號按從小到大排列,兩個病毒編號之間用乙個空格隔開,如果乙個**包含病毒,病毒數不會超過3個。
最後一行輸出統計資訊,如下格式
total: 帶病毒**數
冒號後有乙個空格。
sample input
3sample outputaaabbb
ccc2
aaabbbccc
bbaacc
web 1: 1 2 3題解:total: 1
就跑一遍ac自動機**就完了,比起原板子題keywords search hdu - 2222就改了一點
ac自動機**詳解看keywords search hdu - 2222
**:
1/*2**中:
3葉節點:代表此節點下沒有子節點
4根節點:就是樹的根
5子節點:就是這個節點的直接相連的節點(直系節點)67
此**:
8用題目所給模式串構成一顆字典樹
9然後找出來給出的待求串中每種模式串出現幾次
1011
121.題目中的字元是除去回車的ascii碼可見字元(95個),我最開始定義的是以全部的ascii碼的個數(128)為基準的
132.輸出要排序後再輸出
14*/
15 #include16 #include17 #include
18 #include19 #include20
using
namespace
std;
21const
int maxn=30000000
;22 typedef long
long
ll;23
int visit[maxn],length[1005
];24
int v[1005][1005
],n,m;
25struct
trie
2635 ends[l++]=0;36
return l-1;37
}38void init() //
建立根節點
3943
void inserts(char s,int x) //
往字典樹裡面插入新字串
4453 ends[now]=x;54}
55void
build()
5665
else
6670}71
while(!r.empty())
7282
else
8387}88
}89}90
void query(char s,int
x)91
105 temp=fail[temp];
106}
107}
108}
109};
110char
s[maxn];
111trie ac;
112void
init()
113118
for(int i=1; i<=n; ++i)
119 length[i]=0
;120
}121
122int
main()
123131 scanf("
%d",&m);
132ac.build();
133int ans=0
;134
for(int i=1; i<=m; ++i)
135149
}150
}151 printf("
total: %d\n
",ans);
152return0;
153 }
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...