奶牛贝茜设计了一款她认为必火的游戏:愤怒的奶牛。
游戏设定(她坚信这是她的原创)是玩家用一个弹弓将一头奶牛射向一个数轴,数轴的不同位置上分布着一些干草捆。
奶牛以足够的力量砸向某个干草捆,并使得该干草捆发生爆炸,爆炸可能会不断引起连锁反应,导致更多的干草捆发生爆炸。
目标是用一头奶牛引起的连锁反应引爆尽可能多的干草捆。
共有 NN 个干草捆位于数轴中的不同整数位置,其坐标依次为 x1,x2,…,xNx1,x2,…,xN。
如果将奶牛射向位于位置 xx 的干草捆,则该干草捆发生爆炸,爆炸半径为 11,爆炸将吞噬 11 单位距离内的所有干草捆。
然后这些干草捆(全部同时)发生爆炸,每个干草捆的爆炸半径为 22。
二次爆炸中吞噬的所有尚未爆炸的干草捆也(全部同时)发生爆炸,爆炸半径为 33。
也就是说,在 tt 时刻爆炸的干草捆的爆炸半径为 tt,其爆炸波及的干草捆在 t+1t+1 时刻也会爆炸,爆炸半径为 t+1t+1,以此类推。
请确定,通过合理选择奶牛射向的干草捆,能够引爆的干草捆最大数量。

输入格式

第一行包含整数 NN。
接下来 NN 行包含 x1,…,xNx1,…,xN。

输出格式

输出能够引爆的干草捆的最大数量。

数据范围

1≤N≤1001≤N≤100,
0≤xi≤1090≤xi≤109

输入样例:

6 8 5 6 13 3 4

输出样例:

5

样例解释

将奶牛射向位于位置 55 的干草捆,产生半径为 11 的爆炸。
爆炸吞噬位置 44 和 66 处的干草捆,引发半径为 22 的二次爆炸。
二次爆炸吞噬位置 33 和 88 处的干草捆,引发半径为 33 的三次爆炸。
位置 1313 的干草捆无法被引爆。
image.png


  1. #include <iostream>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5. const int N = 110, INF = 2e9;
  6. int p[N];
  7. int n;
  8. int main() {
  9. cin >> n;
  10. p[0] = -INF, p[n+1] = INF;
  11. for (int i = 1; i <= n; ++i) cin >> p[i];
  12. sort(p+1,p+n+1);
  13. int res = 0;
  14. for (int i = 1; i <= n; ++i) {
  15. int l = 1, r = 1, a = i, b = i; //l,r表示爆炸第几波,a,b表示最靠左和最靠右
  16. while (p[a] - p[a-1] <= l) {
  17. int k = a - 1;
  18. while (p[a] - p[k-1] <= l) k--;
  19. a = k;
  20. l++;
  21. }
  22. while (p[b+1] - p[b] <= r) {
  23. int k = b + 1;
  24. while (p[k+1] - p[b] <= r) k++;
  25. b = k;
  26. r++;
  27. }
  28. res = max(res, b - a + 1);
  29. }
  30. cout << res << endl;
  31. return 0;
  32. }