답안 #1060289

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1060289 2024-08-15T12:39:39 Z Huseyn123 가장 긴 여행 (IOI23_longesttrip) C++17
15 / 100
7 ms 448 KB
#include "longesttrip.h"
#include <bits/stdc++.h> 
using namespace std; 
vector<int> a,b,c; 
bool f(int x,int l,int r){
    vector<int> d;
    for(int i=l;i<=r;i++){
        d.push_back(b[i]);
    }
    if((int)d.size()==0){
        return false;
    }
    return are_connected({a[x]},d);
}
vector<int> longest_trip(int N, int D){ 
    a.clear(); 
    b.clear(); 
    c.clear();
    vector<int> res;
    if(D==3){ 
        for(int i=0;i<N;i++){
            res.push_back(i);
        }
    }
    else if(D==2){
        set<int> c;
        for(int i=1;i<N;i++){
            c.insert(i);
        }
        res.push_back(0);
        for(int i=0;i<N-1;i++){
            auto it=c.begin();
            if(are_connected({res.back()},{*it})){
                res.push_back(*it);
            }
            else{
                ++it; 
                if(it==c.end()){
                    reverse(res.begin(),res.end());
                    --it; 
                    res.push_back(*it);
                }
                else{
                    res.push_back(*it);
                }
            }
            c.erase(*it);
        }
    }
    else{ 
        a.push_back(0); 
        b.push_back(1);
        for(int i=2;i<N;i++){
            bool ok1=are_connected({a.back()},{i});
            bool ok2=true;
            if((int)b.size()>0){
                ok2=are_connected({b.back()},{i});
            }
            if(ok1 && ok2){
                reverse(b.begin(),b.end());
                a.push_back(i);
                for(auto x:b){
                    a.push_back(x);
                }
                b.clear();
            }
            else if(ok1){
                a.push_back(i);
            }
            else if(ok2){
                b.push_back(i);
            }
            else{
                reverse(b.begin(),b.end()); 
                for(auto x:b){
                    a.push_back(x);
                }
                b.clear();
                b.push_back(i);
            }
        }
        for(int i=0;i<(int)a.size();i++){
            int sz=(int)b.size();
            int sz1=(int)a.size();
            int l,r,mid; 
            l=0;
            r=sz-1;
            while(l<r){
                mid=(l+r+1)/2;
                if(f(i,mid,sz-1)){
                    l=mid;
                }
                else{
                    r=mid-1;
                }
            }
            if(f(i,l,sz-1) && l+1+max(i+1,sz1-i)>(int)c.size()){
                c.clear();
                for(int j=0;j<=l;j++){
                    c.push_back(b[j]);
                }
                if(i+1>sz1-i){
                    for(int j=i;j>=0;j--){
                        c.push_back(a[j]);
                    }
                }
                else{
                    for(int j=i;j<sz1;j++){
                        c.push_back(a[j]);
                    }
                }
            }
            l=0;
            r=sz-1;
            while(l<r){
                mid=(l+r)/2;
                if(f(i,0,mid)){
                    r=mid;
                }
                else{
                    l=mid+1;
                }
            }
            if(f(i,0,l) && sz-l+max(i+1,sz1-i)>(int)c.size()){
                c.clear();
                for(int j=sz-1;j>=l;j--){
                    c.push_back(b[j]);
                }
                if(i+1>sz1-i){
                    for(int j=i;j>=0;j--){
                        c.push_back(a[j]);
                    }
                }
                else{
                    for(int j=i;j<sz1;j++){
                        c.push_back(a[j]);
                    }
                }
            }
        }
        if((int)a.size()>(int)b.size()){
            res=a;
        }
        else{
            res=b;
        }
        if((int)c.size()>(int)res.size()){
            res=c;
        }
    }
    return res;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 344 KB Incorrect
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 344 KB Output is correct
2 Correct 1 ms 344 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 0 ms 344 KB Output is correct
5 Correct 0 ms 344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 344 KB Output is correct
2 Correct 7 ms 344 KB Output is correct
3 Correct 5 ms 344 KB Output is correct
4 Correct 7 ms 344 KB Output is correct
5 Correct 5 ms 448 KB Output is correct
6 Correct 5 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 5 ms 344 KB Output is correct
10 Correct 6 ms 444 KB Output is correct
11 Correct 5 ms 344 KB Output is correct
12 Correct 6 ms 344 KB Output is correct
13 Correct 6 ms 344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 344 KB non-disjoint arrays
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 344 KB non-disjoint arrays
2 Halted 0 ms 0 KB -