Submission #968531

# Submission time Handle Problem Language Result Execution time Memory
968531 2024-04-23T14:47:21 Z nguyentunglam Wiring (IOI17_wiring) C++17
7 / 100
1000 ms 32840 KB
#include "wiring.h"
#include<bits/stdc++.h>
using namespace std;

const int N = 1e6 + 10;

int a[N], b[N];

int c[N], d[N];

long long pref[N], _pref[N], suff[N], _suff[N], sum[N];

long long min_total_length(std::vector<int> R, std::vector<int> B) {
  int n = R.size(), m = B.size();
  for(int i = 1; i <= n; i++) a[i] = R[i - 1];
  for(int i = 1; i <= m; i++) b[i] = B[i - 1];

  a[n + 1] = b[m + 1] = 1e9;

  for(int i = 1, j = 1, k = 0, sum = 0; i <= n || j <= m;) {
    if (a[i] < b[j]) {
      c[++k] = a[i++];
      d[k] = 0;
    }
    else {
      c[++k] = b[j++];
      d[k] = 1;
    }
  }

  for(int i = 1; i <= n + m; i++) sum[i] = sum[i - 1] + c[i];

  for(int i = 0; i <= n + m; i++) pref[i] = suff[i] = 1e16;
  for(int i = 0; i <= n + m; i++) _pref[i] = _suff[i] = 1e16;

  pref[0] = 0;

  for(int i = 1, cnt = 0; i <= n + m; ) {
    int j = i;
    while (j <= n + m && d[j] == d[i]) j++; j--;
    for(int k = cnt + 1; k <= j - i + 1; k++) pref[k] = min(pref[k], pref[k - 1]);
//    cout << i << " " << j << "@" << endl;
//    cout << pref[2] << endl;
    for(int k = i - 1; k <= j; k++) {
      if (i == 1 && k > 0) break;
      long long f = sum[k] - sum[i - 1] + min(pref[k - i + 1] - (k - i + 1) * c[i - 1],
                                          suff[k - i + 1] - (k - i + 1) * c[i]);
      _pref[j - k] = f - (sum[j] - sum[k]) + (j - k) * c[j];
      _suff[j - k] = f - (sum[j] - sum[k]) + (j - k) * c[j + 1];

      if (k == i && k == j) {
        _pref[j - k + 1] = min(_pref[j - k + 1], f - (sum[j] - sum[k]) + c[j]);
        _suff[j - k + 1] = min(_suff[j - k + 1], f - (sum[j] - sum[k]) + c[j + 1]);
      }
    }
    for(int i = 0; i <= max(j - i + 1, cnt); i++) pref[i] = suff[i] = 1e18;
    cnt = j - i + 1;
    for(int i = 0; i <= cnt; i++) pref[i] = _pref[i], suff[i] = _suff[i];
    for(int k = 2; k <= cnt; k++) pref[k] = min(pref[k - 1], pref[k]);
    for(int k = cnt - 1; k >= 0; k--) suff[k] = min(suff[k + 1], suff[k]);
    i = j + 1;
  }

  return pref[0];
}

#ifdef ngu
int main() {
  freopen ("task.inp", "r", stdin);
  freopen ("task.out", "w", stdout);
	int n, m;
	assert(2 == scanf("%d %d", &n, &m));

	vector<int> r(n), b(m);
	for(int i = 0; i < n; i++)
		assert(1 == scanf("%d", &r[i]));
	for(int i = 0; i < m; i++)
		assert(1 == scanf("%d", &b[i]));

	long long res = min_total_length(r, b);
	printf("%lld\n", res);

	return 0;
}
#endif // ngu

Compilation message

wiring.cpp: In function 'long long int min_total_length(std::vector<int>, std::vector<int>)':
wiring.cpp:20:32: warning: unused variable 'sum' [-Wunused-variable]
   20 |   for(int i = 1, j = 1, k = 0, sum = 0; i <= n || j <= m;) {
      |                                ^~~
wiring.cpp:40:5: warning: this 'while' clause does not guard... [-Wmisleading-indentation]
   40 |     while (j <= n + m && d[j] == d[i]) j++; j--;
      |     ^~~~~
wiring.cpp:40:45: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'while'
   40 |     while (j <= n + m && d[j] == d[i]) j++; j--;
      |                                             ^
# Verdict Execution time Memory Grader output
1 Correct 3 ms 16732 KB Output is correct
2 Correct 2 ms 16732 KB Output is correct
3 Correct 2 ms 16984 KB Output is correct
4 Correct 2 ms 16732 KB Output is correct
5 Correct 3 ms 16728 KB Output is correct
6 Correct 3 ms 16732 KB Output is correct
7 Correct 3 ms 16732 KB Output is correct
8 Correct 2 ms 16732 KB Output is correct
9 Correct 2 ms 16732 KB Output is correct
10 Correct 2 ms 16732 KB Output is correct
11 Correct 2 ms 16732 KB Output is correct
12 Correct 2 ms 16732 KB Output is correct
13 Correct 2 ms 16848 KB Output is correct
14 Correct 2 ms 16732 KB Output is correct
15 Correct 2 ms 16728 KB Output is correct
16 Correct 2 ms 16728 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 16732 KB Output is correct
2 Correct 2 ms 16732 KB Output is correct
3 Incorrect 18 ms 29776 KB 3rd lines differ - on the 1st token, expected: '41596985758595', found: '8388298625923'
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 16728 KB Output is correct
2 Correct 2 ms 16732 KB Output is correct
3 Execution timed out 1090 ms 32840 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 16732 KB Output is correct
2 Correct 21 ms 31944 KB Output is correct
3 Correct 597 ms 32164 KB Output is correct
4 Correct 35 ms 32092 KB Output is correct
5 Correct 597 ms 32168 KB Output is correct
6 Correct 2 ms 16732 KB Output is correct
7 Correct 3 ms 16848 KB Output is correct
8 Correct 2 ms 16732 KB Output is correct
9 Correct 2 ms 16732 KB Output is correct
10 Correct 2 ms 16732 KB Output is correct
11 Correct 2 ms 16732 KB Output is correct
12 Correct 2 ms 16728 KB Output is correct
13 Correct 2 ms 16728 KB Output is correct
14 Correct 2 ms 16728 KB Output is correct
15 Correct 2 ms 16732 KB Output is correct
16 Correct 2 ms 16732 KB Output is correct
17 Correct 2 ms 16728 KB Output is correct
18 Incorrect 19 ms 32088 KB 3rd lines differ - on the 1st token, expected: '2300170053', found: '-10529762043'
19 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 16732 KB Output is correct
2 Correct 2 ms 16732 KB Output is correct
3 Correct 2 ms 16984 KB Output is correct
4 Correct 2 ms 16732 KB Output is correct
5 Correct 3 ms 16728 KB Output is correct
6 Correct 3 ms 16732 KB Output is correct
7 Correct 3 ms 16732 KB Output is correct
8 Correct 2 ms 16732 KB Output is correct
9 Correct 2 ms 16732 KB Output is correct
10 Correct 2 ms 16732 KB Output is correct
11 Correct 2 ms 16732 KB Output is correct
12 Correct 2 ms 16732 KB Output is correct
13 Correct 2 ms 16848 KB Output is correct
14 Correct 2 ms 16732 KB Output is correct
15 Correct 2 ms 16728 KB Output is correct
16 Correct 2 ms 16728 KB Output is correct
17 Correct 3 ms 16732 KB Output is correct
18 Correct 2 ms 16732 KB Output is correct
19 Incorrect 18 ms 29776 KB 3rd lines differ - on the 1st token, expected: '41596985758595', found: '8388298625923'
20 Halted 0 ms 0 KB -