Submission #728022

#TimeUsernameProblemLanguageResultExecution timeMemory
728022rainboytimeismoney (balkan11_timeismoney)C11
100 / 100
1616 ms596 KiB
#include <stdio.h> #include <string.h> #define N 200 #define M 10000 unsigned int X = 12345; int rand_() { return (X *= 3) >> 1; } int n; int ii[M], jj[M], xx[M], yy[M], hh[M], m; int a1, b1; int compare(int h1, int h2) { long long z1 = (long long) a1 * xx[h1] + (long long) b1 * yy[h1]; long long z2 = (long long) a1 * xx[h2] + (long long) b1 * yy[h2]; if (z1 != z2) return z1 < z2 ? -1 : 1; return xx[h1] != xx[h2] ? xx[h1] - xx[h2] : yy[h2] - yy[h1]; } void sort(int *hh, int l, int r) { while (l < r) { int i = l, j = l, k = r, h = hh[l + rand_() % (r - l)], tmp; while (j < k) { int c = compare(hh[j], h); if (c == 0) j++; else if (c < 0) { tmp = hh[i], hh[i] = hh[j], hh[j] = tmp; i++, j++; } else { k--; tmp = hh[j], hh[j] = hh[k], hh[k] = tmp; } } sort(hh, l, i); l = k; } } int ds[N]; int find(int i) { return ds[i] < 0 ? i : (ds[i] = find(ds[i])); } int join(int i, int j) { i = find(i); j = find(j); if (i == j) return 0; if (ds[i] > ds[j]) ds[i] = j; else { if (ds[i] == ds[j]) ds[i]--; ds[j] = i; } return 1; } void solve(int a, int b, int *x, int *y, int print) { int h, h_; a1 = a, b1 = b; for (h = 0; h < m; h++) hh[h] = h; sort(hh, 0, m); memset(ds, -1, n * sizeof *ds); *x = *y = 0; for (h = 0; h < m; h++) { h_ = hh[h]; if (join(ii[h_], jj[h_])) { if (print) printf("%d %d\n", ii[h_], jj[h_]); *x += xx[h_], *y += yy[h_]; } } } long long z_; int x_, y_, a_, b_; void enumerate(int x1, int y1, int x2, int y2) { int x, y; long long z; solve(y1 - y2, x2 - x1, &x, &y, 0); if (x != x1 || y != y1) enumerate(x1, y1, x, y), enumerate(x, y, x2, y2); else { z = (long long) x1 * y1; if (z_ > z) z_ = z, x_ = x1, y_ = y1, a_ = y1 - y2, b_ = x2 - x1; } } int main() { int h, x1, y1, x2, y2; scanf("%d%d", &n, &m); for (h = 0; h < m; h++) scanf("%d%d%d%d", &ii[h], &jj[h], &xx[h], &yy[h]); solve(1, 0, &x1, &y1, 0); solve(0, 1, &x2, &y2, 0); z_ = (long long) x2 * y2, x_ = x2, y_ = y2, a_ = 0, b_ = 1; enumerate(x1, y1, x2, y2); printf("%d %d\n", x_, y_); solve(a_, b_, &x_, &y_, 1); return 0; }

Compilation message (stderr)

timeismoney.c: In function 'main':
timeismoney.c:109:2: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
  109 |  scanf("%d%d", &n, &m);
      |  ^~~~~~~~~~~~~~~~~~~~~
timeismoney.c:111:3: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
  111 |   scanf("%d%d%d%d", &ii[h], &jj[h], &xx[h], &yy[h]);
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...