Cod sursa(job #2843601)

Utilizator Savu_Stefan_CatalinSavu Stefan Catalin Savu_Stefan_Catalin Data 2 februarie 2022 18:13:31
Problema Numarare Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#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
*/