Cod sursa(job #2310308)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 31 decembrie 2018 09:44:28
Problema Trie Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.53 kb
#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;
}