1 条题解
-
0
自动搬运
来自洛谷,原作者为

王老吉的父亲
Be kind,for everyone is fighting a hard battle搬运于
2025-08-24 22:29:16,当前版本为作者最后更新于2021-12-22 23:05:23,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
思路解析:
本题其实就是求
a[i] - b[i]出现的最多次数是几,所以我为大家提供两种思路供大家参考:1.我们可以用桶解决,具体思路见下面代码中的注释。
2.我们还可以
sort排序一个数组c(用来存a[i] - b[i]的值),然后遍历数组c,如果某一项与前一项相同,那么cnt++即可,如果不相同,进行特判,方法见下面代码注释。下面这一份是用桶做的AC代码:
#include <cstdio> #include <iostream> #include <algorithm> using namespace std; int a[1000010],b[1000010],c[50000010]; int main() { int n; cin >> n; for (int i = 1;i <= n;i++) cin >> a[i]; for (int i = 1;i <= n;i++) cin >> b[i]; for (int i = 1;i <= n;i++) { c[a[i] - b[i] + 5000000]++;//下标要记得加一个数,避免a[i] - b[i]是负数 } int maxn = -1e9; for (int i = 1;i <= 50000000;i++) { if (c[i] >= maxn) maxn = c[i]; } cout << maxn; return 0; }下面展示第2种方法,也就是用
for循环做的:#include <cstdio> #include <iostream> #include <algorithm> using namespace std; int a[1000010],b[1000010],c[1000010]; int main() { int n; cin >> n; for (int i = 1;i <= n;i++) cin >> a[i]; for (int i = 1;i <= n;i++) cin >> b[i]; for (int i = 1;i <= n;i++) c[i] = b[i] - a[i]; sort(c + 1,c + n + 1); int Maxcnt = 0,cnt = 1;//这里初始值也要设成1 for (int i = 2;i <= n;i++)//从2到n讨论 { if (c[i] == c[i - 1]) { cnt++; } else { if (Maxcnt < cnt) Maxcnt = cnt; cnt = 1;//这里要注意初始值是1 } } if (Maxcnt < cnt) Maxcnt = cnt;//最后还要判断一下 cout << Maxcnt; return 0; }谢谢大家的观看~
- 1
信息
- ID
- 6466
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者