论谜之sort函数
查看原帖
论谜之sort函数
365689
我是一个小号楼主2022/7/26 16:00

做这道题时发现了一件事

如果这样写,第六个点会RE,sort函数会爆掉,返回3221225477(以下代码经过精简)

#include <bits/stdc++.h>
using namespace std;
struct Node {
	int a, b;
	long long val;
} men[10005];
bool cmp (Node x, Node y) {
	return x.val <= y.val;
}
int main () {
	int n;
	scanf("%d", &n);
	for (int i = 1; i <= n + 1; i++) {
		scanf("%d%d", &men[i].a, &men[i].b);
		men[i].val = men[i].a * men[i].b;
	}
	sort(men + 2, men + n + 2, cmp);
	return 0;
}

将cmp函数中的 <= 改为 < 后,就能解决问题得到AC

想请教一下大佬们,为什么cmp中用<=会产生bug,赛场上能不能用<=,以及如果非要用<=该怎么处理才能避免RE

万分感谢。

附case6数据

100
1 1
1 1
2 1
2 2
1 2
1 2
2 2
1 2
1 2
2 2
2 2
1 2
2 1
1 2
1 2
1 2
1 2
2 2
1 2
1 1
1 1
1 1
1 1
1 2
1 2
1 1
1 1
1 2
1 2
2 2
1 1
1 2
1 1
1 2
2 2
1 2
1 2
2 2
2 2
1 2
1 2
2 1
1 2
1 1
1 2
1 1
2 1
2 2
1 1
2 2
1 1
2 2
1 2
2 2
1 2
2 2
1 2
1 2
2 2
1 2
2 2
1 2
1 2
1 1
2 1
1 2
1 2
1 2
1 2
1 2
1 2
1 2
1 1
2 2
1 2
2 1
2 2
1 2
1 1
1 2
1 1
1 2
1 2
2 2
1 2
1 1
1 1
2 2
1 2
2 2
2 1
1 2
2 1
1 2
1 2
2 2
1 2
1 2
1 2
1 1
1 2

2022/7/26 16:00
加载中...