Cod sursa(job #1738793)
| Utilizator | Data | 7 august 2016 19:11:11 | |
|---|---|---|---|
| Problema | Numarare | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.64 kb |
#include <fstream>
using namespace std;
ifstream fi("numarare.in");
ofstream fo("numarare.out");
#define M 100003
#define inf 1000000
int n, i,st,dr,a[M],lg[M];
long long sol;
int main()
{
fi>>n;
for (i = 1; i <= n; i++) fi>>a[i];
a[0]=a[n + 1] = -inf;
for (i = 1; i < n; i++)
{
if (i + 1 <= dr) lg[i] = min(lg[2 * st - i], dr - i);
while (a[i] + a[i + 1] == a[i + 1 + lg[i]] + a[i - lg[i]])
lg[i]++;
sol += 1LL * lg[i];
if (i + lg[i] >= dr)
{
st = i;
dr = i + lg[i];
}
}
fo<<sol<<'\n';
return 0;
}
