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 }

 

你可能感兴趣的:(search)