题解 CF1121B【 Mike and Children】
Rbu_nas
2019-03-11 22:43:50
**题意简述**
长度为$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$开始,感性理解一下就能明白
具体细节见代码
$ $
```cpp
#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;
}
```