Submission #64866

#TimeUsernameProblemLanguageResultExecution timeMemory
64866yogahmadRoller Coaster Railroad (IOI16_railroad)C++14
34 / 100
647 ms24264 KiB
#include "railroad.h"

#include <bits/stdc++.h>
using namespace std;
#define fbo find_by_order
#define ook order_of_key
#define f first
#define s second
#define pb push_back
#define reset(a,b) memset(a,b,sizeof a);
#define MOD 1000000007
#define MID (l+r)/2
#define ALL(x) x.begin(),x.end()
#define debug(x) cout<<#x<<" = "<<(x)<<endl
#define mx 100003
#define pc(x) putchar_unlocked(x);
int n;
long long dep[18][(1<<16)+10];
vector<int>S,T;

long long dp(int now,int mask){
	if(__builtin_popcount(mask)==n)return 0;
	long long&ret=dep[now][mask];
	if(ret!=-1)return ret;
	ret=1e18;
	for(int i=0;i<n;i++){
		if(!(mask&(1<<i))){
			long long cost=0;
			if(T[now]>=S[i])cost=T[now]-S[i];
			int nex=mask|(1<<i);
			ret=min(ret,dp(i,nex)+cost);
		}
	}
	return ret;
}

map<int,int>cnt;

long long plan_roller_coaster(vector<int> s, vector<int> t) {
    n=s.size();
    S=s;
    T=t;
    if(n<=16){
    	T.pb(1);
    	reset(dep,-1);
    	return dp(n,0);
	}
	cnt[1]++;
	for(int i:s){
		cnt[i]--;
	}
	for(int i:t){
		cnt[i]++;
	}
	int ada=0;
	for(auto i:cnt){
		if(i.s!=0){
			if(!ada)ada=1;
			else{
				return 1;
			}
		}
	}
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...