rt
下面这个做法的复杂度应该大概在 O(n3logn) 左右
但是确实能 AC 洛谷的数据点(顺便一提UOJ过不去)
#include <iostream>
using namespace std;
int n, m[5005], cha[5005];
int main()
{
ios::sync_with_stdio(false);
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> m[i];
cha[i] = m[i] - m[i - 1];
}
int l = 5, r = n / 2, ans = 0;
while (l <= r)
{
int i = (l + r) / 2;
// cout << l << " " << r << ' ' << i << endl;
bool check = false;
for (int j = 1; j <= n - i * 2 + 1; j++)
{
for (int k = j + i; k <= n - i + 1; k++)
{
bool c = true;
for (int t = 2; t <= i; t++)
if (cha[j + t - 1] != cha[k + t - 1])
{
c = false;
break;
}
check |= c;
if (check)
break;
}
if (check)
break;
}
if (check)
{
l = i + 1;
ans = max(ans, i);
}
else
r = i - 1;
}
cout << ans;
return 0;
}