Submission #132795

# Submission time Handle Problem Language Result Execution time Memory
132795 2019-07-19T14:58:00 Z sebinkim Two Transportations (JOI19_transportations) C++14
84 / 100
1590 ms 85768 KB
#include <bits/stdc++.h>
 
#include "Azer.h"
 
using namespace std;
 
typedef pair <int, int> pii;
 
const int ID = 11;
const int DIST = 9;
 
namespace{
	priority_queue <pii> Q;
	vector <pii> G[2020];
	vector <int> D;
	bool chk[2020];
	int v, c, t, _d;
	int f = 0x02, b;
	int n, z, m;

	bool turn() { b = ((f >> 6) ^ (f >> 5)) & 1; f = (f << 1 | b) & 0x7f; return b; }
 
	void sendint(int x, int l)
	{
		x = min(x, (1 << l) - 1);
		
		for(; l--; ){
			SendA((x & (1 << l))? 1 : 0);
		}
	}
 
	void check()
	{
		int p, d;
		
		for(; !Q.empty(); Q.pop()){
			tie(d, p) = Q.top(); d = -d;
			if(!chk[p] && d == D[p]) break;
		}
		
		if(Q.empty()) return;
		
		tie(d, p) = Q.top(); d = -d;
		
		sendint(d - z, DIST);
	}
 
	void apply(int p, int d)
	{
		chk[p] = 1; D[p] = d; z = d;
		
		for(pii &t: G[p]){
			if(!chk[t.first] && D[t.first] > d + t.second){
				D[t.first] = d + t.second;
				Q.emplace(-d - t.second, t.first);
			}
		}
		
		if(turn()){
			m = 1; check();
		}
		else m = 2;
	}

	void check(int d1)
	{
		int p2, d2;
		
		for(; !Q.empty(); Q.pop()){
			tie(d2, p2) = Q.top(); d2 = -d2;
			if(!chk[p2] && D[p2] == d2) break;
		}
		
		tie(d2, p2) = Q.top(); d2 = -d2;
		
		if(d1 < d2){
			SendA(0);
			_d = d1, t = 1;
		}
		else{
			SendA(1); Q.pop();
			sendint(p2, ID);
			sendint(d2 - z, DIST);
			apply(p2, d2);
		}
	}
}

void InitA(int N, int A, vector <int> U, vector <int> V, vector<int> C)
{
	n = N; D.resize(n, 0);
	
	int i;
	
	for(i=0; i<A; i++){
		G[U[i]].emplace_back(V[i], C[i]);
		G[V[i]].emplace_back(U[i], C[i]);
	}
	
	for(i=1; i<n; i++){
		D[i] = 1e9;
	}
	
	for(i=0; i<n; i++){
		Q.emplace(-D[i], i);
	}
	
	apply(0, 0);
}

void ReceiveA(bool x)
{
	if(m == 1){
		if(t == 0){
			if(!x){
				int d, p;
				tie(d, p) = Q.top();
				d = -d; Q.pop();
				sendint(p, ID);
				apply(p, d);
			}
			else t = 1;
		}
		else{
			v = v << 1 | x; c ++;
		
			if(c == ID + DIST){
				int p = v >> DIST;
				int d = z + (v & ((1 << DIST) - 1));
				v = 0; c = 0; t = 0;
				apply(p, d);
			}
		}
	}
	else{
		if(t == 0){
			v = v << 1 | x; c ++;
		
			if(c == DIST){
				int d = z + v;
				v = 0; c = 0;
				check(d);
			}
		}
		else{
			v = v << 1 | x; c ++;
		
			if(c == ID){
				int p = v, d = _d;
				v = 0; c = 0; t = 0;
				apply(p, d);
			}
		}
	}
}

vector <int> Answer() { return D; }
#include <bits/stdc++.h>
 
#include "Baijan.h"

using namespace std;
 
typedef pair <int, int> pii;
 
const int ID = 11;
const int DIST = 9;
 
namespace{
	priority_queue <pii> Q;
	vector <pii> G[2020];
	vector <int> D;
	bool chk[2020];
	int v, c, t, _d;
	int f = 0x02, b;
	int n, z, m;

	bool turn() { b = ((f >> 6) ^ (f >> 5)) & 1; f = (f << 1 | b) & 0x7f; return b; }
 
	void sendint(int x, int l)
	{
		x = min(x, (1 << l) - 1);
		
		for(; l--; ){
			SendB((x & (1 << l))? 1 : 0);
		}
	}
 
	void check()
	{
		int p, d;
		
		for(; !Q.empty(); Q.pop()){
			tie(d, p) = Q.top(); d = -d;
			if(!chk[p] && d == D[p]) break;
		}
		
		if(Q.empty()) return;
		
		tie(d, p) = Q.top(); d = -d;
		
		sendint(d - z, DIST);
	}
 
	void apply(int p, int d)
	{
		chk[p] = 1; D[p] = d; z = d;
		
		for(pii &t: G[p]){
			if(!chk[t.first] && D[t.first] > d + t.second){
				D[t.first] = d + t.second;
				Q.emplace(-d - t.second, t.first);
			}
		}
		
		if(!turn()){
			m = 1; check();
		}
		else m = 2;
	}

	void check(int d1)
	{
		int p2, d2;
		
		for(; !Q.empty(); Q.pop()){
			tie(d2, p2) = Q.top(); d2 = -d2;
			if(!chk[p2] && D[p2] == d2) break;
		}
		
		tie(d2, p2) = Q.top(); d2 = -d2;
		
		if(d1 < d2){
			SendB(0);
			_d = d1, t = 1;
		}
		else{
			SendB(1); Q.pop();
			sendint(p2, ID);
			sendint(d2 - z, DIST);
			apply(p2, d2);
		}
	}
}

void InitB(int N, int B, vector <int> S, vector<int> T, vector<int> C)
{
	n = N; D.resize(n, 0);
	
	int i;
	
	for(i=0; i<B; i++){
		G[S[i]].emplace_back(T[i], C[i]);
		G[T[i]].emplace_back(S[i], C[i]);
	}
	
	for(i=1; i<n; i++){
		D[i] = 1e9;
	}
	
	for(i=0; i<n; i++){
		Q.emplace(-D[i], i);
	}
	
	apply(0, 0);
}

void ReceiveB(bool x)
{
	if(m == 1){
		if(t == 0){
			if(!x){
				int d, p;
				tie(d, p) = Q.top();
				d = -d; Q.pop();
				sendint(p, ID);
				apply(p, d);
			}
			else t = 1;
		}
		else{
			v = v << 1 | x; c ++;
		
			if(c == ID + DIST){
				int p = v >> DIST;
				int d = z + (v & ((1 << DIST) - 1));
				v = 0; c = 0; t = 0;
				apply(p, d);
			}
		}
	}
	else{
		if(t == 0){
			v = v << 1 | x; c ++;
		
			if(c == DIST){
				int d = z + v;
				v = 0; c = 0;
				check(d);
			}
		}
		else{
			v = v << 1 | x; c ++;
		
			if(c == ID){
				int p = v, d = _d;
				v = 0; c = 0; t = 0;
				apply(p, d);
			}
		}
	}
}
# Verdict Execution time Memory Grader output
1 Correct 966 ms 1608 KB Output is correct
2 Correct 8 ms 1216 KB Output is correct
3 Correct 786 ms 1760 KB Output is correct
4 Correct 1128 ms 20144 KB Output is correct
5 Correct 62 ms 1464 KB Output is correct
6 Correct 946 ms 4440 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 1248 KB Output is correct
2 Correct 861 ms 1760 KB Output is correct
3 Correct 732 ms 1856 KB Output is correct
4 Correct 1298 ms 55200 KB Output is correct
5 Correct 1430 ms 48152 KB Output is correct
6 Correct 154 ms 1248 KB Output is correct
7 Correct 1378 ms 48568 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 867 ms 1816 KB Output is correct
2 Correct 8 ms 1248 KB Output is correct
3 Correct 958 ms 1864 KB Output is correct
4 Correct 890 ms 1744 KB Output is correct
5 Correct 762 ms 1760 KB Output is correct
6 Correct 878 ms 1880 KB Output is correct
7 Correct 714 ms 1624 KB Output is correct
8 Correct 924 ms 1800 KB Output is correct
9 Correct 907 ms 1728 KB Output is correct
10 Correct 682 ms 1800 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 362 ms 1760 KB Output is correct
2 Correct 410 ms 1696 KB Output is correct
3 Correct 606 ms 23688 KB Output is correct
4 Correct 376 ms 1528 KB Output is correct
5 Correct 602 ms 17400 KB Output is correct
6 Correct 460 ms 1376 KB Output is correct
7 Correct 522 ms 1528 KB Output is correct
8 Correct 514 ms 1864 KB Output is correct
9 Correct 756 ms 35728 KB Output is correct
10 Correct 722 ms 36128 KB Output is correct
11 Correct 1118 ms 61080 KB Output is correct
12 Correct 950 ms 53640 KB Output is correct
13 Correct 471 ms 1688 KB Output is correct
14 Correct 8 ms 1200 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 362 ms 1760 KB Output is correct
2 Correct 410 ms 1696 KB Output is correct
3 Correct 606 ms 23688 KB Output is correct
4 Correct 376 ms 1528 KB Output is correct
5 Correct 602 ms 17400 KB Output is correct
6 Correct 460 ms 1376 KB Output is correct
7 Correct 522 ms 1528 KB Output is correct
8 Correct 514 ms 1864 KB Output is correct
9 Correct 756 ms 35728 KB Output is correct
10 Correct 722 ms 36128 KB Output is correct
11 Correct 1118 ms 61080 KB Output is correct
12 Correct 950 ms 53640 KB Output is correct
13 Correct 471 ms 1688 KB Output is correct
14 Correct 8 ms 1200 KB Output is correct
15 Correct 484 ms 1760 KB Output is correct
16 Correct 492 ms 1192 KB Output is correct
17 Correct 572 ms 1512 KB Output is correct
18 Correct 792 ms 17792 KB Output is correct
19 Correct 316 ms 1592 KB Output is correct
20 Correct 652 ms 17848 KB Output is correct
21 Correct 536 ms 1936 KB Output is correct
22 Correct 468 ms 1856 KB Output is correct
23 Correct 776 ms 44216 KB Output is correct
24 Correct 910 ms 43968 KB Output is correct
25 Correct 1502 ms 74960 KB Output is correct
26 Correct 1304 ms 64624 KB Output is correct
27 Correct 376 ms 2024 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 362 ms 1760 KB Output is correct
2 Correct 410 ms 1696 KB Output is correct
3 Correct 606 ms 23688 KB Output is correct
4 Correct 376 ms 1528 KB Output is correct
5 Correct 602 ms 17400 KB Output is correct
6 Correct 460 ms 1376 KB Output is correct
7 Correct 522 ms 1528 KB Output is correct
8 Correct 514 ms 1864 KB Output is correct
9 Correct 756 ms 35728 KB Output is correct
10 Correct 722 ms 36128 KB Output is correct
11 Correct 1118 ms 61080 KB Output is correct
12 Correct 950 ms 53640 KB Output is correct
13 Correct 471 ms 1688 KB Output is correct
14 Correct 8 ms 1200 KB Output is correct
15 Correct 484 ms 1760 KB Output is correct
16 Correct 492 ms 1192 KB Output is correct
17 Correct 572 ms 1512 KB Output is correct
18 Correct 792 ms 17792 KB Output is correct
19 Correct 316 ms 1592 KB Output is correct
20 Correct 652 ms 17848 KB Output is correct
21 Correct 536 ms 1936 KB Output is correct
22 Correct 468 ms 1856 KB Output is correct
23 Correct 776 ms 44216 KB Output is correct
24 Correct 910 ms 43968 KB Output is correct
25 Correct 1502 ms 74960 KB Output is correct
26 Correct 1304 ms 64624 KB Output is correct
27 Correct 376 ms 2024 KB Output is correct
28 Correct 866 ms 1776 KB Output is correct
29 Correct 676 ms 1296 KB Output is correct
30 Correct 1266 ms 41944 KB Output is correct
31 Correct 671 ms 1760 KB Output is correct
32 Correct 1064 ms 37576 KB Output is correct
33 Correct 574 ms 1688 KB Output is correct
34 Correct 682 ms 2064 KB Output is correct
35 Correct 624 ms 1696 KB Output is correct
36 Correct 992 ms 49176 KB Output is correct
37 Correct 1128 ms 49168 KB Output is correct
38 Correct 1590 ms 85768 KB Output is correct
39 Correct 1248 ms 78520 KB Output is correct
40 Correct 584 ms 2144 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 966 ms 1608 KB Output is correct
2 Correct 8 ms 1216 KB Output is correct
3 Correct 786 ms 1760 KB Output is correct
4 Correct 1128 ms 20144 KB Output is correct
5 Correct 62 ms 1464 KB Output is correct
6 Correct 946 ms 4440 KB Output is correct
7 Correct 4 ms 1248 KB Output is correct
8 Correct 861 ms 1760 KB Output is correct
9 Correct 732 ms 1856 KB Output is correct
10 Correct 1298 ms 55200 KB Output is correct
11 Correct 1430 ms 48152 KB Output is correct
12 Correct 154 ms 1248 KB Output is correct
13 Correct 1378 ms 48568 KB Output is correct
14 Correct 867 ms 1816 KB Output is correct
15 Correct 8 ms 1248 KB Output is correct
16 Correct 958 ms 1864 KB Output is correct
17 Correct 890 ms 1744 KB Output is correct
18 Correct 762 ms 1760 KB Output is correct
19 Correct 878 ms 1880 KB Output is correct
20 Correct 714 ms 1624 KB Output is correct
21 Correct 924 ms 1800 KB Output is correct
22 Correct 907 ms 1728 KB Output is correct
23 Correct 682 ms 1800 KB Output is correct
24 Correct 362 ms 1760 KB Output is correct
25 Correct 410 ms 1696 KB Output is correct
26 Correct 606 ms 23688 KB Output is correct
27 Correct 376 ms 1528 KB Output is correct
28 Correct 602 ms 17400 KB Output is correct
29 Correct 460 ms 1376 KB Output is correct
30 Correct 522 ms 1528 KB Output is correct
31 Correct 514 ms 1864 KB Output is correct
32 Correct 756 ms 35728 KB Output is correct
33 Correct 722 ms 36128 KB Output is correct
34 Correct 1118 ms 61080 KB Output is correct
35 Correct 950 ms 53640 KB Output is correct
36 Correct 471 ms 1688 KB Output is correct
37 Correct 8 ms 1200 KB Output is correct
38 Correct 484 ms 1760 KB Output is correct
39 Correct 492 ms 1192 KB Output is correct
40 Correct 572 ms 1512 KB Output is correct
41 Correct 792 ms 17792 KB Output is correct
42 Correct 316 ms 1592 KB Output is correct
43 Correct 652 ms 17848 KB Output is correct
44 Correct 536 ms 1936 KB Output is correct
45 Correct 468 ms 1856 KB Output is correct
46 Correct 776 ms 44216 KB Output is correct
47 Correct 910 ms 43968 KB Output is correct
48 Correct 1502 ms 74960 KB Output is correct
49 Correct 1304 ms 64624 KB Output is correct
50 Correct 376 ms 2024 KB Output is correct
51 Correct 866 ms 1776 KB Output is correct
52 Correct 676 ms 1296 KB Output is correct
53 Correct 1266 ms 41944 KB Output is correct
54 Correct 671 ms 1760 KB Output is correct
55 Correct 1064 ms 37576 KB Output is correct
56 Correct 574 ms 1688 KB Output is correct
57 Correct 682 ms 2064 KB Output is correct
58 Correct 624 ms 1696 KB Output is correct
59 Correct 992 ms 49176 KB Output is correct
60 Correct 1128 ms 49168 KB Output is correct
61 Correct 1590 ms 85768 KB Output is correct
62 Correct 1248 ms 78520 KB Output is correct
63 Correct 584 ms 2144 KB Output is correct
64 Correct 1004 ms 2064 KB Output is correct
65 Incorrect 739 ms 23564 KB Wrong Answer [2]
66 Halted 0 ms 0 KB -