This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |