题目传送:洛谷 /AtCoder
题目翻译:{题目翻译}
解题思路:
这题可以用暴力解,用一维数组把楼的高度存起来.
楼的高度( H i H_i Hi) | 0 | 5 | 7 | 5 | 7 | 7 | 5 | 7 | 7 | … | H N H_N HN |
---|---|---|---|---|---|---|---|---|---|---|---|
下标( i _i i) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | … | N N N |
然后从输入就开始寻找:从 i _i i项开始,向前找 i _i i轮,每一轮的间隔从 1 _1 1 − _- − i _i i递增(设为j),如果 H i H_i Hi不等于 H i H_i Hi − _- − j _j j,就跳出这一轮。如果这一轮顺利结束,就记录这一轮被经过的点数m,与之前的记录ma(初始为0)进行 m a = m a x ( m , m a ) ma=max(m,ma) ma=max(m,ma),保留最大值。当最后第 N N N项寻找完,最大值ma即为答案。
限制因素: 1 ≤ N ≤ 3000 1 \leq N \leq 3000 1≤N≤3000, 1 ≤ H i ≤ 3000 1 \leq Hi \leq 3000 1≤Hi≤3000,所有输入值均为整数。
↑数据量不大,不会超时。
AC代码:
#include<bits/stdc++.h>
using namespace std;
int a[3005];
int main()
{
int n,m,ma=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
for(int j=1;j<=i;j++)
{
m=0;
for(int k=i;k>=1;k-=j)
{
if(a[k]==a[i])
{
m+=1;
ma=max(m,ma);
}
else
{
break;
}
}
}
}
cout<<ma;
return 0;
}