이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "speedrun.h"
using namespace std;
const int maxn = 1e3 + 2;
// bool ad [maxn][maxn];
void assignHints(int subtask, int N, int A[], int B[]) { /* your solution here */
int deg [N + 1] = {};
vector <int> ad [maxn];
if (subtask == 1 || N <= 4) {
setHintLen(N);
for (int i = 1; i < N; i++){
setHint(A[i], B[i], 1);
setHint(B[i], A[i], 1);
}
}
if (subtask == 2) {
setHintLen(1);
for (int i = 1; i < N; i++){
deg[A[i]]++;
deg[B[i]]++;
}
for (int i = 1; i <= N; i++){
if (deg[i] > 1) setHint(i, 1, 1);
}
}
if (subtask == 3) {
setHintLen(20);
for (int i = 1; i < N; i++){
ad[A[i]].push_back(B[i]);
ad[B[i]].push_back(A[i]);
}
for (int i = 1; i <= N; i++){
// cout << i << ": ";
for (int j = 0; j < ad[i].size(); j++){
int k = ad[i][j];
int offset = j * 10 + 1;
for (int b = 0; b <= 9; b++) {
// cout << !!(k & (1 << b));
setHint(i, b + offset, !!(k & (1 << b)));
}
// cout << " ";
}
// cout << "\n";
}
}
if (subtask == 4) {
setHintLen(316);
for (int i = 1; i < N; i++){
ad[A[i]].push_back(B[i]);
ad[B[i]].push_back(A[i]);
}
for (int i = 1; i <= N; i++){
for (int j: ad[i]) {
setHint(i, j / 4 + 1, 1);
}
}
}
}
void speedrun(int subtask, int N, int start) { /* your solution here */
if (subtask == 1 || N <= 4) {
auto dfs = [&] (int u, int p = -1, auto&& dfs) -> void {
for (int i = 1; i <= N; i++){
if (i == p || i == start) continue;
if (getHint(i)) {
goTo(i);
dfs(i, u, dfs);
}
}
if (p != -1) goTo(p);
};
dfs(start, -1, dfs);
}
if (subtask == 2) {
if (!getHint(1)) {
for (int i = 1; i <= N; i++){
if (goTo(i)) {
start = i;
break;
}
}
}
for (int i = 1; i <= N; i++){
if (i == start) continue;
goTo(i);
goTo(start);
}
}
if (subtask == 3) {
auto dfs = [&] (int u, int p = -1, auto&& dfs) -> void {
int v1 = 0, v2 = 0;
for (int i = 0; i <= 9; i++){
v1+=((1 << i) * getHint(i + 1));
v2+=((1 << i) * getHint(i + 11));
}
if (v1 && v1 != p) {
goTo(v1);
dfs(v1, u, dfs);
goTo(u);
}
if (v2 && v2 != p) {
goTo(v2);
dfs(v2, u, dfs);
goTo(u);
}
};
dfs(start, -1, dfs);
}
if (subtask == 4) {
auto dfs = [&] (int u, int p = -1, auto&& dfs) -> void {
for (int i = 1; i <= 251; i++){
if (getHint(i)) {
for (int j = (i - 1) * 4; j <= i * 4; j++) {
if (j == p) continue;
if (goTo(j)) {
dfs(j, u, dfs);
goTo(u);
}
}
}
}
};
dfs(start, -1, dfs);
}
}
컴파일 시 표준 에러 (stderr) 메시지
speedrun.cpp: In function 'void assignHints(int, int, int*, int*)':
speedrun.cpp:35:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
35 | for (int j = 0; j < ad[i].size(); j++){
| ~~^~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |