Cod sursa(job #1201044)

Utilizator adrianbercaBerca Adrian adrianberca Data 24 iunie 2014 13:20:51
Problema Potrivirea sirurilor Scor 14
Compilator c Status done
Runda Arhiva educationala Marime 1.65 kb

//Se dau 2 siruri. De cate ori apare sirul al doilea, rasturnat, in primul sir
#include <stdio.h>
#include <stdlib.h>
char sir [2000003],subsir[2000003];
int nraparitii[2000003];
FILE *f,*g;
int main ()
{
f = fopen("strmatch.in","r");
g = fopen("strmatch.out","w");
int k=0,i = 0,n1 = 0,j = 0,n2 = 0,x = 0;

     while(fscanf(f,"%c",&subsir[j])==1)
    {
        if(subsir[j]=='\n')
            break;
        else
            j++;
    }
    n2 = j;

    while(fscanf(f,"%c",&sir[i])==1 )
    {
       if(sir[i] == '\n')
            break;
        i++;
    }
    n1 = i;

    for(j = 0;j<=n2;j++)
    {
        for(i = 0;i <= n1;i++)
        {
         if(subsir[j]=='\n')//daca a gasit vreo potrivire pana la final
         {
           nraparitii[k]=i-n2;//pozitia in care sirul se potriveste peste subsir - lungimea sirului n2
           k++;
           if(n2<2)//daca subsirul are doar un singur caracter
            i = i-1;//se da in spate doar o data
           else
           i = i-2;//pentru a putea lua si ultima litera din solutia sa o verifice cu urmatoarele 2 sa vada daca mai avem o solutie
         }

         if(subsir[j]==sir[i])//daca se gaseste prima litera din subsir sa coincida cu vreuna din sir
                j++;//trece la urmatoarea litere din subsir si la urmatoarea litera din sir
         else j=0;//altfel se incepe din nou din subsir iar in sir se continua de une s-a ramas
        }
    break;

    }
    fprintf(g,"%d\n",k);
    for(i = 0;i <k ;i++)
    {
        if(k>=1000)
            break;

      fprintf(g,"%d\t",nraparitii[i]);
    }


    fclose(f);
    fclose(g);
    return 0;
}