(题目来源hintoj)
Description
给你一个数列,共N个数字 你可以对每个数字,做如下三种操作之一
1:将这个数字加1
2:将这个数字减去1
3:什么事也不做
最终希望在这个数列中,某个数字出现的次数越多越好,输出出现次数即可。
Format
Input
第一行给出N
第二行给出N个数字
N<=1e5,数字的权值在[0,1e5]之间.
Output
如题
Samples
输入数据 1
7
3 1 4 1 5 9 2
Copy
输出数据 1
4
Copy
Hint
将这个数列变成2 2 4 2 5 9 2
Limitation
1s, 102400KiB for each test case.
暴力能过的话还要什么奇策,直接把每个数的三个状态全部罗列出来,统计出现最多的。
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<vector>
#include<math.h>
#include<iomanip>
#include<set>
#include<queue>
#include<stack>
#include<map>
#include<list>
using namespace std;
long long n, a[100005],b[100005],c[100005],d[100005],Max=-1;
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i];
b[i] = a[i] - 1;
c[i] = a[i] + 1;
}
for (int i = 0; i < n; i++)
{
d[a[i]]++;
Max = max(d[a[i]],Max);
d[b[i]]++;
Max = max(d[b[i]], Max);
d[c[i]]++;
Max = max(d[c[i]], Max);
}
cout << Max;
}