1 条题解
-
1
可以求出每个数对应的y-x的值,问题即可转化为要求每组的和都大于等于0。想要组数尽量多,可以让每组都只有两个数(如果有超过两个数,可以只保留其中最大的两个数)。可以把数组排序后,从大到小依次看每一个数,同时用另一个指针p,从小到大遍历(不回头),用来标记和当前枚举的数匹配的数。如果a[i] + a[p] < 0,说明无法匹配,需要让p++。如果能够匹配,则ans++,最终输出ans即可。
核心代码
cin >> n; for (int i = 1; i <= n; i++) cin >> x[i]; for (int i = 1; i <= n; i++) cin >> y[i]; for (int i = 1; i <= n; i++) a[i] = y[i] - x[i]; sort(a + 1, a + n + 1); int p = 1, ans = 0; for (int i = n; i > p; i--) { while (p < i && a[i] + a[p] < 0) p++; if (p < i) { ans++; p++; } } cout << ans << endl;
- 1
信息
- ID
- 630
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 289
- 已通过
- 59
- 上传者