题目描述
送给喜欢用指针的小伙伴
这题难点在于,如何把二维数组化为一维数据保存。(所以链表一点要会)
C++ 代码
#include<iostream>
using namespace std;
typedef long long int large;
const large maxn=1e5+5;
struct stu
{
int pt[26]; //保存当前对应字母在数据中的位置
int f=0;
};
stu a[maxn];
large toil=0; //当前树中所有字母的个数
void ins(char *ch)
{
large i=0,p=0; //当前ch[i]在tree[]中的位置,若没有,在数组的最后方增加,并保存位置。
while(ch[i])
{
int x=ch[i]-'a';
if(!a[p].pt[x])
a[p].pt[x]=++len;
p=a[p].pt[x];
i++;
}
a[p].f++; //标记
}
large inint(char *ch)
{
large i=0,p=0;
while(ch[i])
{
int x=ch[i]-'a';
if(a[p].pt[x]==0)
return 0;
p=a[p].pt[x];
i++;
}
return a[p].f;
}
int main()
{
ios::sync_with_stdio(false);
large n;
cin>>n;
while(n--)
{
char c[2],ch[maxn];
cin>>c>>ch;
if(*c=='I')
ins(ch);
else
cout<<inint(ch)<<endl;
}
}