답안 #846700

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
846700 2023-09-08T09:22:13 Z IvanJ 가장 긴 여행 (IOI23_longesttrip) C++17
15 / 100
202 ms 596 KB
#include "longesttrip.h"
#include<bits/stdc++.h>

#define pb push_back
#define all(a) (a).begin(), (a).end()

using namespace std;

vector<int> longest_trip(int n, int D) {
    if(D == 3) {
        vector<int> p;
        for(int i = 0;i < n;i++) p.pb(i);
        return p;
    }
    if(D == 2) {
        deque<int> dq;
        if(!are_connected({0}, {1}))
            dq.pb(0), dq.pb(2), dq.pb(1);
        else if(!are_connected({1}, {2}))
            dq.pb(1), dq.pb(0), dq.pb(2);
        else dq.pb(0), dq.pb(1), dq.pb(2);

        for(int i = 3;i < n;i++) {
            if(are_connected({i}, {dq.front()}))
                dq.push_front(i);
            else dq.pb(i);
        }

        return vector<int>(all(dq));
    }
    if(D == 1) {
        vector<int> p1, p2;
        p1.pb(0);
        for(int i = 1;i < n;i++) {
            int x = are_connected({i}, {p1.back()});
            int y = 0;
            if(p2.size()) y = are_connected({i}, {p2.back()});
            if(x && y) {
                p1.pb(i);
                while(p2.size()) 
                    p1.pb(p2.back()), p2.pop_back();
            } else {
                if(x) p1.pb(i);
                else p2.pb(i);
            }
        }
        if((int)p1.size() == n) return p1;

        if(!are_connected(p1, p2)) {
            if(p1.size() < p2.size()) swap(p1, p2);
            return p1;
        }
        
        vector<int> v = p1;
        while(v.size() > 1) {
            int mid = (int)v.size() / 2;
            vector<int> v1, v2;
            for(int i = 0;i <= mid;i++) v1.pb(v[i]);
            for(int i = mid + 1;i < (int)v.size();i++) v2.pb(v[i]);
            if(are_connected(v1, p2)) v = v1;
            else v = v2;
        }

        int X = v[0];
        v = p2;
        while(v.size() > 1) {
            int mid = (int)v.size() / 2;
            vector<int> v1, v2;
            for(int i = 0;i <= mid;i++) v1.pb(v[i]);
            for(int i = mid + 1;i < (int)v.size();i++) v2.pb(v[i]);
            if(are_connected({X}, v1)) v = v1;
            else v = v2;
        }
        int Y = v[0];

        vector<int> p;
        int pos1 = -1, pos2 = -1;
        for(int i = 0;i < (int)p1.size();i++)
            if(p1[i] == X) pos1 = i;
        for(int i = 0;i < (int)p2.size();i++)
            if(p2[i] == Y) pos2 = i;

        for(int i = 0;i < (int)p1.size();i++)
            p.pb(p1[(i + pos1) % (int)p1.size()]);
        reverse(all(p));
        for(int i = 0;i < (int)p2.size();i++)
            p.pb(p2[(i + pos2) % (int)p2.size()]);
        return p;
    }
    return {};
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 344 KB Output is correct
2 Correct 1 ms 344 KB Output is correct
3 Correct 1 ms 344 KB Output is correct
4 Correct 1 ms 344 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 344 KB Output is correct
2 Correct 4 ms 428 KB Output is correct
3 Correct 4 ms 344 KB Output is correct
4 Correct 5 ms 344 KB Output is correct
5 Correct 4 ms 344 KB Output is correct
6 Correct 6 ms 344 KB Output is correct
7 Correct 5 ms 344 KB Output is correct
8 Correct 5 ms 344 KB Output is correct
9 Correct 4 ms 344 KB Output is correct
10 Correct 4 ms 344 KB Output is correct
11 Correct 5 ms 344 KB Output is correct
12 Correct 5 ms 436 KB Output is correct
13 Correct 5 ms 596 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 344 KB Output is correct
2 Correct 6 ms 344 KB Output is correct
3 Correct 5 ms 344 KB Output is correct
4 Correct 5 ms 344 KB Output is correct
5 Correct 4 ms 344 KB Output is correct
6 Incorrect 188 ms 344 KB too many calls
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 344 KB Output is correct
2 Correct 5 ms 344 KB Output is correct
3 Correct 5 ms 344 KB Output is correct
4 Correct 5 ms 596 KB Output is correct
5 Correct 5 ms 440 KB Output is correct
6 Incorrect 202 ms 344 KB too many calls
7 Halted 0 ms 0 KB -