이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 7;
const int M = (1 << 16) + 7;
const long long inf = 1e18 + 7;
pair<long long, bool> dp[M][19];
int n;
pair<int, int> p[N];
long long solve(int state, int pr = 17){
if(dp[state][pr].second){
return dp[state][pr].first;
}
if(state == (1 << n) - 1){
return 0;
}
dp[state][pr].second = true;
dp[state][pr].first = inf;
long long curr;
if(pr == 17){
curr = 1;
}
else{
curr = p[pr].second;
}
for(int i = 0; i < n; i++){
if((1 << i) & state){
continue;
}
dp[state][pr].first = min(dp[state][pr].first, solve(state | (1 << i), i) + max(curr - p[i].first, 0ll));
}
return dp[state][pr].first;
}
bool cmp(pair<long long, int> lvalue, pair<long long, int> rvalue){
if(lvalue.first != rvalue.first){
return lvalue.first < rvalue.first;
}
return lvalue.second < rvalue.second;
}
long long plan_roller_coaster(vector<int> s, vector<int> t){
n = (int)s.size();
for(int i = 0; i < n; i++){
p[i] = {s[i], t[i]};
}
/*if(n <= 16){
return solve(0);
}*/
vector<pair<long long, int> > v;
bool eq = false;
for(int i = 0; i < n; i++){
if(s[i] < t[i]){
v.push_back({s[i], 1});
v.push_back({t[i], 2});
}
else if(s[i] > t[i]){
v.push_back({t[i], 3});
v.push_back({s[i], 4});
}
if(s[i] == t[i]){
srand(time(NULL));
return rand() % 2;
}
}
v.push_back({inf, 4});
v.push_back({1, 3});
sort(v.begin(), v.end(), cmp);
int a = 0, b = 0;
for(int i = 0; i < (int)v.size(); i++){
//cout << v[i].first << " v[i] " << v[i].second << endl;
switch(v[i].second){
case 1:
a++;
break;
case 2:
a--;
break;
case 3:
b++;
break;
case 4:
b--;
break;
}
//cout << a << " " << b << endl;
if(i == (int)v.size() - 1 || v[i].first != v[i + 1].first){
if(b < a){
return 1;
}
if(b == 0 && v[i].first != inf){
return 1;
}
}
}
return 0;
}
/*int main(){
int nn;
cin >> nn;
vector<int> s, t;
for(int i = 0; i < nn; i++){
int x, y;
cin >> x >> y;
s.push_back(x);
t.push_back(y);
}
cout << plan_roller_coaster(s, t) << endl;
cout << solve(0) << endl;
return 0;
}*/
컴파일 시 표준 에러 (stderr) 메시지
railroad.cpp: In function 'long long int plan_roller_coaster(std::vector<int>, std::vector<int>)':
railroad.cpp:64:7: warning: unused variable 'eq' [-Wunused-variable]
bool eq = false;
^~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |