Pagini recente » Cod sursa (job #1692468) | Cod sursa (job #2833264) | Cod sursa (job #2298593) | Cod sursa (job #2697429) | Cod sursa (job #2843601)
#include <fstream>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
ifstream in("numarare.in");
ofstream out("numarare.out");
long long s[100005],st,dr,n,z[100005],i,ma;
int main()
{
in>>n;
for (i=0;i<n;++i)
{
in>>s[i];
}
z[0]=1;
st=0;
dr=1;
for (long long i=1;i<n;++i)
{
if (dr<=i) {while (i+z[i]+2<n&&i>z[i]+1&&s[i+z[i]+2]+s[i-z[i]-1]==s[i]+s[i+1]) {z[i]++;} st=i-z[i]; dr=i+z[i]-1;}
else if (dr>i&&dr<=i+z[(dr-i)+st-1]) {z[i]=dr-i-1; while (i+z[i]<n-1&&i>z[i]&&s[i+z[i]+1]==s[i-z[i]-1]) z[i]++; st=i-z[i]; dr=i+z[i];}
else {z[i]=z[(dr-i)+st-1];}
ma+=(z[i]+1);
}
out<<ma+1;
return 0;
}
/*a b c d a1 b1 c1 d1
a+d=b+c
a+d1=b+c1=c+b1=d+a1
a+d+a1+d1=b+c+b1+c1
a1+d1=b1+c1
a0 a1 a2 a3 a4 a5 a6 a7
*/