Submission #263412

#TimeUsernameProblemLanguageResultExecution timeMemory
263412patrikpavic2Two Transportations (JOI19_transportations)C++17
0 / 100
6 ms1280 KiB
#include "Azer.h"
#include <vector>
#include <queue>
#include <cstdlib>

#define X first
#define Y second
#define PB push_back

using namespace std;

typedef vector < int > vi;
typedef pair < int, int > pii;

namespace {

const int N = 2005;

int n;
vector < pii > v[N];
queue < bool > info;
int dis[N], mks;

pii nadi_najblizeg(){
	int bst = 0, dod = 501; mks = 0;
	for(int i = 0;i < n;i++)
		if(dis[i] > mks) mks = dis[i];
	for(int i = 0;i < n;i++){
		if(dis[i] == -1) continue;
		for(pii nxt : v[i]){
			if(dis[nxt.X] != -1) continue;
			if(nxt.Y + dis[i] - mks < dod){
				dod = nxt.Y + dis[i] - mks;
				bst = nxt.X;
			}
		}
	}
	return {bst, dod};
}

bool daj_bit(){
	int ret = info.front(); info.pop();
	return ret;
}

int daj_broj(int ln){
	int ret = 0;
	for(int i = 0;i < ln;i++){
		if(daj_bit())
			ret += (1 << i);
	}
	return ret;
}

void posalji_broj(int x, int ln){
	for(int i = 0;i < ln;i++)
		SendA(!!(x & (1 << i)));
}

void korak(){
	int tko = rand() % 2;
	posalji_broj(tko, 1);
	pii tmp = nadi_najblizeg();
	int cv = tmp.X, brj = tmp.Y;
	if(tko){
		posalji_broj(brj, 9);
		int odg = daj_broj(1);
		if(!odg){
			posalji_broj(cv, 11);
		}
		else{
			brj = daj_broj(9);
			cv = daj_broj(11);
		}
	}
	else{
		int brj2 = daj_broj(9);
		if(brj2 <= brj){
			posalji_broj(0, 1);
			brj = brj2;
			cv = daj_broj(11);
		}
		else{
			posalji_broj(1, 1);
			posalji_broj(brj, 9);
			posalji_broj(cv, 11);
		}
	}
	dis[cv] = mks + brj;
}

} 

void InitA(int n, int a, vi U, vi V, vi C) {
	::n = n; 
	for(int i = 0;i < a;i++){
		v[U[i]].PB({V[i], C[i]});
		v[V[i]].PB({U[i], C[i]});
	}
	dis[0] = 0;
	for(int i = 1;i < n;i++)
		korak();
	Answer();
}



void ReceiveA(bool x) {
	info.push(x);
}

vi Answer() {
  vi ans(n);
  for (int k = 0; k < n; ++k) {
    ans[k] = dis[k];
  }
  return ans;
}








#include "Baijan.h"
#include <vector>
#include <queue>
#include <cstdlib>

#define X first
#define Y second
#define PB push_back

using namespace std;

typedef vector < int > vi;
typedef pair < int, int > pii;

namespace {

const int N = 2005;

int n;
vector < pii > v[N];
queue < bool > info;
int dis[N], mks;

pii nadi_najblizeg(){
	int bst = 0, dod = 501; mks = 0;
	for(int i = 0;i < n;i++)
		if(dis[i] > mks) mks = dis[i];
	for(int i = 0;i < n;i++){
		if(dis[i] == -1) continue;
		for(pii nxt : v[i]){
			if(dis[nxt.X] != -1) continue;
			if(nxt.Y + dis[i] - mks < dod){
				dod = nxt.Y + dis[i] - mks;
				bst = nxt.X;
			}
		}
	}
	return {bst, dod};
}

bool daj_bit(){
	int ret = info.front(); info.pop();
	return ret;
}

int daj_broj(int ln){
	int ret = 0;
	for(int i = 0;i < ln;i++){
		if(daj_bit())
			ret += (1 << i);
	}
	return ret;
}

void posalji_broj(int x, int ln){
	for(int i = 0;i < ln;i++)
		SendB(!!(x & (1 << i)));
}

void korak(){
	int tko = !(rand() % 2);
	posalji_broj(tko, 1);
	pii tmp = nadi_najblizeg();
	int cv = tmp.X, brj = tmp.Y;
	if(tko){
		posalji_broj(brj, 9);
		int odg = daj_broj(1);
		if(!odg){
			posalji_broj(cv, 11);
		}
		else{
			brj = daj_broj(9);
			cv = daj_broj(11);
		}
	}
	else{
		int brj2 = daj_broj(9);
		if(brj2 <= brj){
			posalji_broj(0, 1);
			brj = brj2;
			cv = daj_broj(11);
		}
		else{
			posalji_broj(1, 1);
			posalji_broj(brj, 9);
			posalji_broj(cv, 11);
		}
	}
	dis[cv] = mks + brj;
}

} 

void InitB(int n, int b, vi U, vi V, vi C) {
	::n = n; 
	for(int i = 0;i < b;i++){
		v[U[i]].PB({V[i], C[i]});
		v[V[i]].PB({U[i], C[i]});
	}
	dis[0] = 0;
	for(int i = 1;i < n;i++)
		korak();
}



void ReceiveB(bool x) {
	info.push(x);
}




#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...