#include "dungeon2.h"
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <vector>
#include <stack>
#include <deque>
#include <queue>
#include <set>
#include <map>
#include <unordered_map>
#include <bitset>
#include <string>
#include <tuple>
#define rf(x) (x)=0;while(*p<48)im=*p=='-';while(47<*p)(x)=((x)<<3)+((x)<<1)+(*p++&15);if(im)(x)=-(x);
#define pb push_back
#define sz(V) ((int)(V).size())
#define allv(V) ((V).begin()),((V).end())
#define befv(V) ((V)[(sz(V)-2)])
#define sorv(V) sort(allv(V))
#define revv(V) reverse(allv(V))
#define univ(V) (V).erase(unique(allv(V)),(V).end())
#define clv(V) (V).clear()
#define upmin(a,b) (a)=min((a),(b))
#define upmax(a,b) (a)=max((a),(b))
#define rb(x) ((x)&(-(x)))
#define INF (1010000099)
#define INFLL (1010000000000000099ll)
#define MAXN (205)
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<int, ll> pil;
typedef pair<ll, int> pli;
int NOR() { return NumberOfRoads(); }
const int THREE[5] = {1, 3, 9, 27, 81};
vector<int> G[MAXN]; // -1 : Wo, -2 : De
vector<int> Q[MAXN];
int d[MAXN][MAXN];
int TT[5][MAXN];
int Ans[MAXN];
int N;
int dfs1(int prteidx) {
if(3 == Color()) {
Move(prteidx, 3);
return -3;
}
if(2 == Color()) {
Move(prteidx, 2);
return -2;
}
N++; G[N].resize(NOR()); int ret = N;
for(int i = 1; i <= NOR(); i++) {
Move(i, 2);
G[ret][i-1] = dfs1(LastRoad());
}
if(-1 != prteidx) Move(prteidx, 3);
return ret;
}
void dfs2(int TT[], int THREE, int idx, int prteidx, bool isfinal) {
for(int i = 1; i <= NOR(); i++) {
int nxt = G[idx][i-1];
if(-3 == nxt) continue;
if(-2 == nxt) {
Move(i, TT[idx] + 1);
Q[idx][i-1] += THREE * (Color() - 1);
if(isfinal) {
Q[Q[idx][i-1]][LastRoad()-1] = idx;
}
Move(LastRoad(), Color());
} else {
Move(i, TT[idx] + 1);
dfs2(TT, THREE, nxt, LastRoad(), isfinal);
}
}
if(-1 != prteidx) Move(prteidx, TT[idx] + 1);
}
void Inspect(int R) {
dfs1(-1);
for(int i = 1; i <= N; i++) {
for(int t = i, c = 0; c < 5; t /= 3, c++) TT[c][i] = t%3;
}
for(int i = 1; i <= N; i++) Q[i].resize(sz(G[i]));
for(int i = 0; i < 5; i++) dfs2(TT[i], THREE[i], 1, -1, 4 == i);
for(int i = 1; i <= N; i++) {
for(int j = 0; j < sz(G[i]); j++) {
if(0 < G[i][j]) continue;
G[i][j] = Q[i][j];
}
}
/*printf("%d\n", N);
for(int i = 1; i <= N; i++) {
printf("G %d\n", i);
for(int v : G[i]) printf("%d ", v); puts("");
}*/
for(int i = 0; i < MAXN; i++) fill(d[i], d[i]+MAXN, INF);
for(int i = 1; i <= N; i++) for(int v : G[i]) d[i][v] = d[v][i] = 1;
for(int i = 1; i <= N; i++) d[i][i] = 0;
for(int k = 1; k <= N; k++) for(int i = 1; i <= N; i++) for(int j = 1; j <= N; j++)
upmin(d[i][j], d[i][k]+d[k][j]);
//for(int i = 1; i <= N; i++, puts("")) for(int j = 1; j <= N; j++) printf("%d ", d[i][j]);
for(int i = 1; i <= N; i++) for(int j = i+1; j <= N; j++) Ans[d[i][j]]++;
for(int i = 1; i <= R; i++) Answer(i, Ans[i]);
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
2692 KB |
Output is correct |
2 |
Correct |
0 ms |
2692 KB |
Output is correct |
3 |
Correct |
0 ms |
2692 KB |
Output is correct |
4 |
Correct |
0 ms |
2692 KB |
Output is correct |
5 |
Correct |
0 ms |
2692 KB |
Output is correct |
6 |
Correct |
0 ms |
2692 KB |
Output is correct |
7 |
Correct |
0 ms |
2692 KB |
Output is correct |
8 |
Correct |
0 ms |
2692 KB |
Output is correct |
9 |
Correct |
0 ms |
2692 KB |
Output is correct |
10 |
Correct |
0 ms |
2692 KB |
Output is correct |
11 |
Correct |
0 ms |
2692 KB |
Output is correct |
12 |
Correct |
0 ms |
2692 KB |
Output is correct |
13 |
Correct |
0 ms |
2692 KB |
Output is correct |
14 |
Correct |
0 ms |
2692 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
2692 KB |
Output is correct |
2 |
Correct |
0 ms |
2692 KB |
Output is correct |
3 |
Correct |
0 ms |
2692 KB |
Output is correct |
4 |
Correct |
0 ms |
2692 KB |
Output is correct |
5 |
Correct |
0 ms |
2692 KB |
Output is correct |
6 |
Correct |
0 ms |
2692 KB |
Output is correct |
7 |
Correct |
0 ms |
2692 KB |
Output is correct |
8 |
Correct |
0 ms |
2692 KB |
Output is correct |
9 |
Correct |
0 ms |
2692 KB |
Output is correct |
10 |
Correct |
0 ms |
2692 KB |
Output is correct |
11 |
Correct |
0 ms |
2692 KB |
Output is correct |
12 |
Correct |
0 ms |
2692 KB |
Output is correct |
13 |
Correct |
0 ms |
2692 KB |
Output is correct |
14 |
Correct |
0 ms |
2692 KB |
Output is correct |
15 |
Correct |
0 ms |
2692 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Partially correct |
16 ms |
2692 KB |
Partially correct |
2 |
Partially correct |
9 ms |
2692 KB |
Partially correct |
3 |
Partially correct |
9 ms |
2692 KB |
Partially correct |
4 |
Partially correct |
23 ms |
3088 KB |
Partially correct |
5 |
Partially correct |
0 ms |
2692 KB |
Partially correct |
6 |
Partially correct |
6 ms |
2692 KB |
Partially correct |
7 |
Partially correct |
9 ms |
2692 KB |
Partially correct |
8 |
Partially correct |
13 ms |
2692 KB |
Partially correct |
9 |
Partially correct |
13 ms |
2692 KB |
Partially correct |
10 |
Partially correct |
9 ms |
2692 KB |
Partially correct |
11 |
Partially correct |
9 ms |
2692 KB |
Partially correct |
12 |
Partially correct |
9 ms |
2692 KB |
Partially correct |
13 |
Partially correct |
13 ms |
2824 KB |
Partially correct |
14 |
Partially correct |
9 ms |
2692 KB |
Partially correct |
15 |
Partially correct |
13 ms |
2692 KB |
Partially correct |
16 |
Partially correct |
3 ms |
2824 KB |
Partially correct |
17 |
Partially correct |
19 ms |
2956 KB |
Partially correct |
18 |
Partially correct |
19 ms |
2956 KB |
Partially correct |
19 |
Partially correct |
19 ms |
2956 KB |
Partially correct |