Pagini recente » Cod sursa (job #1565521) | Cod sursa (job #37639) | Cod sursa (job #2826870) | Cod sursa (job #2879521) | Cod sursa (job #418072)
Cod sursa(job #418072)
#include <cstdio>
#include <cstring>
int lungime,total,k,dict = -1,count,tmp;
char string[10000001],subsir[21],c;
typedef char cuvinte[21];
cuvinte dictionar[50001];
FILE * in = fopen("abc2.in","rt");
FILE * out = fopen("abc2.out","wt");
int check(int k);
int main()
{
int i;
total = -1;
while(c != '\n')
{
fscanf(in,"%c",&c);
string[++total] = c;
}
total = 0;
fscanf(in,"%c",&c); // pentru caracterul \n
fscanf(in,"%c",&c); // pentru prima litera ca sa intre in while (line 29)
lungime = strlen(string);
while(!feof(in))
{
//fscanf(in,"%s",subsir);
while(c != '\n' && !feof(in))
{
subsir[++dict] = c;
fscanf(in,"%c",&c);
}
for(i=1;i<=total;i++)
if(!strcmp(subsir,dictionar[i]))
tmp = 1;
if(!tmp) // daca e un cuvant nou in dictionar
strcpy(dictionar[++total],subsir);
dict = -1;
fscanf(in,"%c",&c); // ca sa intre in while (line 29)
}
dict = strlen(dictionar[1]);
/*printf("%s\n",string);
for(i=1;i<=total;i++)
printf("%s\n",dictionar[i]);*/
lungime-=dict;
for(i=0;i<=lungime;i++)
count+=check(i);
fprintf(out,"%d",count);
return (0);
}
int check(int k)
{
int e,i,t,answer = 0,pozitie = -1;
t = k + dict;
//for(e=k;e<i;e++)
//subsir[e-k] = string[e];
//printf("%s\n",subsir);
for(e=1;e<=total;e++)
for(i=k;i<t;i++)
{
if(string[i] != dictionar[e][++pozitie])
{
pozitie = -1;
break;
}
if(i == t - 1)
answer++;
}
//memset(subsir,0,dict);
return answer;
}