Cod sursa(job #1678477)

Utilizator experiment322Alexandru-Damian Manea experiment322 Data 7 aprilie 2016 12:45:51
Problema Potrivirea sirurilor Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.81 kb
#include <stdio.h>
#include <string.h>

enum {
	MAXPRINTS = 1000,
	MAXLEN = 2000001
};

static char a[MAXLEN], b[MAXLEN];
static int alen, blen, matchno, matches[MAXLEN];

static void Read(void)
{
	scanf("%s%s", a, b);
	alen = (int)strlen(a);
	blen = (int)strlen(b);
}

static void FindMatches(void)
{
	int i;
	for (i = 0; i <= blen - alen; ++i) {
		if (a[0] == b[i] && a[alen - 1] == b[i + alen - 1]) {
			if (memcmp(a, b + i, (unsigned)alen) == 0) {
				matches[matchno++] = i;
			}
		}
	}
}

static void Print(void)
{
	int i;
	printf("%i\n", matchno);
	matchno = matchno > MAXPRINTS ? MAXPRINTS : matchno;
	for (i = 0; i < matchno; ++i) {
		printf("%i ", matches[i]);
	}
	printf("\n");
}

int main(void)
{
	freopen("strmatch.in", "r", stdin);
	freopen("strmatch.out", "w", stdout);
	Read();
	FindMatches();
	Print();
	return 0;
}