这段代码报运行超时(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) 回帖