蒟蒻刷题TLE竟然用这种方法AC了?求大佬解答
查看原帖
蒟蒻刷题TLE竟然用这种方法AC了?求大佬解答
374669
tony2007楼主2022/7/18 17:00

stable_sort有那么大的优化吗???

ac代码(开o2优化)

#include <cstdio>
#include<algorithm>
using namespace std;
inline int read()
{
	int x=0;char c=getchar();
	while (c<'0'||c>'9') c=getchar();
	while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
	return x;
}
const int maxn = 1e5;
int n, r, q;

struct node {
	int id, s, w;
} a[2 * maxn + 1];

bool cmp(node p1, node p2) {
	if (p1.s == p2.s)
		return p1.id < p2.id;
	return p1.s > p2.s;
}
int main() {
	n=read();r=read();q=read();
	for (int i = 1; i <= 2 * n; i++) {
		a[i].s=read();
		a[i].id = i;
	}
	for (int i = 1; i <= 2 * n; i++)
		a[i].w=read();
	sort(a + 1, a + 2 * n + 1, cmp);
	while (r--) {
		for (int i = 1; i <= 2 * n; i += 2) {
			if (a[i].w > a[i + 1].w)
				a[i].s++;
			else
				a[i + 1].s++;
		}
		stable_sort(a + 1, a + 2 * n + 1, cmp);//注意这里改变成了stable_sort
	}
	printf("%d", a[q].id);
	return 0;
}

80分代码(TLE两个点)


#include <cstdio>
#include<algorithm>
using namespace std;
inline int read()
{
	int x=0;char c=getchar();
	while (c<'0'||c>'9') c=getchar();
	while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
	return x;
}
const int maxn = 1e5;
int n, r, q;

struct node {
	int id, s, w;
} a[2 * maxn + 1];

bool cmp(node p1, node p2) {
	if (p1.s == p2.s)
		return p1.id < p2.id;
	return p1.s > p2.s;
}
int main() {
	n=read();r=read();q=read();
	for (int i = 1; i <= 2 * n; i++) {
		a[i].s=read();
		a[i].id = i;
	}
	for (int i = 1; i <= 2 * n; i++)
		a[i].w=read();
	sort(a + 1, a + 2 * n + 1, cmp);
	while (r--) {
		for (int i = 1; i <= 2 * n; i += 2) {
			if (a[i].w > a[i + 1].w)
				a[i].s++;
			else
				a[i + 1].s++;
		}
		sort(a + 1, a + 2 * n + 1, cmp);//注意这里
	}
	printf("%d", a[q].id);
	return 0;
}

stable_sort为什么有这么大的优化???有无大佬解答

2022/7/18 17:00
加载中...