Pagini recente » Cod sursa (job #2681511) | Cod sursa (job #1663696) | Cod sursa (job #1622631) | Cod sursa (job #1146481) | Cod sursa (job #2461156)
#include <fstream>
#include <iostream>
#include <vector>
#define inf 1000000000
#define NMAX 100000
using namespace std;
ifstream f("numarare.in");
ofstream g("numarare.out");
int n, sol, v[NMAX+10], dif[NMAX+10], a[NMAX+10];
vector <int> s;
int main()
{
f >> n >> v[1];
for(int i=2; i<=n; i++)
{ f >> v[i];
dif[i-1] = v[i-1] - v[i];
}
n--;
int val1 = inf, val2 = inf+1, val3 = inf+2;
s.push_back(val1);
for(int i=1; i<=n; i++)
{ s.push_back(val2);
s.push_back(dif[i]);
}
s.push_back(val2);
s.push_back(val3);
int C = 0, R = 0;
for(int i=1; i<s.size()-1; i++)
{ int ogl = 2*C - i;
if(i < R) a[i] = min(R-i, a[ogl]);
while(s[i+a[i]+1] == s[i-a[i]-1]) a[i]++;
if(a[i] + i > R)
{ R = a[i] + i;
C = i;
}
}
for(int i=2; i<s.size()-1; i+=2) sol = sol + a[i]/2 + 1;
g << sol << '\n';
return 0;
}