Submission #617870

#TimeUsernameProblemLanguageResultExecution timeMemory
617870Sergio_2357Wiring (IOI17_wiring)C++17
0 / 100
1 ms432 KiB
#include "wiring.h"
#include <bits/stdc++.h>

using namespace std;

#define int long long

#define F first
#define S second

typedef vector<int> vi;
typedef vector<vi> vii;
typedef vector<vii> viii;

int min_total_length(vector<signed> r, vector<signed> b)
{
    int res = 0;
    int n = r.size() + b.size();
    vector<pair<int, int>> a;
    for (int i = 0; i < r.size(); i++)
        a.push_back({ r[i], 0 });
    for (int i = 0; i < b.size(); i++)
        a.push_back({ b[i], 1 });
    sort(a.begin(), a.end());
    viii dp(n + 1, vii(r.size() + 2, vi(b.size() + 2, 1e18)));
    dp[0][0][0] = 0;
    int lst = 0;
    int lstr, lstb;
    lstr = lstb = -1e18;
    for (int i = 0; i < n; i++) {
        int d = a[i].F - lst;
        if (a[i].S == 0)
            lstr = a[i].F;
        else
            lstb = a[i].F;
        //cout << a[i].F << ' ' << a[i].S << ' ' << d << endl;
        for (int j = 0; j <= r.size(); j++) {
            for (int k = 0; k <= b.size(); k++) {
                if (a[i].S == 0) {
                    dp[i + 1][j][k] = min(dp[i][j][k] + (d * (j + k)) + (a[i].F - lstb), min(dp[i][j][k + 1] + (d * (j + k + 1)), (j > 0 ? dp[i][j - 1][k] + (d * (j + k - 1)) : (int)1e18)));
                } else {
                    dp[i + 1][j][k] = min(dp[i][j][k] + (d * (j + k)) + (a[i].F - lstr), min(dp[i][j + 1][k] + (d * (j + k + 1)), (k > 0 ? dp[i][j][k - 1] + (d * (j + k - 1)) : (int)1e18)));
                }
                //cout << dp[i + 1][j][k] << ' ';
            }
            //cout << endl;
        }
        //cout << endl
        //     << endl;
        lst = a[i].F;
    }
    return dp[n][0][0];
}

Compilation message (stderr)

wiring.cpp: In function 'long long int min_total_length(std::vector<int>, std::vector<int>)':
wiring.cpp:20:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   20 |     for (int i = 0; i < r.size(); i++)
      |                     ~~^~~~~~~~~~
wiring.cpp:22:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   22 |     for (int i = 0; i < b.size(); i++)
      |                     ~~^~~~~~~~~~
wiring.cpp:37:27: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |         for (int j = 0; j <= r.size(); j++) {
      |                         ~~^~~~~~~~~~~
wiring.cpp:38:31: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 |             for (int k = 0; k <= b.size(); k++) {
      |                             ~~^~~~~~~~~~~
wiring.cpp:17:9: warning: unused variable 'res' [-Wunused-variable]
   17 |     int res = 0;
      |         ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...