AT3524 题解

题目传送门

小学生又双叒叕来写题解啦!

每个数都不受限制的可以变成三个数,那我们就用数组存每个数的变身情况,每次都给那三个数对应的计数器加一即可。

然后呢?

大家的思路都是在最后再遍历一次数组,并找最大值。

实际上根本不需要这一个重新搜的动作,只需在每次加计数器时都比较一次即可。

这样就对常数做了优化。

实际上可以利用指针进行进一步的优化,但没必要,反正总体的时间效率差别不大,就没必要浪费十几行再优化常数了。

送上满分代码:

#include <iostream>
#include <cstdio>
using namespace std;
int box[100005];
int main()
{
	int n, maxn = -1;
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
	{
		int x;
		scanf("%d", &x);
		box[x-1]++, maxn = max(maxn, box[x-1]);  //一边走一边判断。 
		box[x]++, maxn = max(maxn, box[x]);
		box[x+1]++, maxn = max(maxn, box[x+1]);
	}
	printf("%d\n", maxn);   //勿忘祖传换行。 
	return 0;
}

首发:2022-02-04 17:27:27

posted @ 2022-08-25 00:11  liangbowen  阅读(9)  评论(0编辑  收藏  举报