QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#54969#4234. Tic Tac Toe CountingKING_UT#Compile Error//C++206.0kb2022-10-11 19:31:422022-10-11 19:31:44

Judging History

This is the latest submission verdict.

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-10-11 19:31:44]
  • Judged
  • [2022-10-11 19:31:42]
  • Submitted

answer

#include <bits/stdc++.h>

using namespace std;

#define rng(i,a,b) for(int i=int(a);i<int(b);i++)
#define rep(i,b) rng(i,0,b)
#define repn(i,b) rng(i,1,b+1)
#define gnr(i,a,b) for(int i=int(b)-1;i>=int(a);i--)
#define per(i,b) gnr(i,0,b)
#define pb push_back
#define a first
#define b second
#define eb emplace_back
template<class t>using vc=vector<t>;
template<class t, class u>bool chmin(t &a, u b){
	if(a > b){ a = b; return true;}
	else return false;
}
const int inf = 100000000;
int n, p, m;
vc<int>A;
bool in[55];
vc<pair<int,char>>edge[55];
int dd[55][55];
#define mp make_pair
using P=pair<int,int>;
using Q=pair<int,pair<int,P>>;

int dist[55][55][27];
void slv(){
	cin>>n>>p>>m;
	rep(i,p){
		int v;cin>>v;
		A.pb(v);
		in[v] = true;
	}
	rep(a,55)rep(b,55)if(a!=b)dd[a][b]=inf;
	rep(i,m){
		int u,v;string s;
		cin>>u>>s>>v;
		edge[u].eb(v, s[0]);
		dd[u][v] = 1;
	}
	repn(k,n)repn(i,n)repn(j,n)chmin(dd[i][j],dd[i][k]+dd[k][j]);
	auto iscap=[](char c){
		return 'A'<=c and c<='Z';
	};
	rep(a,55)rep(c,55)rep(d,27)dist[a][c][d]=inf;
	priority_queue<Q,vc<Q>,greater<Q>>que;
	
	repn(i,n){
		if(edge[i].size() < 2) continue;
		rep(j, edge[i].size()){
			rep(k, edge[i].size()){
				if(j==k)continue;
				char c = edge[i][j].b;
				int to = edge[i][j].a;
				char c2 = edge[i][k].b;
				int to2 = edge[i][k].a;
				
				if(iscap(c) == iscap(c2)){
					dist[to][to2][26] = dd[1][i]*2+2;
					que.push(mp(dist[to][to2][26], mp(to,mp(to2,26))));
				}
				else if(iscap(c)){
					dist[to][to2][c-'A'] = dd[1][i]*2+2;
					que.push(mp(dist[to][to2][c-'A'], mp(to,mp(to2,c-'A'))));
				}
			}
		}
	}
	while(!que.empty()){
		auto qq = que.top(); que.pop();
		int cs = qq.a;
		int u = qq.b.a;
		int v = qq.b.b.a;
		int t = qq.b.b.b;
		cout<<u<<" "<<v<<" "<<t<<" "<<cs<<endl;
		if(dist[u][v][t] != cs) continue;
		for(auto to:edge[v]){
			int nxt = to.a;
			char c = to.b;
			if(!iscap(c)){
				if(dist[u][nxt][t] > cs+1){
					dist[u][nxt][t] = cs+1;
					que.emplace(cs+1, mp(u,mp(nxt, t)));
				}
			}
			else {
				int uu, vv, tt;
				if(t == 26) {
					uu = nxt, vv = u, tt = c-'A';
				}
				else if(t == c-'A') uu=u,vv=nxt,tt=26;
				else continue;
				
				if(dist[uu][vv][tt] > cs+1){
					dist[uu][vv][tt] = cs+1;
					que.emplace(cs+1, mp(uu, mp(vv,tt)));
				}
			}
		}
		if(t == 26){
			for(auto to:edge[u]){
				int nxt = to.a;
				char c = to.b;
				if(!iscap(c)){
					if(dist[nxt][v][t] > cs+1){
						dist[nxt][v][t] = cs+1;
						que.emplace(cs+1, mp(nxt,mp(v, t)));
					}
				}
				else {
					int uu, vv, tt;
					{
						uu = nxt,vv = v, tt = c-'A';
					}
					if(dist[uu][vv][tt] > cs+1){
						dist[uu][vv][tt] = cs+1;
						que.emplace(cs+1, mp(uu, mp(vv,tt)));
					}
				}
			}
		}
	}
	int ans=inf;
	repn(i,n)repn(j,n)if(in[i] and in[j]){
		chmin(ans,dist[i][j][26]);
	}
	if(ans > inf/2) ans = -1;
	cout<<ans<<endl;	
}	
signed main(){
	cin.tie(0);
	ios::sync_with_stdio(0);
	cout<<fixed<<setprecision(20);
	
	slv();
}

/*
 * #include <bits/stdc++.h>

using namespace std;

#define rng(i,a,b) for(int i=int(a);i<int(b);i++)
#define rep(i,b) rng(i,0,b)
#define repn(i,b) rng(i,1,b+1)
#define gnr(i,a,b) for(int i=int(b)-1;i>=int(a);i--)
#define per(i,b) gnr(i,0,b)
#define pb push_back
#define a first
#define b second
#define eb emplace_back
template<class t>using vc=vector<t>;
template<class t, class u>bool chmin(t &a, u b){
	if(a > b){ a = b; return true;}
	else return false;
}
const int inf = 100000000;
int n, p, m;
vc<int>A;
bool in[55];
vc<pair<int,char>>edge[55];
int dd[55][55];
#define mp make_pair
using P=pair<int,int>;
using Q=pair<int,pair<int,P>>;

int dist[55][55][27];
void slv(){
	cin>>n>>p>>m;
	rep(i,p){
		int v;cin>>v;
		A.pb(v);
		in[v] = true;
	}
	rep(a,55)rep(b,55)if(a!=b)dd[a][b]=inf;
	rep(i,m){
		int u,v;string s;
		cin>>u>>s>>v;
		edge[u].eb(v, s[0]);
		dd[u][v] = 1;
	}
	repn(k,n)repn(i,n)repn(j,n)chmin(dd[i][j],dd[i][k]+dd[k][j]);
	auto iscap=[](char c){
		return 'A'<=c and c<='Z';
	};
	rep(a,55)rep(c,55)rep(d,27)dist[a][c][d]=inf;
	priority_queue<Q,vc<Q>,greater<Q>>que;
	
	repn(i,n){
		if(edge[i].size() < 2) continue;
		rep(j, edge[i].size()){
			rep(k, edge[i].size()){
				if(j==k)continue;
				char c = edge[i][j].b;
				int to = edge[i][j].a;
				char c2 = edge[i][k].b;
				int to2 = edge[i][k].a;
				
				if(iscap(c) == iscap(c2)){
					dist[to][to2][26] = dd[1][i]*2+2;
					que.push(mp(dist[to][to2][26], mp(to,mp(to2,26))));
				}
				else if(iscap(c)){
					dist[to][to2][c-'A'] = dd[1][i]*2+2;
					que.push(mp(dist[to][to2][c-'A'], mp(to,mp(to2,c-'A'))));
				}
			}
		}
	}
	while(!que.empty()){
		auto qq = que.top(); que.pop();
		int cs = qq.a;
		int u = qq.b.a;
		int v = qq.b.b.a;
		int t = qq.b.b.b;
		cout<<u<<" "<<v<<" "<<t<<" "<<cs<<endl;
		if(dist[u][v][t] != cs) continue;
		for(auto to:edge[v]){
			int nxt = to.a;
			char c = to.b;
			if(!iscap(c)){
				if(dist[u][nxt][t] > cs+1){
					dist[u][nxt][t] = cs+1;
					que.emplace(cs+1, mp(u,mp(nxt, t)));
				}
			}
			else {
				int uu, vv, tt;
				if(t == 26) {
					uu = nxt, vv = u, tt = c-'A';
				}
				else if(t == c-'A') uu=u,vv=nxt,tt=26;
				else continue;
				
				if(dist[uu][vv][tt] > cs+1){
					dist[uu][vv][tt] = cs+1;
					que.emplace(cs+1, mp(uu, mp(vv,tt)));
				}
			}
		}
		if(t == 26){
			for(auto to:edge[u]){
				int nxt = to.a;
				char c = to.b;
				if(!iscap(c)){
					if(dist[nxt][v][t] > cs+1){
						dist[nxt][v][t] = cs+1;
						que.emplace(cs+1, mp(nxt,mp(v, t)));
					}
				}
				else {
					int uu, vv, tt;
					{
						uu = nxt,vv = v, tt = c-'A';
					}
					if(dist[uu][vv][tt] > cs+1){
						dist[uu][vv][tt] = cs+1;
						que.emplace(cs+1, mp(uu, mp(vv,tt)));
					}
				}
			}
		}
	}
	int ans=inf;
	repn(i,n)repn(j,n)if(in[i] and in[j]){
		chmin(ans,dist[i][j][26]);
	}
	if(ans > inf/2) ans = -1;
	cout<<ans<<endl;	
}	
signed main(){
	cin.tie(0);
	ios::sync_with_stdio(0);
	cout<<fixed<<setprecision(20);
	
	slv();
}

 */

1 2 26 4
1 3 26 4
2 1 26 4
3 1 5 4
3 1 26 4
3 3 5 4
1 1 26 5
1 2 5 5
1 3 5 5
1 4 26 5
2 2 0 5
2 3 0 5
3 1 1 5
3 4 5 5
4 1 26 5
1 1 5 6
1 4 5 6
2 1 0 6
2 4 0 6
3 4 1 6
2 2 26 7
2 3 26 8
3 2 5 8
3 2 26 8
2 4 26 9
3 2 1 9
3 3 26 9
4 2 26 9
3 3 1 10
3 4 26 10
4 3 26 10
4 4 26 11


Details

answer.code:284:1: error: expected unqualified-id before numeric constant
  284 | 1 2 26 4
      | ^