HDU 1381 Crazy Search

 题目出处 http://acm.hdu.edu.cn/showproblem.php?pid=1381

此题典型的键值对计数,使用Map容器即可。

map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。

STL的map的底层实现是红黑树,STL的红黑树实现中维护了一个node_count之类的簿记变量,用以计算节点数。

 1 #include <iostream>
 2 #include <map>
 3 #include <string>
 4 using namespace std;
 5 map<string, int> MC;
 6 int main()
 7 {
 8     int T,N, NC;
 9     string test;
10     cin>>T;
11     while( T--)
12     {
13         cin>>N>>NC>>test;
14         MC.clear();
15         const int length = test.size(); // 记录输入字符串长度 
16         for(int i=0;i<length-N+1;i++)
17         {
18                 string tmp(test,i,N);   //截取子串
19                 if(MC.count(tmp)==0) ++MC[tmp];   //将key(tmp)所对应的值增加计数
20         }
21         cout<<MC.size()<<endl;  // 输出map中不重复的键的个数,也就是map的size
22     }
23     return 0;
24 }