有n个男孩和m个女孩(1≤n,m≤100),我们知道他们每个人的技能值(男孩为a[i],女孩为b[i],每个技能值都≤100)。
当且仅当第A个男孩和第B个女孩的技能值相差不超过1时,他们将成为一对舞伴。
给定n、m和他们各自的技能值,输出他们能组成的舞伴最大对数(格式见样例)。
思路:贪心。先分别排序,设定两个指针,然后进行是否配对判断,直到其中一个指针指到最后为止。
#include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 5; int a[maxn], b[maxn], n, m; int main() { cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; cin >> m; for (int i = 1; i <= m; i++) cin >> b[i]; sort (a + 1, a + n + 1); sort (b + 1, b + m + 1); int p1 = 1, p2 = 1; int ans = 0; while (p1 <= n && p2 <= m) { if (abs(a[p1] - b[p2]) <= 1) p1++, p2++, ans++; //如果可以配对 else if (a[p1] > b[p2])p2++; //如果a[i] > b[j] j++ else if (a[p1] < b[p2])p1++; //如果a[i] < b[j] i++ } cout << ans << endl; return 0; }