QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#341886#8056. Travel 2Vengeful_Spirit#AC ✓232ms5336kbC++142.2kb2024-02-29 22:17:422024-02-29 22:17:42

Judging History

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

  • [2024-02-29 22:17:42]
  • 评测
  • 测评结果:AC
  • 用时:232ms
  • 内存:5336kb
  • [2024-02-29 22:17:42]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;

const int MN = 2505;

set<pair<int,int>> __edges;
int __cnt;
void add(int x, int y) {
    if(x == y) return;
    if(y < x) swap(x, y);
    if(__edges.count({x, y}) == 0) ++__cnt;
    __edges.insert({x, y});
}
void print_answer() {
    cout << "! ";
    for(auto [x, y] : __edges) cout << x << " " << y << " ";
    cout << std::endl;
    fflush(stdout);
}
bool check_correct() {
    string s;
    cin >> s;
    if(s != "Correct") return 0;
    return 1;
}

std::map<pair<int,int>, int> info;
int fa[MN], id_to_fa[MN];
int cur[MN]; // current edge
int D[MN]; // use straightly !!!

int last_id; int now;
void move(int id) {
    // cerr << "move from " << now << " use edge_id : " << id << "\n";
    cout << "> " << id << std::endl;
    fflush(stdout);
    int x, d;
    cin >> x >> d;
    D[x] = d;
    if(now != 0) {
        add(now, x);
        info[{now, x}] = id;
    }
    now = x;
}

int get_pos() {
    return now;
}

bool vis[MN];
void ON_clear() {
    __cnt = 0; now = 0; last_id = 0;
    __edges.clear();
    for(int i = 0; i <= 2500; ++i) {
        D[i] = 0;
        fa[i] = 0;
        id_to_fa[i] = 0;
        cur[i] = 0;
        vis[i] = 0;
    }
    info.clear();
}

// 1, move(id) (> id)
// 2, get_pos() -> int // cin >> pos
int root;
void dfs(int x) {
    vis[x] = 1;
    // cerr << "step in " << x << " with cur_cnt : " << cur[x] << "\n";
    while(cur[x] < D[x]) {
        ++cur[x];
        move(cur[x]);
        int y = get_pos();
        if(!vis[y]) {
            fa[y] = x;
            dfs(y);
            return;
        } else {
            if(y == fa[x]) {
                id_to_fa[x] = cur[x];
                move(info[{y, x}]); // come back
            } else {
                dfs(y);
                return;
            }
        }
    }
    if(x == root) return;
    else {
        move(id_to_fa[x]);
        dfs(fa[x]);
    }
}

void solve() {
    ON_clear();
    cin >> root; cin >> D[now = root];
    dfs(root);
    print_answer();
    assert(check_correct());
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    int T;
    cin >> T;
    while(T--) solve();

    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3636kb

input:

2
1 1
2 1
1 1
2 1
1 1
Correct
1 3
2 2
1 3
2 2
4 2
1 3
3 1
1 3
3 1
1 3
4 2
2 2
4 2
2 2
1 3
Correct

output:

> 1
> 1
> 1
> 1
! 1 2 
> 1
> 1
> 1
> 2
> 1
> 2
> 1
> 2
> 1
> 3
> 2
> 2
> 2
> 1
! 1 2 1 3 1 4 2 4 

result:

ok correct

Test #2:

score: 0
Accepted
time: 133ms
memory: 3884kb

input:

1000
1 9
2 7
1 9
2 7
3 9
1 9
3 9
4 9
1 9
4 9
3 9
4 9
7 7
1 9
5 8
1 9
5 8
8 8
1 9
6 9
1 9
6 9
2 7
10 6
1 9
7 7
4 9
7 7
8 8
5 8
8 8
10 6
2 7
10 6
8 8
9 8
1 9
8 8
7 7
5 8
9 8
3 9
9 8
5 8
2 7
6 9
10 6
4 9
10 6
6 9
5 8
3 9
2 7
3 9
5 8
6 9
8 8
3 9
10 6
3 9
8 8
6 9
3 9
7 7
3 9
6 9
9 8
2 7
5 8
7 7
9 8
8 8
9...

output:

> 1
> 1
> 1
> 2
> 1
> 2
> 2
> 1
> 3
> 2
> 2
> 3
> 1
> 4
> 1
> 4
> 2
> 1
> 5
> 1
> 5
> 2
> 3
> 1
> 6
> 2
> 3
> 3
> 2
> 2
> 3
> 2
> 3
> 3
> 4
> 1
> 7
> 5
> 4
> 3
> 2
> 3
> 3
> 4
> 4
> 3
> 4
> 4
> 5
> 4
> 5
> 4
> 2
> 5
> 6
> 5
> 6
> 6
> 6
> 7
> 7
> 6
> 8
> 5
> 9
> 7
> 4
> 5
> 7
> 6
> 5
> 4
> 6
> 7
> 8
...

result:

ok correct

Test #3:

score: 0
Accepted
time: 172ms
memory: 3856kb

input:

500
1 19
2 8
1 19
2 8
17 10
1 19
3 7
1 19
3 7
20 6
1 19
4 8
1 19
4 8
3 7
11 8
1 19
5 7
1 19
5 7
7 11
1 19
6 7
1 19
6 7
5 7
6 7
17 10
2 8
17 10
6 7
11 8
3 7
11 8
8 4
1 19
7 11
5 7
7 11
16 7
1 19
8 4
11 8
8 4
15 8
1 19
9 7
1 19
9 7
4 8
12 7
1 19
10 9
1 19
10 9
5 7
10 9
17 10
14 9
1 19
11 8
16 7
13 4
1...

output:

> 1
> 1
> 1
> 2
> 1
> 2
> 1
> 2
> 2
> 1
> 3
> 1
> 3
> 2
> 3
> 1
> 4
> 1
> 4
> 2
> 1
> 5
> 1
> 5
> 2
> 3
> 3
> 2
> 2
> 3
> 4
> 2
> 3
> 3
> 1
> 6
> 2
> 2
> 3
> 1
> 7
> 2
> 3
> 3
> 1
> 8
> 1
> 8
> 2
> 3
> 1
> 9
> 1
> 9
> 2
> 4
> 3
> 4
> 1
> 10
> 4
> 2
> 1
> 11
> 2
> 3
> 3
> 3
> 5
> 4
> 4
> 5
> 6
> 5
> ...

result:

ok correct

Test #4:

score: 0
Accepted
time: 158ms
memory: 3708kb

input:

100
1 99
2 5
1 99
2 5
12 7
1 99
3 5
1 99
3 5
76 9
1 99
4 10
1 99
4 10
74 6
1 99
5 3
1 99
5 3
99 7
1 99
6 9
1 99
6 9
20 4
1 99
7 6
1 99
7 6
67 10
1 99
8 8
1 99
8 8
70 9
1 99
9 9
1 99
9 9
93 10
1 99
10 5
1 99
10 5
47 4
1 99
11 4
1 99
11 4
95 12
1 99
12 7
2 5
12 7
41 7
1 99
13 6
1 99
13 6
86 6
1 99
14 ...

output:

> 1
> 1
> 1
> 2
> 1
> 2
> 1
> 2
> 2
> 1
> 3
> 1
> 3
> 2
> 1
> 4
> 1
> 4
> 2
> 1
> 5
> 1
> 5
> 2
> 1
> 6
> 1
> 6
> 2
> 1
> 7
> 1
> 7
> 2
> 1
> 8
> 1
> 8
> 2
> 1
> 9
> 1
> 9
> 2
> 1
> 10
> 1
> 10
> 2
> 1
> 11
> 2
> 2
> 3
> 1
> 12
> 1
> 12
> 2
> 1
> 13
> 1
> 13
> 2
> 1
> 14
> 1
> 14
> 2
> 1
> 15
> 1
> ...

result:

ok correct

Test #5:

score: 0
Accepted
time: 151ms
memory: 4276kb

input:

10
1 999
2 8
1 999
2 8
717 8
1 999
3 9
1 999
3 9
311 9
1 999
4 8
1 999
4 8
876 8
1 999
5 7
1 999
5 7
866 6
1 999
6 7
1 999
6 7
687 9
1 999
7 4
1 999
7 4
587 8
1 999
8 4
1 999
8 4
98 7
1 999
9 13
1 999
9 13
935 11
1 999
10 11
1 999
10 11
232 7
1 999
11 7
1 999
11 7
84 8
1 999
12 7
1 999
12 7
595 7
1 ...

output:

> 1
> 1
> 1
> 2
> 1
> 2
> 1
> 2
> 2
> 1
> 3
> 1
> 3
> 2
> 1
> 4
> 1
> 4
> 2
> 1
> 5
> 1
> 5
> 2
> 1
> 6
> 1
> 6
> 2
> 1
> 7
> 1
> 7
> 2
> 1
> 8
> 1
> 8
> 2
> 1
> 9
> 1
> 9
> 2
> 1
> 10
> 1
> 10
> 2
> 1
> 11
> 1
> 11
> 2
> 1
> 12
> 1
> 12
> 2
> 1
> 13
> 1
> 13
> 2
> 1
> 14
> 1
> 14
> 2
> 1
> 15
> 1
>...

result:

ok correct

Test #6:

score: 0
Accepted
time: 232ms
memory: 5300kb

input:

4
1 999
2 24
1 999
2 24
293 19
1 999
3 20
1 999
3 20
804 22
1 999
4 17
1 999
4 17
992 26
1 999
5 29
1 999
5 29
134 20
1 999
6 21
1 999
6 21
883 18
1 999
7 21
1 999
7 21
10 14
1 999
8 19
1 999
8 19
214 18
1 999
9 21
1 999
9 21
420 29
1 999
10 14
816 16
1 999
11 12
1 999
11 12
814 13
1 999
12 17
1 999...

output:

> 1
> 1
> 1
> 2
> 1
> 2
> 1
> 2
> 2
> 1
> 3
> 1
> 3
> 2
> 1
> 4
> 1
> 4
> 2
> 1
> 5
> 1
> 5
> 2
> 1
> 6
> 1
> 6
> 2
> 1
> 7
> 1
> 7
> 2
> 1
> 8
> 1
> 8
> 2
> 1
> 9
> 2
> 1
> 10
> 1
> 10
> 2
> 1
> 11
> 1
> 11
> 2
> 1
> 12
> 1
> 12
> 2
> 1
> 13
> 1
> 13
> 2
> 1
> 14
> 1
> 14
> 2
> 1
> 15
> 1
> 15
> 2
...

result:

ok correct

Test #7:

score: 0
Accepted
time: 196ms
memory: 5336kb

input:

4
1 199
2 106
1 199
2 106
114 107
1 199
3 95
1 199
3 95
74 101
1 199
4 102
1 199
4 102
56 101
1 199
5 103
1 199
5 103
117 106
1 199
6 103
1 199
6 103
4 102
44 100
1 199
7 110
1 199
7 110
178 97
1 199
8 109
1 199
8 109
2 106
8 109
20 108
1 199
9 104
1 199
9 104
85 92
1 199
10 98
1 199
10 98
128 99
1 ...

output:

> 1
> 1
> 1
> 2
> 1
> 2
> 1
> 2
> 2
> 1
> 3
> 1
> 3
> 2
> 1
> 4
> 1
> 4
> 2
> 1
> 5
> 1
> 5
> 2
> 3
> 1
> 6
> 1
> 6
> 2
> 1
> 7
> 1
> 7
> 2
> 3
> 3
> 1
> 8
> 1
> 8
> 2
> 1
> 9
> 1
> 9
> 2
> 1
> 10
> 1
> 10
> 2
> 1
> 11
> 1
> 11
> 2
> 1
> 12
> 1
> 12
> 2
> 1
> 13
> 1
> 13
> 2
> 1
> 14
> 1
> 14
> 2
> ...

result:

ok correct

Test #8:

score: 0
Accepted
time: 107ms
memory: 5284kb

input:

4
1 140
2 140
1 140
2 140
3 140
1 140
3 140
2 140
3 140
4 140
1 140
4 140
2 140
4 140
3 140
4 140
5 140
1 140
5 140
2 140
5 140
3 140
5 140
4 140
5 140
6 140
1 140
6 140
2 140
6 140
3 140
6 140
4 140
6 140
5 140
6 140
7 140
1 140
7 140
2 140
7 140
3 140
7 140
4 140
7 140
5 140
7 140
6 140
7 140
8 14...

output:

> 1
> 1
> 1
> 2
> 1
> 2
> 2
> 2
> 3
> 1
> 3
> 2
> 3
> 3
> 3
> 4
> 1
> 4
> 2
> 4
> 3
> 4
> 4
> 4
> 5
> 1
> 5
> 2
> 5
> 3
> 5
> 4
> 5
> 5
> 5
> 6
> 1
> 6
> 2
> 6
> 3
> 6
> 4
> 6
> 5
> 6
> 6
> 6
> 7
> 1
> 7
> 2
> 7
> 3
> 7
> 4
> 7
> 5
> 7
> 6
> 7
> 7
> 7
> 8
> 1
> 8
> 2
> 8
> 3
> 8
> 4
> 8
> 5
> 8
> 6
...

result:

ok correct

Test #9:

score: 0
Accepted
time: 91ms
memory: 4660kb

input:

4
1 2498
2 2
1 2498
2 2
2500 2498
2 2
2500 2498
3 2
1 2498
3 2
2500 2498
3 2
2500 2498
4 2
1 2498
4 2
2500 2498
4 2
2500 2498
5 2
1 2498
5 2
2500 2498
5 2
2500 2498
6 2
1 2498
6 2
2500 2498
6 2
2500 2498
7 2
1 2498
7 2
2500 2498
7 2
2500 2498
8 2
1 2498
8 2
2500 2498
8 2
2500 2498
9 2
1 2498
9 2
250...

output:

> 1
> 1
> 1
> 2
> 1
> 2
> 2
> 1
> 2
> 2
> 2
> 2
> 3
> 1
> 3
> 2
> 3
> 2
> 4
> 1
> 4
> 2
> 4
> 2
> 5
> 1
> 5
> 2
> 5
> 2
> 6
> 1
> 6
> 2
> 6
> 2
> 7
> 1
> 7
> 2
> 7
> 2
> 8
> 1
> 8
> 2
> 8
> 2
> 9
> 1
> 9
> 2
> 9
> 2
> 10
> 1
> 10
> 2
> 10
> 2
> 11
> 1
> 11
> 2
> 11
> 2
> 12
> 1
> 12
> 2
> 12
> 2
> 1...

result:

ok correct

Extra Test:

score: 0
Extra Test Passed