Cod sursă (job #93771)

Utilizator avatar Pasarel Alex Oltean Pasarel IP ascuns
Problemă Bart (clasele 9-10) Compilator c | 1,09 kb
Rundă Tema 8 clasele 9-10 2014/15 Status evaluat
Dată 30 nov. 2014 17:44:22 Scor 85
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 500000

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

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

	fgets(buffer, N, stdin);
	n = strlen(buffer);
	i = 1;
	j = 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;
			echiv = j % i;
			stop = i;
			greedy = 1;
			while (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);
				echiv = (echiv + 1 < i) ? echiv + 1 : 0;
				j++;
			}
		i = j - 2;
		}
//		printf("j = %d; i = %d, stop = %d\n", j, i, stop);
		i++;
	}

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

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