Cod sursa(job #1482454)

Utilizator aaron72Armand Ioan Anusca Popa aaron72 Data 7 septembrie 2015 11:24:50
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <bits/stdc++.h>
#define modulo 370003

using namespace std;

vector <long long> h[modulo+1];
char s[10000005];
int lung;

inline void Adauga(long long x)
{
    int r;
    unsigned i;
    r=x%modulo;
    for(i=0;i<h[r].size();i++)
        if(h[r][i]==x) return;
    h[r].push_back(x);
}

inline int Cautare(long long x)
{
    int r;
    unsigned i;
    r=x%modulo;
    for(i=0;i<h[r].size();i++)
        if(h[r][i]==x) return 1;
    return 0;
}

inline void Citire()
{
    int i;
    long long aux;
    char t[25];
    ifstream fin("abc2.in");
    fin>>s;
    fin>>t;
    lung=strlen(t);
    aux=0;
    for(i=0;i<lung;i++)
        aux=aux*3+(t[i]-'a'+1);
    Adauga(aux);
    while(fin>>t)
    {
        aux=0;
        for(i=0;i<lung;i++)
            aux=aux*3+(t[i]-'a'+1);
        Adauga(aux);
    }
    fin.close();
}

inline void Rezolva()
{
    int i,cnt;
    long long aux,L=1;
    for(i=1;i<lung;i++)
        L*=3;
    aux=0;
    for(i=0;i<lung;i++)
        aux=aux*3+(s[i]-'a'+1);
    cnt=0;
    cnt+=Cautare(aux);
    for(i=lung;s[i];i++)
    {
        aux=(aux-L*(s[i-lung]-'a'+1))*3 + (s[i]-'a'+1);
        cout<<aux<<"\n";
        cnt+=Cautare(aux);
    }
    ofstream fout("abc2.out");
    fout<<cnt<<"\n";
    fout.close();
}

int main()
{
    Citire();
    Rezolva();
    return 0;
}