Submission #903885

# Submission time Handle Problem Language Result Execution time Memory
903885 2024-01-11T13:18:01 Z math_rabbit_1028 Wiring (IOI17_wiring) C++14
0 / 100
1 ms 448 KB
#include <bits/stdc++.h>
#include "wiring.h"
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;

vector<pii> arr;
vector<ll> sum;
vector<ll> dp;
ll min_total_length(vector<int> R, vector<int> B) {
	arr.push_back({0, 0});
	for (int i = 0; i < R.size(); i++) arr.push_back({R[i], 0});
	for (int i = 0; i < B.size(); i++) arr.push_back({B[i], 1});
	sort(arr.begin() + 1, arr.end());
	dp = vector<ll>(arr.size(), 1e18);
	sum = vector<ll>(arr.size(), 0);
	for (int i = 1; i < sum.size(); i++) sum[i] = sum[i - 1] + arr[i].first;

	dp[0] = 0;
	int a, b, last, i = 1;
	while (arr[i].second == arr[i+1].second) i++;
	b = i;
	for (i++; i < arr.size(); i++) {
		if (arr[i].second != arr[i-1].second) {
			a = b;
			b = 0;
			last = arr[i-1].first;
			ll val = 0;
			for (int j = i-1; j >= i-a; j--) {
				val += arr[i].first - arr[j].first;
				dp[i] = min(dp[i], dp[j-1] + val);
			}
		}
		b++;
		if (b <= a) {
			dp[i] = min(dp[i], dp[i-1] + arr[i].first - last);
			dp[i] = min(dp[i], dp[i-2*b] + (sum[i] - sum[i-b]) - (sum[i-b] - sum[i-2*b]));
		}
		else {
			dp[i] = min(dp[i], dp[i-1] + arr[i].first - last);
		}
	}

	return dp[arr.size()-1];
}

Compilation message

wiring.cpp: In function 'll min_total_length(std::vector<int>, std::vector<int>)':
wiring.cpp:12:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   12 |  for (int i = 0; i < R.size(); i++) arr.push_back({R[i], 0});
      |                  ~~^~~~~~~~~~
wiring.cpp:13:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   13 |  for (int i = 0; i < B.size(); i++) arr.push_back({B[i], 1});
      |                  ~~^~~~~~~~~~
wiring.cpp:17:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   17 |  for (int i = 1; i < sum.size(); i++) sum[i] = sum[i - 1] + arr[i].first;
      |                  ~~^~~~~~~~~~~~
wiring.cpp:23:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   23 |  for (i++; i < arr.size(); i++) {
      |            ~~^~~~~~~~~~~~
wiring.cpp:40:48: warning: 'last' may be used uninitialized in this function [-Wmaybe-uninitialized]
   40 |    dp[i] = min(dp[i], dp[i-1] + arr[i].first - last);
      |                                                ^~~~
wiring.cpp:35:3: warning: 'a' may be used uninitialized in this function [-Wmaybe-uninitialized]
   35 |   if (b <= a) {
      |   ^~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Incorrect 0 ms 348 KB 3rd lines differ - on the 1st token, expected: '15280', found: '15422'
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 344 KB 3rd lines differ - on the 1st token, expected: '904', found: '946'
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Incorrect 0 ms 360 KB 3rd lines differ - on the 1st token, expected: '17703', found: '17714'
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 448 KB 3rd lines differ - on the 1st token, expected: '27', found: '28'
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Incorrect 0 ms 348 KB 3rd lines differ - on the 1st token, expected: '15280', found: '15422'
4 Halted 0 ms 0 KB -