Submission #1145423

#TimeUsernameProblemLanguageResultExecution timeMemory
1145423PekibanAliens (IOI16_aliens)C++20
0 / 100
1 ms328 KiB
#include "aliens.h" #include <bits/stdc++.h> using namespace std; using ll = long long; using ld = long double; const int M = 1e6 + 5; deque<int> dq; ld dp[M], C[M]; struct line { ld k, c; ld f(ld x) { return k * x + c; }; } T[M]; ld X(line &A, line &B) { return (ld)(A.c - B.c) / (B.k - A.k); } long long take_photos(int n, int m, int k, vector<int> r, vector<int> c) { int mn[m+1]; fill(mn, mn+m+1, 1e9); for (int i = 0; i < n; ++i) r[i]++, c[i]++; for (int i = 0; i < n; ++i) mn[max(r[i], c[i])] = min({mn[max(r[i], c[i])], r[i], c[i]}); ld L = 0, R = m * (1ll) * m, ans = 1e18; for (int _ = 0; _ < 20; ++_) { // popravi! ld mid = (L + R)/2; T[0] = {0, 0}, dq = {0}, C[0] = 0; for (ll i = 1; i <= m; ++i) { if (mn[i] != 1e9) { int sz = dq.size(), p = -1; while (sz > 1 && dq[sz-1] >= mn[i]) p = dq[sz-1], dq.pop_back(), sz--; while (dq.size() > 1 && X(T[dq[0]], T[dq[1]]) < i) dq.pop_front(); dp[i] = T[dq[0]].f(i) + i * i + mid, C[i] = C[dq[0]]+1; if (p != -1) { T[p] = {-2*p, dp[i] - i * i + 2 * i * p}; C[p] = C[i]; int sz = dq.size() - 1; while (sz >= 1 && X(T[dq[sz-1]], T[p]) <= X(T[dq[sz-1]], T[dq[sz]])) dq.pop_back(), sz--; dq.push_back(p); } } else dp[i] = dp[i-1], C[i] = C[i-1]; int sz = dq.size()-1; T[i] = {-2*i, dp[i] - i * i + 2 * i * i}; while (sz >= 1 && X(T[dq[sz-1]], T[i]) <= X(T[dq[sz-1]], T[dq[sz]])) dq.pop_back(), sz--; dq.push_back(i); } if (C[m] <= k) R = mid, ans = dp[m] - k * mid; else L = mid; } return roundl(ans); }

Compilation message (stderr)

aliens.cpp: In function 'long long int take_photos(int, int, int, std::vector<int>, std::vector<int>)':
aliens.cpp:37:31: warning: narrowing conversion of '(-2 * p)' from 'int' to 'ld' {aka 'long double'} [-Wnarrowing]
   37 |                     T[p] = {-2*p, dp[i] - i * i + 2 * i * p}; C[p] = C[i];
      |                             ~~^~
aliens.cpp:46:23: warning: narrowing conversion of '(-2 * i)' from 'll' {aka 'long long int'} to 'ld' {aka 'long double'} [-Wnarrowing]
   46 |             T[i] = {-2*i, dp[i] - i * i + 2 * i * i};
      |                     ~~^~
aliens.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
aliens_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#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...