제출 #126341

#제출 시각아이디문제언어결과실행 시간메모리
126341SortingRoller Coaster Railroad (IOI16_railroad)C++14
0 / 100
156 ms13448 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...