Cod sursă (job #93395)

Utilizator avatar Pasarel Alex Oltean Pasarel IP ascuns
Problemă Bart (clasele 9-10) Compilator c | 1,05 kb
Rundă Tema 8 clasele 9-10 2014/15 Status evaluat
Dată 29 nov. 2014 15:59:56 Scor 50
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 500000

int main()
{
	char buffer[N];
	int i = 0;
	int j;
	int greedy;
	int n;
	int echiv;
	int stop;

	freopen("bart.in", "r", stdin);
	freopen("bart.out", "w", stdout);

	fgets(buffer, N, stdin);
	n = strlen(buffer);
	i = 1;
	greedy = 0;

	while (i < n - 1 && !greedy) {
//		printf("i = %d; buffer[%d] = %c; buffer[0] = %c; greedy = %d\n", i, i, buffer[i], buffer[0], greedy);
		if (buffer[i] == buffer[0]) {
//			printf("entering greedy mode: buffer[%d] == buffer[0] == %c\n", i, buffer[0]);
			j = i + 1;
			stop = i;
			echiv = j % i;
			greedy = 1;
			while (greedy && j < n - 1 && greedy) {
				greedy = (buffer[j] == buffer[echiv]);
//				printf("j = %d; buffer[j] = %c; buffer[j mod i] = %c\n", j, buffer[j], buffer[j % i]);
//				printf("greedy = %d\n", greedy);
				j++;
				echiv = (echiv + 1 < i) ? echiv + 1 : 0;
			}
		}
		if (greedy)
			i = j;
		i++;
	}

	if (!greedy)
		stop = n;

	buffer[stop - (!greedy)] = '\0';
	printf("%s\n", buffer);

	fclose(stdin);
	fclose(stdout);
	return 0;
}