제출 #501684

#제출 시각아이디문제언어결과실행 시간메모리
501684600MihneaTeleporters (IOI08_teleporters)C++17
100 / 100
447 ms44504 KiB
#include <bits/stdc++.h> using namespace std; signed main() { ios::sync_with_stdio(0); cin.tie(0); /// freopen ("input", "r", stdin); 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; assert(0 <= Other && Other < 2 * N); nxt[i] = Other + 1; } bool WannaCheck = true; WannaCheck = false; 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++; assert(!vis[i]); 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++; assert(!vis[j]); vis[j] = true; } SAD.push_back(LEN); } } sort(SAD.begin(), SAD.end()); int S = ZDApath; ///cout << N << " " << E << "\n"; while (!SAD.empty() && E) { E--; S += 2 + SAD.back(); SAD.pop_back(); } for (int j = 1; j <= E; j++) { if (j & 1) { S += 1; } else { S += 3; } } 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...