Cod sursa(job #1898410)

Utilizator mihaiovMihai Iovescu mihaiov Data 2 martie 2017 00:03:43
Problema ADN Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.97 kb
#include <stdio.h>
#include <string.h>

#define MAX_LINES 18
#define MAX_LINE_LENGTH 30001
#define MIN(a,b) a < b ? a : b

unsigned char lines[MAX_LINES][MAX_LINE_LENGTH];
unsigned char lineSize[MAX_LINES];
unsigned short numberOfLines;
unsigned short index1;
unsigned int overlaps[MAX_LINES][MAX_LINES];

void calculateOverlaps();
int main()
{
    FILE *f = fopen( "adn.in", "r" );

    FILE *fout = fopen( "adn.out", "w" );

    fscanf(f,"%hu", &numberOfLines);

    for(index1 = 0; index1 < numberOfLines; ++index1)
    {
        fscanf(f, "%s", lines[index1]);
        lineSize[index1] = strlen(lines[index1]);
        fprintf(fout, "%s", lines[index1]);
        //printf("%s\n", lines[index1]);
    }

    calculateOverlaps();

    for(index1 = 0; index1 < numberOfLines; ++index1)
    {
        fprintf(f, "%s", lines[index1]);
    }

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

void calculateOverlaps()
{
    unsigned short i=0,j=0;

    for(; i < numberOfLines; ++i)
    {
        for(j = 0; j < numberOfLines; ++j)
        {
            if(i == j)
            {
                overlaps[i][j] = -2;
                //continue;
            }
            else{
            overlaps[i][j] = matchOverlap(lines[i], lines[j]);
            }
            //overlaps[j][i] = matchOverlap(lines[j], lines[i]);

            //printf("%d ", overlaps[i][j]);
        }
        //printf("\n");
    }
}

int matchOverlap(char const * const firstString, char const * const secondString)
{
    int firstStringSize = strlen(firstString);
    int secondStringSize = strlen(secondString);
    int counter = 0;

    int i=0;
    for(; i< firstStringSize-1; i++)
    {
        if(memcmp(&firstString[i], secondString, MIN(firstStringSize-i, secondStringSize)) == 0)
        {
            //printf("%s %s %d\n", &firstString[i], secondString, MIN(firstStringSize-i-1, secondStringSize));
            return i;
        }
    }
    return -1;
}