QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#359590 | #408. Dungeon 2 | abc123 | 0 | 0ms | 0kb | C++20 | 2.2kb | 2024-03-20 19:18:39 | 2024-03-20 19:18:47 |
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