Submission #1344954

#TimeUsernameProblemLanguageResultExecution timeMemory
1344954Nika533Two Transportations (JOI19_transportations)C++20
Compilation error
0 ms0 KiB
#include "Azer.h"
#include <bits/stdc++.h>
#define pb push_back
#define f first
#define s second
#define MOD 1000000007
#define pii pair<int,int>
#define all(x) (x).begin(),(x).end()
#define allr(x) (x).rbegin(),(x).rend()
using namespace std;

namespace {
	int n,dist[2005],fix[2005];
	vector<pair<int,int>> g[2005];
	priority_queue<pair<int,int>> q;
	int cur,w,idx;
	int w2,idx2,num2;
	bool MM;
	int last;
}  

void InitA(int N, int A, vector<int> U, vector<int> V, vector<int> C) {
	n=N;
	for (int i=0; i<A; i++) {
		g[U[i]].pb({V[i],C[i]});
		g[V[i]].pb({U[i],C[i]});
	}
	for (int i=0; i<n; i++) {
		dist[i]=1000005; fix[i]=0;
		g[i].pb({n,1000005});
	}
	dist[n]=1000005; fix[n]=0;
	dist[0]=0; 
	q.push({0,0}); q.push({-dist[n],n});
	fix[0]=1;
	
	priority_queue<pii> q2; q2.push({0,0});
	vector<int> f(n,0);
	while (!q2.empty()) {
		int v=q2.top().s; q2.pop();
		if (f[v]) continue;
		q.push({-dist[v],v});
		f[v]=1;
		for (auto L:g[v]) {
			int u=L.f,wei=L.s;
			if (dist[u]>dist[v]+wei) {
				dist[u]=dist[v]+wei;
				q2.push({-dist[u],u});
			}
		}
	}
	
	last=0;
	while (q.top().s<n && fix[q.top().s]) q.pop();
	cur=q.top().s; w=dist[cur]; idx=8; w2=0; idx2=8; MM=0; num2=0;
	int NUM=w-last;
	if (NUM>500) NUM=501;
	while (idx>=0) {
		SendA(NUM&(1<<idx)); idx--;
	}
}

void ReceiveA(bool x) {
	if (MM==0) {
		if (x) w2+=(1<<idx2);
		idx2--;
		if (idx2==-1) {
			if (w==w2+last && w==501) {
				return;
			}
			if (w<=w2+last) {
				idx=10;
				fix[cur]=1; last=dist[cur]; 
				while (idx>=0) {
					SendA(cur&(1<<idx)); idx--;
				}
				while (q.top().s<n && fix[q.top().s]) q.pop();
				cur=q.top().s; w=dist[cur]; idx=8; w2=0; idx2=8; MM=0; 
				int NUM=w-last;
				if (NUM>500) NUM=501;
				while (idx>=0) {
					SendA(NUM&(1<<idx)); idx--;
				}
			}
			else {
				MM=1; idx2=10; num2=0;
			}
		}
	}
	else {
		if (x) num2+=(1<<idx2);
		idx2--;
		if (idx2==-1) {
			dist[num2]=w2+last; last+=w2; fix[num2]=1; 
			priority_queue<pii> q2; q2.push({-dist[num2],num2});
			vector<int> f(n,0);
			while (!q2.empty()) {
				int v=q2.top().s; q2.pop();
				if (f[v]) continue;
				f[v]=1;
				for (auto L:g[v]) {
					int u=L.f,wei=L.s;
					if (dist[u]>dist[v]+wei) {
						dist[u]=dist[v]+wei;
						q2.push({-dist[u],u});
						q.push({-dist[u],u});
					}
				}
			}
			while (q.top().s<n && fix[q.top().s]) q.pop();
			cur=q.top().s; w=dist[cur]; idx=8; w2=0; idx2=8; MM=0;
			int NUM=w-last;
			if (NUM>500) NUM=501;
			while (idx>=0) {
				SendA(NUM&(1<<idx)); idx--;
			}
		}
	}
}

vector<int> Answer() {
	vector<int> ans(n);
	for (int k=0; k<n; k++) {
		ans[k]=dist[k];
	}
	return ans;
}
#include "Baijan.h"
#include <bits/stdc++.h>
#define pb push_back
#define f first
#define s second
#define MOD 1000000007
#define pii pair<int,int>
#define all(x) (x).begin(),(x).end()
#define allr(x) (x).rbegin(),(x).rend()
using namespace std;

namespace {
	int nn,distt[2005],fixx[2005];
	vector<pair<int,int>> gg[2005];
	priority_queue<pair<int,int>> qq;
	int curr,ww,idxx;
	int w22,idx22,num22;
	bool MMM;
	int lastt=0;
}  

void InitB(int N, int B, vector<int> S, vector<int> T, vector<int> D) {
	nn=N;
	for (int i=0; i<B; i++) {
		gg[S[i]].pb({T[i],D[i]});
		gg[T[i]].pb({S[i],D[i]});
	}
	for (int i=0; i<nn; i++) {
		distt[i]=1000005; fixx[i]=0;
		gg[i].pb({nn,1000005});
	}
	distt[nn]=1000005; fixx[nn]=0;
	distt[0]=0; 
	qq.push({0,0}); qq.push({-distt[nn],nn});
	fixx[0]=1;
	
	priority_queue<pii> q2; q2.push({0,0});
	vector<int> f(nn,0);
	while (!q2.empty()) {
		int v=q2.top().s; q2.pop();
		if (f[v]) continue;
		f[v]=1;
		for (auto L:gg[v]) {
			int u=L.f,wei=L.s;
			if (distt[u]>distt[v]+wei) {
				distt[u]=distt[v]+wei;
				q2.push({-distt[u],u});
				qq.push({-distt[u],u});
			}
		}
	}
	idxx=8; w22=0; idx22=8; MMM=0; num22=0;
	lastt=0;
}

void ReceiveB(bool y) {
	if (MMM==0) {
		if (y) w22+=(1<<idx22);
		idx22--;
		if (idx22==-1) {
			while (qq.top().s<nn && fixx[qq.top().s]) qq.pop();
			curr=qq.top().s; ww=distt[curr];
			if (ww<w22+last) {
				fixx[curr]=1; 
				idxx=8; w22=0; idx22=8; MMM=0;
				int NUM=ww-lastt;
				if (NUM>500) NUM=501;
				while (idxx>=0) {
					SendB(NUM&(1<<idxx)); idxx--;
				}
				idxx=10;
				while (idxx>=0) {
					SendB(curr&(1<<idxx)); idxx--;
				}
				idxx=8; w22=0; idx22=8; MMM=0;
				lastt=distt[curr]; 
			}
			else {
				int NUM=ww-lastt;
				if (NUM>500) NUM=501;
				while (idxx>=0) {
					SendB(NUM&(1<<idxx)); idxx--;
				}
				MMM=1; idx22=10; num22=0;
			}
		}
	}
	else {
		if (y) num22+=(1<<idx22);
		idx22--;
		if (idx22==-1) {
			distt[num22]=w22+lastt; fixx[num22]=1; lastt+=w22; 
			priority_queue<pii> q2; q2.push({-distt[num22],num22});
			vector<int> f(nn,0);
			while (!q2.empty()) {
				int v=q2.top().s; q2.pop();
				if (f[v]) continue;
				f[v]=1;
				for (auto L:gg[v]) {
					int u=L.f,wei=L.s;
					if (distt[u]>distt[v]+wei) {
						distt[u]=distt[v]+wei;
						q2.push({-distt[u],u});
						qq.push({-distt[u],u});
					}
				}
			}
			idxx=8; w22=0; idx22=8; MMM=0;
		}
	}
}

Compilation message (stderr)

# 2번째 컴파일 단계

Baijan.cpp: In function 'void ReceiveB(bool)':
Baijan.cpp:63:36: error: 'last' was not declared in this scope; did you mean 'std::chrono::last'?
   63 |                         if (ww<w22+last) {
      |                                    ^~~~
      |                                    std::chrono::last
In file included from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:172,
                 from Baijan.cpp:2:
/usr/include/c++/13/chrono:502:32: note: 'std::chrono::last' declared here
  502 |     inline constexpr last_spec last{};
      |                                ^~~~