Mai intai trebuie sa te autentifici.
Cod sursa(job #2411568)
Utilizator | Data | 20 aprilie 2019 21:16:08 | |
---|---|---|---|
Problema | Numarare | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 0.65 kb |
#include <fstream>
using namespace std;
ifstream cin ("numarare.in");
ofstream cout ("numarare.out");
int n;
long long sol;
int v[100005], dp[100005];
int main() {
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> v[i];
v[i] -= v[i - 1];
}
int l = 1, r = 1;
sol = n;
for(int i = 1; i <= n; i++) {
if(i > r)
l = r = i;
else
dp[i] = min(dp[l + r - i], r - i);
if(i > r && dp[i] != r - i)
continue;
l = i - dp[i]; r = i + dp[i];
while(r <= n && l && v[l] == v[r])
l--, r++;
l++, r--;
dp[i] = (r - l + 1) / 2;
sol += dp[i];
}
cout << sol;
return 0;
}