QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#359590#408. Dungeon 2abc1230 0ms0kbC++202.2kb2024-03-20 19:18:392024-03-20 19:18:47

Judging History

你现在查看的是最新测评结果

  • [2024-03-20 19:18:47]
  • 评测
  • 测评结果:0
  • 用时:0ms
  • 内存:0kb
  • [2024-03-20 19:18:39]
  • 提交

answer

#include <bits/stdc++.h>
#include "dungeon2.h"
using namespace std;
#define pii pair<int,int>

vector<int> do_wym[203];
vector<pii> graph[203];
vector<pii> sciezki[203][203];
int matrix[203][203];
int dp[203][203];
int wyn[203];
pii fat[203];
int deg[203];
int wolne=0;

void dfs(int v, int p){
	if (v!=1){
		fat[v]={LastRoad(),p};
		do_wym[v][LastRoad()]=p;
	}
	deg[v]=NumberOfRoads();
	do_wym[v].resize(deg[v]+1);
	for (int i = 1; i<=deg[v]; i++){
		Move(i,2);
		if (Color()==2)Move(LastRoad(),2);
		else{
			do_wym[v][i]=++wolne;
			graph[v].push_back({wolne,i});
			dfs(wolne,v);
		}
	}
	if (v!=1)Move(fat[v].first,2);
}

bool build_sciezka(int v, int p, int a, int b){
	if (v==b)return true;
	for (auto u : graph[v]){
		if (v==p)continue;
		sciezki[a][b].push_back(u);
		if (build_sciezka(u.first,v,a,b))return true;
		sciezki[a][b].pop_back();
	}
	return false;
}

void MyMove(int a, int b){
	if (a==b)return;
	Move(sciezki[a][b][0].second,Color());
	for (int i = 1; i<sciezki[a][b].size(); i++){
		Move(sciezki[a][b][i].second,Color());
	}
}

void Inspect(int R){
	dfs(++wolne,0);
	int n=wolne;
	for (int i = 1; i<=n; i++){
		for (int j = 1; j<=n; j++){
			build_sciezka(i,0,i,j);
		}
	}
	int cur=1;
	for (int i = 1; i<=n; i++){
		MyMove(cur,i);
		cur=i;
		Move(1,3);
		Move(LastRoad(),1);
		for (int j = i+1; j<=n; j++){
			MyMove(cur,j);
			cur=j;
			for (int u = 1; u<=deg[cur]; u++){
				if (do_wym[cur][u])continue;
				Move(u,1);
				if (Color()==3){
					matrix[i][j]=matrix[j][i]=1;
					Move(LastRoad(),3);
				}
				else Move(LastRoad(),1);
			}
		}
		MyMove(cur,i);
		Move(1,1);
		Move(LastRoad(),1);
	}
	for (int i = 1; i<=n; i++){
		for (auto u : graph[i])matrix[i][u.first]=matrix[u.first][i]=1;
	}
	for (int i = 1; i<=n; i++){
		for (int j = 1; j<=n; j++){
			dp[i][j]=n+2;
			if (i==j)dp[i][j]=0;
			if (matrix[i][j])dp[i][j]=matrix[i][j];
		}
	}
	for (int k = 1; k<=n; k++){
		for (int i = 1; i<=k; i++){
			for (int j = 1; j<=k; j++){
				dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]);
			}
		}
	}
	for (int i = 1; i<=n; i++){
		for (int j = i+1; j<=n; j++){
			wyn[dp[i][j]]++;
		}
	}
	for (int i = 1; i<=R; i++){
		Answer(i,wyn[i]);
	}
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Runtime Error

Test #1:

score: 0
Runtime Error

input:

10 100 50
7
5 7 10 4 6 2 3
2
1 5
3
1 10 7
2
10 1
3
1 9 2
2
1 7
5
9 6 8 3 1
1
7
2
5 7
3
1 4 3
15
24
6
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

output:

Unauthorized output

result:


Subtask #2:

score: 0
Runtime Error

Test #16:

score: 0
Runtime Error

input:

10 3 50
4
7 4 10 5
2
8 6
1
10
2
1 9
3
1 7 10
2
7 2
5
6 1 5 8 9
3
7 9 2
4
10 8 7 4
4
1 9 5 3
15
19
9
2
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

output:

Unauthorized output

result:


Subtask #3:

score: 0
Runtime Error

Test #31:

score: 0
Runtime Error

input:

200 3 200
6
149 79 143 164 179 68
4
44 52 144 113
1
84
3
31 188 166
1
109
4
154 192 125 147
1
198
4
103 27 192 95
3
33 166 179
1
125
3
31 61 150
3
168 152 161
2
67 64
1
136
2
150 17
1
192
2
15 142
2
56 122
1
35
2
97 200
2
129 22
4
72 134 31 21
2
53 82
4
195 181 104 146
1
78
1
88
3
8 78 127
4
152 200...

output:

Unauthorized output

result: