Pagini recente » Cod sursa (job #809004) | Cod sursa (job #1969729) | Cod sursa (job #817903) | Cod sursa (job #3133822) | Cod sursa (job #1200107)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
/// cea mai scurta perioada pe sirul diferentelor dintre 2 termeni consecutivi
const int Lmax = 5e5 + 2;
int Text[Lmax];
int pi[Lmax];
int N;
void build_prefix()
{
int lgprefix = 0;
pi[1] = 0;
for ( int i = 2; i <= N; ++i )
{
while ( lgprefix > 0 && Text[i] != Text[ lgprefix + 1 ] )
lgprefix = pi[ lgprefix ];
if ( Text[i] == Text[ lgprefix + 1 ] )
lgprefix++;
pi[i] = lgprefix;
}
}
int main()
{
ifstream in("reguli.in");
ofstream out("reguli.out");
in >> N;
for ( int i = 1, last = 0, x; i <= N; ++i )
{
in >> x;
if ( i != 1 ) Text[i - 1] = x - last;
last = x;
}
N--;
build_prefix();
out << N - pi[N] << "\n";
in.close();
out.close();
return 0;
}