제출 #717144

#제출 시각아이디문제언어결과실행 시간메모리
717144LittleCube즐거운 행로 (APIO20_fun)C++14
0 / 100
1 ms340 KiB
#include "fun.h" #ifndef EVAL #include "grader.cpp" #endif #include <bits/stdc++.h> #define pii pair<int, int> #define F first #define S second using namespace std; vector<int> createFunTour(int N, int Q) { priority_queue<pii> pq; for (int i = 1; i < N; i++) pq.push(pii(attractionsBehind(0, i), i)); // N - 1 int c = 0; while (!pq.empty() && pq.top().F > N / 2) { auto [sz, u] = pq.top(); pq.pop(); if (hoursRequired(c, u) == 1) // <= (N - 1) / 2 c = u; } vector<int> d(N), order(N), sol(2 * N, -1); deque<int> tmp[2]; for (int i = 0; i < N; i++) d[i] = hoursRequired(c, i), order[i] = i; sort(order.begin(), order.end(), [&](int i, int j) { return d[i] < d[j]; }); auto diffSubtree = [&](int i, int j) { return hoursRequired(i, j) == d[i] + d[j]; }; int t = 0; for (int i = 0; i < N; i++) { if (tmp[t ^ 1].empty() || diffSubtree(order[i], tmp[t ^ 1].back())) { tmp[t].emplace_back(order[i]); if (tmp[t].size() + t > tmp[t ^ 1].size()) t ^= 1; } else tmp[t ^ 1].emplace_back(order[i]); } for (int i = 0; i < tmp[0].size(); i++) sol[i * 2] = tmp[0][i]; for (int i = 0; i < tmp[1].size(); i++) sol[i * 2 + 1] = tmp[1][i]; tmp[0].clear(), tmp[1].clear(); int over = -1, cnt = 0, last = 0; for (int i = 2 * N - 1; i > 0; i--) if (sol[i] == -1 && sol[i - 1] >= 0) { over = sol[i - 1], cnt++; tmp[1].emplace_back(sol[i - 1]); last = i - 2; } // cerr << c << '\n'; // for (int i = 0; i < 2 * N; i++) // cerr << sol[i] << " \n"[i == 2 * N - 1]; sol.resize(N); for (; cnt > 0; last--) { if (diffSubtree(sol[last], over)) { tmp[0].emplace_back(sol[last]); cnt--; } else { tmp[1].emplace_back(sol[last]); last--; tmp[0].emplace_back(sol[last]); } } if(last != -1 && !diffSubtree(sol[last], over)) tmp[1].swap(tmp[0]); reverse(sol.begin(), sol.end()); for (int i = 0; i < tmp[0].size(); i++) sol[i * 2] = tmp[0][i]; for (int i = 0; i < tmp[1].size(); i++) sol[i * 2 + 1] = tmp[1][i]; // for (int i = 0; i < N; i++) // cerr << sol[i] << " \n"[i == 2 * N - 1]; return sol; }

컴파일 시 표준 에러 (stderr) 메시지

fun.cpp: In function 'std::vector<int> createFunTour(int, int)':
fun.cpp:19:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   19 |         auto [sz, u] = pq.top();
      |              ^
fun.cpp:49:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::deque<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   49 |     for (int i = 0; i < tmp[0].size(); i++)
      |                     ~~^~~~~~~~~~~~~~~
fun.cpp:51:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::deque<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |     for (int i = 0; i < tmp[1].size(); i++)
      |                     ~~^~~~~~~~~~~~~~~
fun.cpp:84:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::deque<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   84 |     for (int i = 0; i < tmp[0].size(); i++)
      |                     ~~^~~~~~~~~~~~~~~
fun.cpp:86:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::deque<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   86 |     for (int i = 0; i < tmp[1].size(); i++)
      |                     ~~^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...