Cod sursa(job #2043286)

Utilizator AndreosAndrei Otetea Andreos Data 19 octombrie 2017 20:31:14
Problema Hashuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.51 kb
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstring>

using namespace std;
const int NMAX=220005;
const int M=666013;
struct WORD
{
    char a[15],b[15];
};
vector <WORD> TA[M+5];
char s[NMAX];
int h(char *s)
{
	int a=0,base=128;
	for( ;*s;++s)
        a=(a*base+(*s))%M;
	return a;
}
int main()
{
    freopen("dictionar.in","r",stdin);
    freopen("dictionar.out","w",stdout);
    int n,i,add,ns,nc,j;
    WORD temp;
    char c1[15],c2[15];
    gets(s);
    scanf("%d\n",&n);
    for(i=1;i<=n;++i)
    {
        scanf("%s %s\n",&c1,&c2);
        add=h(c1);
        strcpy(temp.a,c1);
        strcpy(temp.b,c2);
        TA[add].push_back(temp);
    }
    int nsp=0;
    ns=strlen(s);
    for(i=0;i<ns;++i)
        if(s[i]==' ')
            nsp++;
    printf("%d\n",nsp+1);
    nc=0;
    for(i=0;i<ns-1;++i)
    {
        if(s[i]==' ')
        {
            c1[nc]=NULL;
            add=h(c1);
            for(j=0;j<TA[add].size();++j)
            {
                if(strcmp(TA[add][j].a,c1)==0)
                {
                    printf("%s ",TA[add][j].b);
                    break;
                }
            }
            nc=0;
        }
        else
        {
             c1[nc]=s[i];
             nc++;
        }
    }
    c1[nc]=NULL;
    add=h(c1);
    for(j=0;j<TA[add].size();++j)
    {
        if(strcmp(TA[add][j].a,c1)==0)
        {
            printf("%s.",TA[add][j].b);
            break;
        }
    }
    return 0;
}