Pagini recente » Cod sursa (job #402489) | Istoria paginii runda/oni_2008/clasament | Cod sursa (job #2026712) | Cod sursa (job #1764038) | Cod sursa (job #466746)
Cod sursa(job #466746)
#include <algorithm>
using namespace std;
#define BRUTE_LIMIT 10000
#define DIM 100005
#define MAX 10005
unsigned int f[DIM];
unsigned int nrt;
int n,poz=MAX-1;
char buff[MAX];
int v[DIM];
inline void cit (int &nr)
{
char semn;
for (semn=1; !('0'<=buff[poz] && buff[poz]<='9'); )
{
if (buff[poz]=='-')
semn=-1;
if (++poz==MAX)
{
fread (buff,1,MAX,stdin);
poz=0;
}
}
for (nr=0; '0'<=buff[poz] && buff[poz]<='9'; )
{
nr=nr*10+buff[poz]-'0';
if (++poz==MAX)
{
fread (buff,1,MAX,stdin);
poz=0;
}
}
nr*=semn;
}
void read ()
{
int i;
cit (n);
for (i=1; i<=n; ++i)
cit (v[i]);
}
void solve_brute ()
{
int cen,i,j,lg;
for (cen=1; cen<n; ++cen)
{
lg=0;
for (i=cen, j=cen+1; i>=1 && j<=n; --i, ++j)
if (v[i]+v[j]==v[cen]+v[cen+1])
lg=j-cen;
else
break ;
++f[lg];
}
for (i=n/2; i>1; --i)
f[i-1]+=f[i];
for (i=1; i<=n/2; ++i)
nrt+=f[i];
printf ("%u",nrt);
}
void solve_bulan ()
{
int i,cen,lg;
for (i=2; i<=n; ++i)
f[i]=f[i-1]+(i>>1);
for (i=1; i<n; )
{
cen=1;
for (lg=v[i+1]-v[i]; v[i+1]-v[i]==lg; ++i)
++cen;
nrt+=f[cen];
}
printf ("%u",nrt);
}
int main ()
{
freopen ("numarare.in","r",stdin);
freopen ("numarare.out","w",stdout);
read ();
if (n<=BRUTE_LIMIT)
solve_brute ();
else
solve_bulan ();
return 0;
}