Pagini recente » Cod sursa (job #1054620) | Cod sursa (job #478021) | Cod sursa (job #159480) | Cod sursa (job #1396107) | Cod sursa (job #2462225)
#include <fstream>
using namespace std;
int v[100005],dp[100005];
int main()
{
ifstream cin ("numadradre.in");
ofstream cout ("numadradre.out");
long long sol=0,n;
cin>>n;
for(int i=1; i<=n; i++)
cin>>v[i];
for(int i=1; i<n; i++)
v[i]-=v[i+1];
int st=1,dr=1;
sol=n-1;
for(int i=2;i<=n;i++)
{
bool ok=0;
if(i>dr)
st=dr=i;
else
{
dp[i]=min(dp[st+dr-i],dr-i);
if(dp[i]!=dr-i)
ok=1;
else
{
st=i-dp[i];
dr=i+dp[i];
}
}
if(ok==1)
{
while(dr<=n&&st&&v[st]==v[dr])
{
st--;
dr++;
}
st++;
dr--;
dp[i]=(dr-st+1)/2;
}
sol+=dp[i];
}
cout<<sol;
return 0;
}