Submission #848883

# Submission time Handle Problem Language Result Execution time Memory
848883 2023-09-13T16:24:12 Z d4xn Longest Trip (IOI23_longesttrip) C++17
5 / 100
212 ms 1368 KB
#include "longesttrip.h"
#include <bits/stdc++.h>

using namespace std;

#define all(x) x.begin(), x.end()

const int N = 256, T = 1e3;

mt19937 rng(time(nullptr) + (uint64_t) new char);

int cnt;
vector<int> adj[N], ans, curr;
bitset<N> vis, con[N];

void dfs(int u) {
    vis[u] = 1;
    curr.push_back(u);

    cnt++;
    if (cnt > T) {
        if (curr.size() > ans.size()) ans = curr;
        return;
    }

    //shuffle(all(adj[u]), rng);
    for (int& v : adj[u]) {
        if (vis[v]) continue;
        dfs(v);
        if (cnt > T) return;
    }
    
    if (curr.size() > ans.size()) ans = curr;
    vis[u] = 0;
    curr.pop_back();
}

vector<int> longest_trip(int N, int D)
{
    if (D == 3) {
        ans.resize(N);
        for (int i = 0; i < N; i++) ans[i] = i;
        return ans;
    }
    else {
        for (int i = 0; i < N; i++) {
            for (int j = i+1; j < N; j++) {
                if (are_connected({i}, {j})) {
                    adj[i].push_back(j);
                    adj[j].push_back(i);
                    con[i][j] = con[j][i] = 1;
                }
            }
        }

        for (int i = 0; i < 2; i++) {
            cnt = 0;
            vis.reset();
            curr.clear();

            for (int j = 0; j < N; j++) {
              shuffle(all(adj[j]), rng);
            }

            dfs(rng() % N);
        }

        curr.clear();
        curr.resize(N);
        for (int i = 0; i < N; i++) {
          curr[i] = i;
        }
        
        for (int i = 0; i < T; i++) {
          shuffle(all(curr), rng);
          int r = 0;
          for (int j = 0; j+1 < N; j++) {
            if (con[curr[j]][curr[j+1]]) r++;
            else break;
          }

          if (r+1 > ans.size()) {
            ans.clear();
            ans.resize(r+1);
            for (int j = 0; j <= r; j++) {
              ans[j] = curr[j];
            }
          }
        }

        return ans;
    }
}

Compilation message

longesttrip.cpp: In function 'std::vector<int> longest_trip(int, int)':
longesttrip.cpp:82:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   82 |           if (r+1 > ans.size()) {
      |               ~~~~^~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 344 KB Incorrect
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 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 344 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 212 ms 692 KB Output is correct
2 Incorrect 118 ms 856 KB Incorrect
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 208 ms 692 KB Output is correct
2 Incorrect 119 ms 1112 KB Incorrect
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 210 ms 704 KB Output is correct
2 Incorrect 117 ms 1368 KB Incorrect
3 Halted 0 ms 0 KB -