Submission #320270

#TimeUsernameProblemLanguageResultExecution timeMemory
320270AlexLuchianovTeleporters (IOI08_teleporters)C++14
100 / 100
635 ms65536 KiB
#include <iostream> #include <vector> #include <cassert> #include <cmath> #include <set> #include <map> #include <algorithm> using ll = long long; #define MIN(a, b) (((a) < (b)) ? (a) : (b)) #define MAX(a, b) (((a) < (b)) ? (b) : (a)) int const nmax = 1000000; int edge[5 + 2 * nmax], seen[5 + nmax * 2]; int extract(int node) { int start = node; int _count = 0; std::vector<int> aux; do { seen[node] = 1; _count++; node = edge[node]; aux.push_back(node); } while(start != node); return _count; } int main() { std::ios::sync_with_stdio(0); std::cin.tie(0); int n, m; std::cin >> n >> m; std::vector<std::pair<int,int>> points; points.push_back({0, 0}); points.push_back({nmax * 2 + 1, 1}); for(int i = 1;i <= n; i++) { int start, stop; std::cin >> start >> stop; points.push_back({start, i * 2}); points.push_back({stop, i * 2 + 1}); } std::sort(points.begin(), points.end()); for(int i = 0; i < points.size() - 1; i++) edge[points[i].second] = (points[i + 1].second ^ 1); int result = extract(0) - 1; std::vector<int> cycles; for(int i = 2; i <= 2 * n + 1; i++) if(seen[i] == 0) cycles.push_back(extract(i)); std::sort(cycles.begin(), cycles.end()); std::reverse(cycles.begin(), cycles.end()); for(int i = 0; i < cycles.size() && 0 < m; i++) { result += cycles[i] + 2; m--; } std::cout << result + m * 2 - m % 2; return 0; }

Compilation message (stderr)

teleporters.cpp: In function 'int main()':
teleporters.cpp:48:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   48 |   for(int i = 0; i < points.size() - 1; i++)
      |                  ~~^~~~~~~~~~~~~~~~~~~
teleporters.cpp:58:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   58 |   for(int i = 0; i < cycles.size() && 0 < m; 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...
#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...
#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...
#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...