제출 #1370338

#제출 시각아이디문제언어결과실행 시간메모리
1370338dssfsuper2가장 긴 여행 (IOI23_longesttrip)C++20
40 / 100
241 ms444 KiB
#include "longesttrip.h"
#include <bits/stdc++.h>
using namespace std;

vector<int> longest_trip(int N, int D){
    if(D==3){
        vector<int> tt;
        for(int i = 0;i<N;i++)tt.push_back(i);
        return tt;
    }
    if(D==2){
        int cur=0;
        vector<int> res = {cur};
        set<int> left;
        for(int i = 1;i<N;i++)left.insert(i);
        for(int i=0;i<N-2;i++){
            int f=*(left.begin());
            int s=*(++left.begin());
            if(are_connected({cur}, {f})){
                left.erase(f);
                res.push_back(f);
                cur=f;
            }
            else{
                left.erase(s);
                res.push_back(s);
                cur=s;
            }
        }
        auto last=*(left.begin());
        if(are_connected({res.back()},{last})){
            res.push_back(last);
            return res;
        }
        else{
            auto t1=res.back();
            res.pop_back();
            auto t2=res.back();
            res.pop_back();
            res.push_back(t1);
            res.push_back(t2);
            res.push_back(last);
            return res;
        }
    }
    //finished special cases
    /*
    could get 40 more points with smth trivial
    cuz D=1 at least
    so finding longest path is easier i think
    oh ok algo for tc3 trivial
    */
    vector<int> cur={0};
    int wt=(N+1)/2;
    set<int> left;
    for(int i = 1;i<N;i++)left.insert(i);
    while(cur.size()<wt){
        auto top=cur.back();
        vector<int> nc;
        int ss=-1;
        for(int i = 0;i<N;i++){
            if(i==top)continue;
            if(are_connected({top}, {i})){
                if(left.count(i))ss=i;
            }
            else{
                nc.push_back(i);
            }
        }
        if(nc.size()>=wt){
            return nc;
        }
        cur.push_back(ss);
        left.erase(ss);
    }
    return cur;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…