Submission #1172980

#TimeUsernameProblemLanguageResultExecution timeMemory
1172980daveleThousands Islands (IOI22_islands)C++20
10 / 100
18 ms4468 KiB
#ifndef davele
#include "islands.h"
#endif // davele

#include <bits/stdc++.h>
#include <variant>
#define pii pair<int, int>
#define fi first
#define se second
#define vi vector <int>
#define pq priority_queue
#define MASK(i) (1ll<<(i))
#define BIT(x, i) (((x) >> (i)) & 1)
#define x0 ___x0
#define y0 ___y0
#define div   ___div
#define next   ___next
#define prev   ___prev
#define left   ___left
#define right   ___right
#define pos pisosi
#define pb push_back
#define pf push_front
using namespace std;

//const int mod = ;
//void add (int &a, const int&b){
//    a+=b;
//    if (a>=mod) a-=mod;
//}
//
//void sub (int&a, const int&b){
//    a-=b;
//    if (a<0) a+=mod;
//}
//
//void mul (int&a, const int&b){
//    a*=b;
//    a%=mod;
//}

template<class X, class Y>
    bool minimize(X &x, const Y&y){
        if (x<=y) return false;
        else{
            x = y;
            return true;
        }
    }
template<class X, class Y>
    bool maximize (X &x, const Y&y){
        if (x>=y) return false;
        else{
            x = y;
            return true;
        }
    }

////////////////////////////////////////////////////////////////////////////
//const int lim = , limit = , inf = ;

int id[405][405];

std::variant<bool, std::vector<int>> find_journey(int N, int M, std::vector<int> U, std::vector<int> V){
    if (N==2){
        vector <int> f0, f1;
        int cnt = 0;
        for (int i=0; i<M; i++){
            if (U[i]==0) f0.pb(i);
            else f1.pb(i);
        }
        if ((int)f0.size()<=1) return false;
        if (f1.empty()) return false;
        vector <int> ret;
        ret.pb(f0[0]);
        ret.pb(f1[0]);
        ret.pb(f0[1]);
        ret.pb(f0[0]);
        ret.pb(f1[0]);
        ret.pb(f0[1]);
        return ret;
    }
    bool is2 = true;
    if (N>400) is2 = false;
    memset(id, -1, sizeof(id));
    if (M!=N*(N-1)) is2 = false;
    if (is2){
        memset(id, -1, sizeof(id));
        for (int i=0; i<M; i++) id[U[i]][V[i]] = i;
        for (int i=0; i<M; i++) for (int j=0; j<M; j++) 
            if (i!=j && id[i][j]==-1) is2 = false;
    }
    if (is2){
        int st = 0, en = 0;
        for (int i=0; i<M; i++) if (U[i]==0) st++;
        for (int i=0; i<M; i++) if (V[i]==0) en++;
        
        if (st<=1 || en==0) return false;
        //
        vector <int> ret;
        ret.pb(id[0][1]);
        ret.pb(id[1][0]);
        ret.pb(id[0][2]);
        ret.pb(id[2][0]);
        ret.pb(id[1][0]);
        ret.pb(id[0][1]);
        ret.pb(id[2][0]);
        ret.pb(id[0][2]);
        return ret;
    }
}



Compilation message (stderr)

islands.cpp: In function 'std::variant<bool, std::vector<int, std::allocator<int> > > find_journey(int, int, std::vector<int>, std::vector<int>)':
islands.cpp:111:1: warning: control reaches end of non-void function [-Wreturn-type]
  111 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...