Submission #831685

# Submission time Handle Problem Language Result Execution time Memory
831685 2023-08-20T12:18:49 Z NoName14159 Two Transportations (JOI19_transportations) C++17
68 / 100
591 ms 49404 KB
#include "Azer.h"
#include <stdlib.h>
#include <cassert>
#include <queue>
#define MAXN 2007
#define MAXM 500007
#define vi std::vector<int>
#define pii std::pair<int,int>
#define vpii std::vector<pii>
#define pqpii std::priority_queue<pii,vpii,std::greater<pii>>
#define LOOP(I,X) for(int I=0;I<X;I++)
#define pub push_back
namespace{
	enum Mode{
		CL, // choose leader
		RE, // recommend edge
		DW, // determine winner
		SR, // send relax
		RX  // relax
	};
	Mode mode;
	bool leader;
	bool winner;
	int n;
	int dis[MAXN];
	bool visited[MAXN]={};
	vpii e[MAXN];
	pqpii pq;
	pii rec;
	int rec_other;
	int relax_w=0;
	int relax_v;
	bool buf[58007];
	int buf_size=0;
	int buf_now=0;
	int t=0;
	int bits_next;
int cnt=0;
	int Read(int bits){
		int ans=0;
		LOOP(i,bits){
			ans<<=1;
			ans|=(int)buf[buf_now+i];
		}
		buf_now+=bits;
		return ans;
	}
	void Send(int bits,int x){
		LOOP(i,bits){
cnt++;
assert(buf_size+cnt<=58000);
			SendA((bool)((x>>(bits-1-i))&1));
		}
	}
	void Do(){
		while(t<n-1){
			if(mode==CL){
				mode=RE;
				if(leader){
					bool new_leader=true;//(bool)(std::rand()%2);
					Send(1,(int)new_leader);
					if(new_leader){
						leader=!leader;
					}
				}else{
					bool new_leader=(bool)Read(1);
					if(new_leader){
						leader=!leader;
					}
				}
				if(leader){
					bits_next=9;
					return;
				}
			}
			if(mode==RE){
				mode=DW;
				while(!pq.empty()){
					pii x=pq.top();
					if(!visited[x.second]){
						break;
					}
					pq.pop();
				}
				if(pq.empty()){
					rec={511,-1};
				}else{
					rec=pq.top();
					rec.first-=relax_w;
				}
				if(leader){
					rec_other=Read(9);
				}else{
					Send(9,rec.first);
					bits_next=1;
					return;
				}
			}
			if(mode==DW){
				mode=SR;
				if(leader){
					if(rec.first<=rec_other){
						Send(1,1);
						winner=true;
					}else{
						Send(1,0);
						winner=false;
					}
				}else{
					winner=!(bool)Read(1);
				}
				if(!winner){
					if(leader){
						bits_next=11;
					}else{
						bits_next=20;
					}
					return;
				}
			}
			if(mode==SR){
				mode=RX;
				if(leader){
					if(winner){
						Send(11,rec.second);
						relax_v=rec.second;
						Send(9,rec.first);
						relax_w+=rec.first;
					}else{
						relax_v=Read(11);
						relax_w+=rec_other;
					}
				}else{
					if(winner){
						Send(11,rec.second);
						relax_v=rec.second;
						relax_w+=rec.first;
					}else{
						relax_v=Read(11);
						relax_w+=Read(9);
					}
				}
			}
			if(mode==RX){
				mode=CL;
				dis[relax_v]=relax_w;
				visited[relax_v]=true;
				for(pii x:e[relax_v]){
					if(!visited[x.first]){
						pq.push({relax_w+x.second,x.first});
					}
				}
				t++;
//assert(t<n-1);
				if(!leader){
					bits_next=1;
					return;
				}
			}
		}
	}
}
void InitA(int N,int A,vi U,vi V,vi C){
	//std::srand(49);
	n=N;
	LOOP(i,A){
		e[U[i]].pub({V[i],C[i]});
		e[V[i]].pub({U[i],C[i]});
	}
	dis[0]=0;
	visited[0]=true;
	for(pii x:e[0]){
		pq.push({x.second,x.first});
	}
	mode=CL;
	leader=true;
	Do();
}
void ReceiveA(bool x){
	buf[buf_size]=x;
	buf_size++;
	if(buf_size-buf_now==bits_next){
		Do();
	}
}
vi Answer(){
	vi ans;
	LOOP(i,n){
		ans.pub(dis[i]);
	}
	return ans;
}
#include "Baijan.h"
#include <stdlib.h>
#include <cassert>
#include <queue>
#define MAXN 2007
#define MAXM 500007
#define vi std::vector<int>
#define pii std::pair<int,int>
#define vpii std::vector<pii>
#define pqpii std::priority_queue<pii,vpii,std::greater<pii>>
#define LOOP(I,X) for(int I=0;I<X;I++)
#define pub push_back
namespace{
	enum Mode{
		CL, // choose leader
		RE, // recommend edge
		DW, // determine winner
		SR, // send relax
		RX  // relax
	};
	Mode mode;
	bool leader;
	bool winner;
	int n;
	int dis[MAXN];
	bool visited[MAXN]={};
	vpii e[MAXN];
	pqpii pq;
	pii rec;
	int rec_other;
	int relax_w=0;
	int relax_v;
	bool buf[58007];
	int buf_size=0;
	int buf_now=0;
	int t=0;
	int bits_next;
int cnt=0;
	int Read(int bits){
		int ans=0;
		LOOP(i,bits){
			ans<<=1;
			ans|=(int)buf[buf_now+i];
		}
		buf_now+=bits;
		return ans;
	}
	void Send(int bits,int x){
		LOOP(i,bits){
cnt++;
assert(buf_size+cnt<=58000);
			SendB((bool)((x>>(bits-1-i))&1));
		}
	}
	void Do(){
		while(t<n-1){
			if(mode==CL){
				mode=RE;
				if(leader){
					bool new_leader=true;//(bool)(std::rand()%2);
					Send(1,(int)new_leader);
					if(new_leader){
						leader=!leader;
					}
				}else{
					bool new_leader=(bool)Read(1);
					if(new_leader){
						leader=!leader;
					}
				}
				if(leader){
					bits_next=9;
					return;
				}
			}
			if(mode==RE){
				mode=DW;
				while(!pq.empty()){
					pii x=pq.top();
					if(!visited[x.second]){
						break;
					}
					pq.pop();
				}
				if(pq.empty()){
					rec={511,-1};
				}else{
					rec=pq.top();
					rec.first-=relax_w;
				}
				if(leader){
					rec_other=Read(9);
				}else{
					Send(9,rec.first);
					bits_next=1;
					return;
				}
			}
			if(mode==DW){
				mode=SR;
				if(leader){
					if(rec.first<=rec_other){
						Send(1,1);
						winner=true;
					}else{
						Send(1,0);
						winner=false;
					}
				}else{
					winner=!(bool)Read(1);
				}
				if(!winner){
					if(leader){
						bits_next=11;
					}else{
						bits_next=20;
					}
					return;
				}
			}
			if(mode==SR){
				mode=RX;
				if(leader){
					if(winner){
						Send(11,rec.second);
						relax_v=rec.second;
						Send(9,rec.first);
						relax_w+=rec.first;
					}else{
						relax_v=Read(11);
						relax_w+=rec_other;
					}
				}else{
					if(winner){
						Send(11,rec.second);
						relax_v=rec.second;
						relax_w+=rec.first;
					}else{
						relax_v=Read(11);
						relax_w+=Read(9);
					}
				}
			}
			if(mode==RX){
				mode=CL;
				dis[relax_v]=relax_w;
				visited[relax_v]=true;
				for(pii x:e[relax_v]){
					if(!visited[x.first]){
						pq.push({relax_w+x.second,x.first});
					}
				}
				t++;
//assert(t<n-1);
				if(!leader){
					bits_next=1;
					return;
				}
			}
		}
	}
}
void InitB(int N,int A,vi U,vi V,vi C){
	//std::srand(49);
	n=N;
	LOOP(i,A){
		e[U[i]].pub({V[i],C[i]});
		e[V[i]].pub({U[i],C[i]});
	}
	dis[0]=0;
	visited[0]=true;
	for(pii x:e[0]){
		pq.push({x.second,x.first});
	}
	mode=CL;
	leader=false;
	bits_next=1;
}
void ReceiveB(bool x){
	buf[buf_size]=x;
	buf_size++;
	if(buf_size-buf_now==bits_next){
		Do();
	}
}
# Verdict Execution time Memory Grader output
1 Correct 384 ms 808 KB Output is correct
2 Correct 1 ms 672 KB Output is correct
3 Correct 304 ms 804 KB Output is correct
4 Correct 435 ms 10240 KB Output is correct
5 Correct 23 ms 936 KB Output is correct
6 Correct 374 ms 2564 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 664 KB Output is correct
2 Runtime error 170 ms 432 KB Execution killed with signal 13
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 370 ms 804 KB Output is correct
2 Correct 0 ms 656 KB Output is correct
3 Correct 357 ms 924 KB Output is correct
4 Failed 210 ms 544 KB Unexpected end of file - int32 expected (Baijan)
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 140 ms 728 KB Output is correct
2 Correct 177 ms 704 KB Output is correct
3 Correct 274 ms 13292 KB Output is correct
4 Correct 145 ms 772 KB Output is correct
5 Correct 292 ms 10096 KB Output is correct
6 Correct 139 ms 864 KB Output is correct
7 Correct 209 ms 796 KB Output is correct
8 Correct 179 ms 920 KB Output is correct
9 Correct 246 ms 19504 KB Output is correct
10 Correct 307 ms 19504 KB Output is correct
11 Correct 428 ms 38276 KB Output is correct
12 Correct 314 ms 36044 KB Output is correct
13 Correct 203 ms 840 KB Output is correct
14 Correct 0 ms 656 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 140 ms 728 KB Output is correct
2 Correct 177 ms 704 KB Output is correct
3 Correct 274 ms 13292 KB Output is correct
4 Correct 145 ms 772 KB Output is correct
5 Correct 292 ms 10096 KB Output is correct
6 Correct 139 ms 864 KB Output is correct
7 Correct 209 ms 796 KB Output is correct
8 Correct 179 ms 920 KB Output is correct
9 Correct 246 ms 19504 KB Output is correct
10 Correct 307 ms 19504 KB Output is correct
11 Correct 428 ms 38276 KB Output is correct
12 Correct 314 ms 36044 KB Output is correct
13 Correct 203 ms 840 KB Output is correct
14 Correct 0 ms 656 KB Output is correct
15 Correct 220 ms 740 KB Output is correct
16 Correct 182 ms 720 KB Output is correct
17 Correct 200 ms 716 KB Output is correct
18 Correct 290 ms 10088 KB Output is correct
19 Correct 225 ms 920 KB Output is correct
20 Correct 309 ms 10364 KB Output is correct
21 Correct 217 ms 940 KB Output is correct
22 Correct 243 ms 816 KB Output is correct
23 Correct 336 ms 22536 KB Output is correct
24 Correct 338 ms 22520 KB Output is correct
25 Correct 469 ms 44208 KB Output is correct
26 Correct 442 ms 40536 KB Output is correct
27 Correct 184 ms 892 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 140 ms 728 KB Output is correct
2 Correct 177 ms 704 KB Output is correct
3 Correct 274 ms 13292 KB Output is correct
4 Correct 145 ms 772 KB Output is correct
5 Correct 292 ms 10096 KB Output is correct
6 Correct 139 ms 864 KB Output is correct
7 Correct 209 ms 796 KB Output is correct
8 Correct 179 ms 920 KB Output is correct
9 Correct 246 ms 19504 KB Output is correct
10 Correct 307 ms 19504 KB Output is correct
11 Correct 428 ms 38276 KB Output is correct
12 Correct 314 ms 36044 KB Output is correct
13 Correct 203 ms 840 KB Output is correct
14 Correct 0 ms 656 KB Output is correct
15 Correct 220 ms 740 KB Output is correct
16 Correct 182 ms 720 KB Output is correct
17 Correct 200 ms 716 KB Output is correct
18 Correct 290 ms 10088 KB Output is correct
19 Correct 225 ms 920 KB Output is correct
20 Correct 309 ms 10364 KB Output is correct
21 Correct 217 ms 940 KB Output is correct
22 Correct 243 ms 816 KB Output is correct
23 Correct 336 ms 22536 KB Output is correct
24 Correct 338 ms 22520 KB Output is correct
25 Correct 469 ms 44208 KB Output is correct
26 Correct 442 ms 40536 KB Output is correct
27 Correct 184 ms 892 KB Output is correct
28 Correct 226 ms 768 KB Output is correct
29 Correct 220 ms 756 KB Output is correct
30 Correct 472 ms 24128 KB Output is correct
31 Correct 291 ms 848 KB Output is correct
32 Correct 437 ms 20968 KB Output is correct
33 Correct 197 ms 824 KB Output is correct
34 Correct 246 ms 876 KB Output is correct
35 Correct 246 ms 880 KB Output is correct
36 Correct 350 ms 25092 KB Output is correct
37 Correct 361 ms 25096 KB Output is correct
38 Correct 591 ms 49404 KB Output is correct
39 Correct 512 ms 47132 KB Output is correct
40 Correct 168 ms 916 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 384 ms 808 KB Output is correct
2 Correct 1 ms 672 KB Output is correct
3 Correct 304 ms 804 KB Output is correct
4 Correct 435 ms 10240 KB Output is correct
5 Correct 23 ms 936 KB Output is correct
6 Correct 374 ms 2564 KB Output is correct
7 Correct 0 ms 664 KB Output is correct
8 Runtime error 170 ms 432 KB Execution killed with signal 13
9 Halted 0 ms 0 KB -