Pagini recente » Cod sursa (job #3292332) | Cod sursa (job #3288639) | Cod sursa (job #2923176) | Cod sursa (job #3294658) | Cod sursa (job #18113)
Cod sursa(job #18113)
#include <stdio.h>
#define BIGINT long long // __int64
#define fmtrd "%lld" //"%I64d"
#define fmtwr "%lld\n" // "%I64d\n"
#define NMAX 510000
BIGINT x[NMAX], a[NMAX];
int prefix[NMAX];
int i, k, N, ok;
int main()
{
freopen("reguli.in", "r", stdin);
scanf("%d", &N);
for (i = 0; i < N; i++)
scanf(fmtrd, &x[i]);
for (i = 1; i < N; i++)
a[i] = x[i] - x[i - 1];
// KMP - functia prefix
prefix[1] = k = 0;
for (i = 2; i < N; i++)
{
while (k > 0 && a[k + 1] != a[i])
k = prefix[k];
if (a[k + 1] == a[i])
k++;
prefix[i] = k;
}
k = N - 1 - prefix[N - 1];
ok = 1;
for (i = k + 1; i < N; i++)
if (a[i] != a[i - k])
{
ok = 0;
break;
}
if (!ok)
k = N - 1;
freopen("reguli.out", "w", stdout);
printf("%d\n", k);
for (i = 1; i <= k; i++)
printf(fmtwr, a[i]);
return 0;
}