竞赛讨论区 > 关于F错误判定的疑惑
头像
shashabi
发布于 05-03 08:40
+ 关注

关于F错误判定的疑惑

这段代码报运行超时(1001ms,通过率0%)

#include<iostream>
#include<algorithm>

using namespace std;

const int N = 2e6 + 10, INF = 0x3f3f3f3f;

typedef pair<int, int> PII;

int n, m, num, ct;

PII a[N];

int st[N];

void init() {
	cin >> n >> m;
	ct = 0;
	for (int i = 1; i <= n; i++) {
		cin >> num;
		for (int j = 0; j < num; j++) {
			ct++;
			cin >> a[ct].first;
			a[ct].second = i;
		}
	}
}

void solve() {
	sort(a + 1, a + 1 + ct);
	int res = INF, dc = 0, s = 1;
// 	for (int i = 1; i <= n; i++) {
// 		if (!st[a[i].second]) dc++;
// 		st[a[i].second]++;
// 		if (dc == m) {
// 			res = min(a[i].first - a[s].first, res);
// 			st[a[i].second]--;
// 			if (!st[a[i].second]) dc--;
// 			s++;
// 		}
// 	}
	cout << res << endl;
}

signed main(void) {
	init();
	//solve();
	return 0;
}

但下面这段代码能AC(913ms)

#include<iostream>
#include<algorithm>

using namespace std;

const int N = 2e6 + 10, INF = 0x3f3f3f3f;

typedef pair<int, int> PII;

int n, m, num, ct;

PII a[N];

int st[N];

void init() {
	cin >> n >> m;
	ct = 0;
	for (int i = 1; i <= n; i++) {
		cin >> num;
		for (int j = 0; j < num; j++) {
			ct++;
			cin >> a[ct].first;
			a[ct].second = i;
		}
	}
}

void solve() {
	sort(a + 1, a + 1 + ct);
	int res = INF, dc = 0, s = 1;
	for (int i = 1; i <= n; i++) {
		if (!st[a[i].second]) dc++;
		st[a[i].second]++;
		if (dc == m) {
			res = min(a[i].first - a[s].first, res);
			st[a[i].second]--;
			if (!st[a[i].second]) dc--;
			s++;
		}
	}
	cout << res << endl;
}

signed main(void) {
	init();
	solve();
	return 0;
}

试着找了一下,没找到原因,有那位小伙伴懂的吗...

全部评论

(0) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐