Submission #284354

#TimeUsernameProblemLanguageResultExecution timeMemory
284354BertedWiring (IOI17_wiring)C++14
7 / 100
41 ms5624 KiB
#include "wiring.h"
#include <vector>
#include <stack>
#include <algorithm>
#include <assert.h>
#define ll long long
#define pii pair<int, int>
#define fst first
#define snd second

using namespace std;

const ll INF = 1e9 + 7, INF2 = 1e18 + 7;

vector<pii> A;
int C[401];
ll ret = 0;
ll dp[401][401][2];


ll min_total_length(vector<int> r, vector<int> b) 
{
	int i = 0, j = 0;
	while (i < r.size() || j < b.size())
	{
		int valL = (i < r.size()) ? r[i] : INF;
		int valR = (j < b.size()) ? b[j] : INF;
		if (valL < valR) 
		{
			A.push_back({valL, 0}); 
			C[A.size() - 1] = INF;
			if (j < b.size()) {C[A.size() - 1] = min(C[A.size() - 1], b[j] - valL);}
			if (j) {C[A.size() - 1] = min(C[A.size() - 1], valL - b[j - 1]);}
			i++;
		} 
		else 
		{
			A.push_back({valR, 1}); 
			C[A.size() - 1] = INF;
			if (i < r.size()) {C[A.size() - 1] = min(C[A.size() - 1], r[i] - valR);}
			if (i) {C[A.size() - 1] = min(C[A.size() - 1], valR - r[i - 1]);}
			j++;
		}
	} 
	for (int i = 0; i <= A.size(); i++)
	{
		for (int j = 0; j <= A.size(); j++) {dp[i][j][0] = dp[i][j][1] = INF2;}
	}
	dp[0][0][0] = 0;
	for (int i = 0; i < A.size(); i++)
	{
		for (int j = 0; j <= A.size(); j++)
		{
			for (int k = 0; k < 2; k++)
			{
				if (j == 0 && k) continue;
				dp[i + 1][j][k] = min(dp[i + 1][j][k], dp[i][j][k] + C[i]);
				if (j)
				{
					if (A[i].snd == k) {dp[i + 1][j + 1][k] = min(dp[i + 1][j + 1][k], dp[i][j][k] - A[i].fst);}
					else {dp[i + 1][j - 1][(j > 1) ? k : 0] = min(dp[i + 1][j - 1][(j > 1) ? k : 0], dp[i][j][k] + A[i].fst);}
				}
				else
				{
					dp[i + 1][j + 1][A[i].snd] = min(dp[i + 1][j + 1][A[i].snd], dp[i][j][k] - A[i].fst);
				}
			}
		}
	}
	return dp[A.size()][0][0];
}

Compilation message (stderr)

wiring.cpp: In function 'long long int min_total_length(std::vector<int>, std::vector<int>)':
wiring.cpp:24:11: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   24 |  while (i < r.size() || j < b.size())
      |         ~~^~~~~~~~~~
wiring.cpp:24:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   24 |  while (i < r.size() || j < b.size())
      |                         ~~^~~~~~~~~~
wiring.cpp:26:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   26 |   int valL = (i < r.size()) ? r[i] : INF;
      |               ~~^~~~~~~~~~
wiring.cpp:27:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |   int valR = (j < b.size()) ? b[j] : INF;
      |               ~~^~~~~~~~~~
wiring.cpp:32:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   32 |    if (j < b.size()) {C[A.size() - 1] = min(C[A.size() - 1], b[j] - valL);}
      |        ~~^~~~~~~~~~
wiring.cpp:40:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   40 |    if (i < r.size()) {C[A.size() - 1] = min(C[A.size() - 1], r[i] - valR);}
      |        ~~^~~~~~~~~~
wiring.cpp:45:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   45 |  for (int i = 0; i <= A.size(); i++)
      |                  ~~^~~~~~~~~~~
wiring.cpp:47:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   47 |   for (int j = 0; j <= A.size(); j++) {dp[i][j][0] = dp[i][j][1] = INF2;}
      |                   ~~^~~~~~~~~~~
wiring.cpp:50:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   50 |  for (int i = 0; i < A.size(); i++)
      |                  ~~^~~~~~~~~~
wiring.cpp:52:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   52 |   for (int j = 0; j <= A.size(); j++)
      |                   ~~^~~~~~~~~~~
#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...