이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define el '\n'
#define ff first
#define ss second
#define pii pair <ll, ll>
#define pb push_back
#define mkp make_pair
#define fr(i, l, r) for(ll i = l; i <= r; i++)
#define debug(x) \
    { cout << #x << " = " << x << el; }
template<class T, class S>
inline bool chmax(T &a, const S &b) {
    return (a < b ? a = b, 1 : 0);
}
template<class T, class S>
inline bool chmin(T &a, const S &b) {
    return (a > b ? a = b, 1 : 0);
}
//const ll N = 2e5 + 10;
const ll M = 1e5 + 10;
const ll K = 400;
const ll INF = 1e18 + 10;
const ll inf = 1e9 + 10;
const ll LOG = 20;
const ll mod = 1000002022;
mt19937 rnd(time(0));
bool are_connected(std::vector<int> A, std::vector<int> B);
std::vector<int> longest_trip(int N, int D) {
    vector <int> f, s;
    f.pb(0); s.pb(1);
    vector <int> left;
    fr(i, 2, N - 1)
        left.pb(i);
    shuffle(left.begin(), left.end(), rnd);
    bool ends = 0;
    for(int i : left) {
        bool fir = are_connected({f.back()}, {i});
        if(!ends) {
            bool sec = are_connected({s.back()}, {i});
            if(fir) {
                f.pb(i);
                if(!sec) ends = 1;
            }
            else if(sec) {
                s.pb(i);
                ends = 1;
            }
            else {
                while(!s.empty()) {
                    f.pb(s.back());
                    s.pop_back();
                }
                s.pb(i);
            }
        }
        else {
            ends = 0;
            if(fir)
                f.pb(i);
            else
                s.pb(i);
        }
    }
    if(!are_connected(f, s)) {
        if(f.size() < s.size()) swap(f, s);
        return f;
    }
    vector <int> ans;
    if(f.size() == 1 && are_connected({f[0]}, {s[0], s.back()})) {
        if(are_connected({f[0]}, {s[0]})) {
            ans = f;
            for(int j : s)
                ans.pb(j);
        }
        else {
            ans = s;
            for(int j : f)
                ans.pb(j);
        }
        return ans;
    }
    else if(s.size() == 1 && are_connected({s[0]}, {f[0], f.back()})) {
        if(are_connected({f[0]}, {s[0]})) {
            ans = s;
            for(int j : f)
                ans.pb(j);
        }
        else {
            ans = f;
            for(int j : s)
                ans.pb(j);
        }
        return ans;
    }
    else if(f.size() > 1 && s.size() > 1 && are_connected({f[0], f.back()}, {s[0], s.back()})) {
        if(are_connected({f[0]}, {s[0]})) {
            reverse(f.begin(), f.end());
            ans = f;
            for(int j : s)
                ans.pb(j);
        }
        else if(are_connected({f[0]}, {s.back()})) {
            ans = s;
            for(int j : f)
                ans.pb(j);
        }
        else if(are_connected({f.back()}, {s[0]})) {
            ans = f;
            for(int j : s)
                ans.pb(j);
        }
        else {
            ans = s;
            reverse(f.begin(), f.end());
            for(int j : f)
                ans.pb(j);
        }
        return ans;
    }
    int l = 0, r = f.size() - 1;
    while(l < r) {
        int mid = (l + r) / 2;
        vector <int> v;
        for(int j = 0; j <= mid; j++)
            v.pb(f[j]);
        if(are_connected(v, s)) r = mid;
        else l = mid + 1;
    }
    int l2 = 0, r2 = s.size() - 1;
    while(l2 < r2) {
        int mid = (l2 + r2) / 2;
        vector <int> v, v2;
        for(int j = 0; j <= l; j++)
            v.pb(f[j]);
        for(int j = 0; j <= mid; j++)
            v2.pb(s[j]);
        if(are_connected(v, v2)) r2 = mid;
        else l2 = mid + 1;
    }
    for(int i = l + 1; i < f.size(); i++)
        ans.pb(f[i]);
    for(int i = 0; i <= l; i++)
        ans.pb(f[i]);
    for(int i = l2; i < s.size(); i++)
        ans.pb(s[i]);
    for(int i = 0; i < l2; i++)
        ans.pb(s[i]);
    return ans;
}
/*
static inline constexpr int maxNumberOfCalls = 32640;
static inline constexpr int maxTotalNumberOfCalls = 150000;
static inline constexpr int maxTotalNumberOfLandmarksInCalls = 1500000;
static int call_counter = 0;
static int total_call_counter = 0;
static int landmark_counter = 0;
static int C, N, D;
static std::vector<std::vector<int>> U;
static std::vector<bool> present;
static inline void protocol_violation(std::string message)
{
    printf("Protocol Violation: %s\n", message.c_str());
    exit(0);
}
bool are_connected(std::vector<int> A, std::vector<int> B)
{
    ++call_counter;
    ++total_call_counter;
    if (call_counter > maxNumberOfCalls || total_call_counter > maxTotalNumberOfCalls)
    {
        protocol_violation("too many calls");
    }
    int nA = A.size(), nB = B.size();
    landmark_counter += nA + nB;
    if (landmark_counter > maxTotalNumberOfLandmarksInCalls)
    {
        protocol_violation("too many elements");
    }
    if (nA == 0 || nB == 0)
    {
        protocol_violation("invalid array");
    }
    for (int i = 0; i < nA; ++i)
    {
        if (A[i] < 0 || N <= A[i])
        {
            protocol_violation("invalid array");
        }
        if (present[A[i]])
        {
            protocol_violation("invalid array");
        }
        present[A[i]] = true;
    }
    for (int i = 0; i < nA; ++i)
    {
        present[A[i]] = false;
    }
    for (int i = 0; i < nB; ++i)
    {
        if (B[i] < 0 || N <= B[i])
        {
            protocol_violation("invalid array");
        }
        if (present[B[i]])
        {
            protocol_violation("invalid array");
        }
        present[B[i]] = true;
    }
    for (int i = 0; i < nB; ++i)
    {
        present[B[i]] = false;
    }
    for (int i = 0; i < nA; ++i)
    {
        for (int j = 0; j < nB; ++j)
        {
            if (A[i] == B[j])
            {
                protocol_violation("non-disjoint arrays");
            }
        }
    }
    for (int i = 0; i < nA; ++i)
    {
        for (int j = 0; j < nB; ++j)
        {
            if (U[std::max(A[i], B[j])][std::min(A[i], B[j])] == 1)
            {
                return true;
            }
        }
    }
    return false;
}
int main()
{
    assert(1 == scanf("%d", &C));
    int maximumCalls = 0;
    for (int c = 0; c < C; ++c)
    {
        call_counter = 0;
        assert(2 == scanf("%d %d", &N, &D));
        present.assign(N, false);
        U.resize(N);
        for (int i = 1; i < N; ++i)
        {
            U[i].resize(i);
            for (int j = 0; j < i; ++j)
            {
                assert(1 == scanf("%d", &U[i][j]));
            }
        }
        for (int i = 2; i < N; ++i)
        {
            for (int j = 1; j < i; ++j)
            {
                for (int k = 0; k < j; ++k)
                {
                    if (U[i][j] + U[i][k] + U[j][k] < D)
                    {
                        printf("Insufficient Density\n");
                        exit(0);
                    }
                }
            }
        }
        std::vector<int> t = longest_trip(N, D);
        int l = t.size();
        //printf("%d\n", l);
        bool ok = 1;
        for (int i = 0; i < l; ++i)
        {
            if(i) {
                int a = t[i - 1], b = t[i];
                if(a > b) swap(a, b);
                if(!U[b][a]) ok = 0;
            }
            //printf(i == 0 ? "%d" : " %d", t[i]);
        }
        //printf("\n");
        if(!ok) cout << "INVALID" << el;
        //printf("%d\n", call_counter);
        maximumCalls = std::max(maximumCalls, call_counter);
        call_counter = 0;
    }
    //printf("%d\n", maximumCalls);
    return 0;
}
*/
컴파일 시 표준 에러 (stderr) 메시지
longesttrip.cpp: In function 'std::vector<int> longest_trip(int, int)':
longesttrip.cpp:157:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  157 |     for(int i = l + 1; i < f.size(); i++)
      |                        ~~^~~~~~~~~~
longesttrip.cpp:161:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  161 |     for(int i = l2; i < s.size(); i++)
      |                     ~~^~~~~~~~~~| # | 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... |