Submission #1265266

#TimeUsernameProblemLanguageResultExecution timeMemory
1265266BahaminXylophone (JOI18_xylophone)C++20
100 / 100
344 ms98252 KiB
#include "xylophone.h" #include "bits/stdc++.h" using namespace std; static int A[5000]; void solve(int n) { int dis[n][n]; for (int i = 0; i < n - 1; i++) dis[i][i + 1] = query(i + 1, i + 2); for (int i = 0; i < n - 2; i++) { dis[i][i + 2] = query(i + 1, i + 3); if (dis[i][i + 2] == dis[i][i + 1]) dis[i][i + 2] = dis[i][i + 1] - dis[i + 1][i + 2]; else if (dis[i][i + 2] == dis[i + 1][i + 2]) dis[i][i + 2] = dis[i + 1][i + 2] - dis[i][i + 1]; } for (int i = 3; i < n; i++) { for (int l = 0; l < n - i; l++) { int r = l + i; if (dis[l][l + 1] + dis[l][l + 2] == dis[l + 1][l + 2]) { if (dis[l + 1][r] + dis[l + 2][r] == dis[l + 1][l + 2]) dis[l][r] = abs(dis[l][l + 1] - dis[l + 1][r]); else { if (dis[l + 1][r] < dis[l + 2][r]) dis[l][r] = dis[l + 1][r] + dis[l][l + 1]; else dis[l][r] = dis[l + 2][r] + dis[l][l + 2]; } } else { if (dis[l + 1][r] + dis[l + 2][r] == dis[l + 1][l + 2]) { if (dis[l][l + 1] < dis[l][l + 2]) dis[l][r] = dis[l][l + 1] + dis[l + 1][r]; else dis[l][r] = dis[l][l + 2] + dis[l + 2][r]; } else { if (dis[l][l + 1] < dis[l][l + 2]) { if (dis[l + 1][r] < dis[l + 2][r]) dis[l][r] = abs(dis[l + 1][r] - dis[l][l + 1]); else dis[l][r] = dis[l][l + 1] + dis[l + 2][r] + dis[l + 1][l + 2]; } else { if (dis[l + 2][r] < dis[l + 1][r]) dis[l][r] = abs(dis[l + 2][r] - dis[l][l + 2]); else dis[l][r] = dis[l][l + 2] + dis[l + 1][r] + dis[l + 1][l + 2]; } } } } } int ind = -1; for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) if (dis[i][j] == n - 1) ind = i, answer(i + 1, 1); for (int i = 0; i < n; i++) if (i != ind) answer(i + 1, dis[min(ind, i)][max(ind, i)] + 1); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...