Submission #501675

#TimeUsernameProblemLanguageResultExecution timeMemory
501675600MihneaTeleporters (IOI08_teleporters)C++17
65 / 100
767 ms65540 KiB
#include <bits/stdc++.h> using namespace std; signed main() { ios::sync_with_stdio(0); cin.tie(0); int N, E; cin >> N >> E; vector<pair<int, int>> guys; for (int i = 0; i < N; i++) { int A, B; cin >> A >> B; guys.push_back({A, i}); guys.push_back({B, i}); } sort(guys.begin(), guys.end()); vector<int> SM(N); for (int i = 0; i < 2 * N; i++) { SM[guys[i].second] += i; } vector<int> nxt(2 * N + 1); for (int i = 0; i < 2 * N; i++) { int Type = guys[i].second; int Other = SM[Type] - i; nxt[i] = Other + 1; } bool WannaCheck = true; if (WannaCheck) { map<int, int> B; for (int i = 0; i < 2 * N; i++) { B[nxt[i]]++; } for (int i = 1; i < 2 * N + 1; i++) { assert(B.count(i) && B[i] == 1); } } vector<bool> vis(2 * N + 1, false); int ZDApath = 0; for (int i = 0; i != 2 * N; i = nxt[i]) { ZDApath++; vis[i] = true; } vis[2 * N] = true; vector<int> SAD; for (int i = 0; i <= 2 * N; i++) { if (!vis[i]) { int LEN = 1; vis[i] = true; for (int j = nxt[i]; j != i; j = nxt[j]) { LEN++; vis[j] = true; } SAD.push_back(LEN); } } sort(SAD.begin(), SAD.end()); int S = ZDApath; while (!SAD.empty() && E) { E--; S += 2 + SAD.back(); SAD.pop_back(); } for (int j = 1; j <= E; j++) { if (j & 1) { S += 3; } else { S += 1; } } cout << S << "\n"; }
#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...