Pagini recente » Cod sursa (job #2927537) | Cod sursa (job #2433900) | Cod sursa (job #1848534) | Cod sursa (job #99383) | Cod sursa (job #1524272)
#include <fstream>
using namespace std;
const int NMAX = 100005;
int n;
int s[NMAX];
int ext[NMAX];
int main()
{
ifstream cin("numarare.in");
ofstream cout("numarare.out");
cin >> n;
for (int i = 1; i <= n; ++ i)
cin >> s[i];
int ans = 0, centru = 0;
for (int i = 1, dif, sum; i < n; ++ i) {
if (centru + ext[centru] < i)
dif = 1;
else if (2 * centru - i - ext[2 * centru - i] + 1 > centru - ext[centru] + 1) {
ext[i] = ext[2 * centru - i];
ans += ext[i];
continue;
}
else
dif = centru + ext[centru] - i;
for (sum = s[i] + s[i + 1]; i - dif + 1 >= 1 && i + dif <= n && s[i - dif + 1] + s[i + dif] == sum; ++ dif);
ext[i] = -- dif;
ans += ext[i];
if (i + ext[i] > centru + ext[centru])
centru = i;
}
cout << ans << '\n';
cin.close();
cout.close();
return 0;
}