Cod sursa(job #2471393)

Utilizator cyg_contnr1Rares Burghelea cyg_contnr1 Data 10 octombrie 2019 20:21:55
Problema Numarare Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>

using namespace std;

int a[100005], v[100005];

ifstream cin("prefix.in");
ofstream cout("prefix.out");

int main()
{
    int n, r, m;
    cin>>n;
    for (int i = 1; i <= n; ++i)
    {
         cin>>a[i];
    }
    for (int i = 1; i < n; ++i)
        a[i] = a[i+1] - a[i];
    n -= 1;
    int ans = 0;
    for (int i = 1; i <= n; ++i)
    {
        if (i>r)
        {
            int k=1;
            while (a[i+k] == a[i-k] && i+k <= n && i-k >= 1)
                ++k;
            --k;
            r = i + k;
            m = i;
            ans += k + 1;
            v[i] = k;
        }
        //printf("%d %d", m, r);
        else
        {
            int k = min(v[2 * m-i], r-i);
            while (a[i + k] == a[i - k] && i + k <= n && i - k >= 1)
                ++k;
            --k;
            if (i + k > r)
            {
                r = i + k;
                m = i;
            }
            ans += k + 1;
            v[i] = k;
        }
    }
    cout<<ans;
    return 0;
}