题意简述

长度为 $n$ 的序列 $a$ 中,满足 $a_i+a_j = a_k+a_m(i≠j≠k≠m)$ 性质个数的最大值

$ $

一道简单的模拟qwq,结合样例解释差不多就出来了。

首先用类似于桶的思想,把能达到 $a_i+a_j(i+1≤j≤n)$ 值的个数记录下来,然后再循环遍历这个桶,最大的次数即为最大值

可能唯一的难点在循环变量取值吧233,因为 $a_i+a_j$ 是不断往后推的,所以每次 $j$ 从 $i+1$ 开始,感性理解一下就能明白

具体细节见代码

$ $

#include <cstdio>
#include <algorithm>
using namespace std;

#define gcc getchar
template <typename T> inline void read(T&x)
{
    x=0; bool f=true; char ck=gcc();
    for( ; ck<'0'||ck>'9'; ck=gcc()) if(ck == '-') f=false;
    for( ; ck>='0'&&ck<='9'; ck=gcc()) x=(x<<1)+(x<<3)+(ck^48);
    x=f?x:-x; return ;
}

#define N 1003
#define M 200003
int n, res, a[N], flag[M];

int main(void)
{
    read(n);
    for(int i=1; i<=n; ++i) read(a[i]);
    for(int i=1; i<=n; ++i)
        for(int j=i+1; j<=n; ++j)
            ++flag[a[i]+a[j]];
    //更新ai+aj的值的次数       
    for(int i=1; i<=M; ++i)
        res=max(res, flag[i]);
    //取相同值的最大次数    
    printf("%d", res);
    return 0;
}