Pagini recente » Cod sursa (job #872627) | Cod sursa (job #2782621) | Cod sursa (job #1482599) | Cod sursa (job #555323) | Cod sursa (job #2310308)
#include <fstream>
using namespace std;
ifstream fin("trie.in");
ofstream fout("trie.out");
const int MOD=3000017;
short int f[MOD];
int k[MOD];
int add(int a,int b)
{
a+=b;
if(a>=MOD)
{
a-=MOD;
}
if(a<0)
{
a+=MOD;
}
return a;
}
int mul(int a,int b)
{
return a*(long long)b%MOD;
}
int t;
string s;
int h[25],p[25];
int main()
{
p[0]=1;
for(int i=1;i<25;i++)
{
p[i]=mul(p[i-1],26);
}
while(fin>>t>>s)
{
int n=s.size();
for(int i=0;i<n;i++)
{
h[i]=mul(p[i],s[i]-'a');
if(i>0)
{
h[i]=add(h[i],h[i-1]);
}
}
if(t==0)
{
for(int i=0;i<n;i++)
{
k[h[i]]++;
}
f[h[n-1]]++;
}
if(t==1)
{
for(int i=0;i<n;i++)
{
k[h[i]]--;
}
f[h[n-1]]--;
}
if(t==2)
{
fout<<f[h[n-1]]<<"\n";
}
if(t==3)
{
int res=0;
for(int i=0;i<n;i++)
{
if(k[h[i]])
{
res=i+1;
}
}
fout<<res<<"\n";
}
continue;
fout<<t<<"\t";
for(int i=0;i<n;i++)
{
fout<<h[i]<<" ";
}
fout<<"\n";
}
return 0;
}