제출 #1362655

#제출 시각아이디문제언어결과실행 시간메모리
1362655mayacRoller Coaster Railroad (IOI16_railroad)C++20
0 / 100
251 ms14516 KiB
#include "railroad.h"
#include <bits/stdc++.h>
using namespace std;
using ll=long long;

bool try1(vector<int> s,vector<int> t){
    int n = (int) s.size(),p=1;
    set<pair<int,int>> x;
    for(int i=0;i<n;i++)x.insert({s[i],t[i]});
    for(int i=0;i<n;i++){
        auto it=x.lower_bound({p,0});
        while((i<n-1)&&it!=x.end()&&(x.lower_bound({(*it).second,0})==x.end())){
            it++;
        }
        if(it==x.end())return 0;
        p=(*it).second;
        x.erase(it);
    }
    return 1;
}

ll try2(vector<int> s,vector<int> t,int m){
    int n = (int) s.size(),p=1;
    set<pair<int,int>> x;
    for(int i=0;i<n;i++)x.insert({s[i],t[i]});
    for(int i=0;i<n-1;i++){
        auto it=x.lower_bound({p,0});
        if(it==x.end())return 0;
        p=(*it).second;
        x.erase(it);
    }
    return p<=m;
}

long long plan_roller_coaster(std::vector<int> s, std::vector<int> t) {
    int n = (int) s.size();
    if(try1(s,t))return 0;
    int m=0,tmp;
    for(int i=1;i<n;i++){
        if(t[i]>t[m]||(t[i]==t[m]&&s[i]>s[m]))m=i;
    }
    tmp=s[m];
    s[m]=0;
    if(try2(s,t,tmp))return 0;
    return 1;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…