Pagini recente » Cod sursa (job #2867124) | Cod sursa (job #2620246) | Cod sursa (job #252813) | Cod sursa (job #2224733) | Cod sursa (job #1734760)
#include <fstream>
using namespace std;
ifstream fi("numarare.in");
ofstream fo("numarare.out");
#define MAXN 100003
#define inf 1000000
int n, i,st,dr;
int a[MAXN];
int lg[MAXN];
long long sol;
int main()
{
fi>>n;
for (i = 1; i <= n; i++) fi>>a[i];
a[0]=a[n+1]=-inf;
st=dr=0;
for (i = 1; i < n; i++) {
if (i + 1 <= st) lg[i] = min(lg[2 * st - i], dr - i);
while(a[i]+a[i+1]==a[i-lg[i]]+a[i+1+lg[i]]) lg[i]++;
sol += lg[i];
if (i+lg[i]>=st) {
st=i;
dr=i+lg[i];
}
}
fo<<sol<<'\n';
return 0;
}
//
//#include<fstream>//10p timp depasit!?!
//using namespace std;
//ifstream fi("numarare.in");
//ofstream fo("numarare.out");
//int sum,st,dr,i,n,a[100002],lg[100002];
//int main()
//{
// fi>>n;
// for(i=1;i<=n;++i) fi>>a[i];
// for(i=1;i<n;i++)
// {
// st=i;dr=i+1;sum=a[st]+a[dr];
// while(st>0 && lg[st]<=1 && a[st]+a[dr]==sum)st--,dr++;
// st++;dr--;
// lg[i]=dr-i;
// }
// //for(i=1;i<=n;i++)fo<<lg[i]<<" ";fo<<endl;
// for(i=1;i<n;i++)
// if(lg[i]>1)
// {
// sum=a[i]+a[i+1];
// while(a[i-lg[i]]+a[i+1+lg[i]]==sum)
// lg[i]+=min(lg[i-lg[i]],a[i-lg[i]]);
// }
// //for(i=1;i<=n;i++)fo<<lg[i]<<" ";fo<<endl;
// long long sol=0;
// for(i=1;i<=n;i++)sol+=lg[i];
// fo<<sol<<'\n';
// return 0;
// }