# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
45467 | 2018-04-14T09:26:41 Z | RayaBurong25_1 | Palembang Bridges (APIO15_bridge) | C++17 | 338 ms | 13908 KB |
#include <stdio.h> #include <vector> #include <set> #include <algorithm> #define INF 1000000000000000000LL typedef struct node node; struct node { int s, e; }; std::set<long long> Event; std::vector<long long> cEvent; std::vector<node> incE, decS; long long abs(long long a) { return (a < 0)?-a:a; } long long min(long long a, long long b) { return (a < b)?a:b; } long long max(long long a, long long b) { return (a > b)?a:b; } int sortIncE(node a, node b) { return (a.e < b.e || (a.e == b.e && a.s < b.s)); } int sortDecS(node a, node b) { return (a.s > b.s || (a.s == b.s && a.e > b.e)); } int main() { int K, N; scanf("%d %d", &K, &N); int i, j, k; long long Obligatory = 0; long long Sum1a = 0, Sum1b = 0, Sum2 = 0; char P, Q; int S, T; for (i = 0; i < N; i++) { scanf(" %c %d %c %d", &P, &S, &Q, &T); if (P == Q) { Obligatory += abs(T - S); } else { Obligatory += 1 + abs(T - S); incE.push_back({min(S, T), max(S, T)}); decS.push_back({min(S, T), max(S, T)}); Event.insert(S); Event.insert(T); } } // printf("Obligatory %lld\n", Obligatory); std::set<long long>::iterator it; for (it = Event.begin(); it != Event.end(); it++) { cEvent.push_back(*it); // printf("cEvent %lld\n", *it); } N = incE.size(); for (i = 0; i < N; i++) { S = std::lower_bound(cEvent.begin(), cEvent.end(), incE[i].s) - cEvent.begin(); T = std::lower_bound(cEvent.begin(), cEvent.end(), incE[i].e) - cEvent.begin(); incE[i] = {S, T}; S = std::lower_bound(cEvent.begin(), cEvent.end(), decS[i].s) - cEvent.begin(); T = std::lower_bound(cEvent.begin(), cEvent.end(), decS[i].e) - cEvent.begin(); decS[i] = {S, T}; // printf("S%d T%d\n", S, T); Sum1b += cEvent[S]; } std::sort(incE.begin(), incE.end(), sortIncE); std::sort(decS.begin(), decS.end(), sortDecS); if (K == 1) { long long Ans = INF; if (cEvent.size() == 0) Ans = Obligatory; j = 0; k = N - 1; for (i = 0; i < cEvent.size(); i++) { while (j < N && incE[j].e < i) { Sum1a += cEvent[incE[j].e]; j++; } while (k >= 0 && decS[k].s == i) { Sum1b -= cEvent[decS[k].s]; k--; } // printf("j %d k %d Sum1a %lld Sum1b %lld = %lld\n", j, k, Sum1a, Sum1b, Obligatory + 2LL*(cEvent[i]*j - Sum1a) + 2LL*(Sum1b - cEvent[i]*(k + 1))); Ans = min(Ans, Obligatory + 2LL*(cEvent[i]*j - Sum1a) + 2LL*(Sum1b - cEvent[i]*(k + 1))); } printf("%lld", Ans); } else { //not yet } }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 256 KB | Output is correct |
2 | Correct | 2 ms | 364 KB | Output is correct |
3 | Correct | 3 ms | 428 KB | Output is correct |
4 | Correct | 5 ms | 480 KB | Output is correct |
5 | Correct | 3 ms | 608 KB | Output is correct |
6 | Correct | 3 ms | 608 KB | Output is correct |
7 | Correct | 3 ms | 608 KB | Output is correct |
8 | Correct | 3 ms | 608 KB | Output is correct |
9 | Correct | 3 ms | 608 KB | Output is correct |
10 | Correct | 2 ms | 608 KB | Output is correct |
11 | Correct | 3 ms | 608 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 608 KB | Output is correct |
2 | Correct | 2 ms | 608 KB | Output is correct |
3 | Correct | 3 ms | 608 KB | Output is correct |
4 | Correct | 3 ms | 636 KB | Output is correct |
5 | Correct | 3 ms | 636 KB | Output is correct |
6 | Correct | 3 ms | 636 KB | Output is correct |
7 | Correct | 3 ms | 636 KB | Output is correct |
8 | Correct | 3 ms | 636 KB | Output is correct |
9 | Correct | 4 ms | 636 KB | Output is correct |
10 | Correct | 2 ms | 636 KB | Output is correct |
11 | Correct | 4 ms | 636 KB | Output is correct |
12 | Correct | 46 ms | 2432 KB | Output is correct |
13 | Correct | 338 ms | 13776 KB | Output is correct |
14 | Correct | 151 ms | 13776 KB | Output is correct |
15 | Correct | 191 ms | 13776 KB | Output is correct |
16 | Correct | 54 ms | 13776 KB | Output is correct |
17 | Correct | 169 ms | 13776 KB | Output is correct |
18 | Correct | 169 ms | 13776 KB | Output is correct |
19 | Correct | 279 ms | 13776 KB | Output is correct |
20 | Correct | 73 ms | 13776 KB | Output is correct |
21 | Correct | 206 ms | 13908 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 2 ms | 13908 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 2 ms | 13908 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 2 ms | 13908 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |