Submission #237784

#TimeUsernameProblemLanguageResultExecution timeMemory
237784IgorISoccer (JOI17_soccer)C++17
30 / 100
14 ms384 KiB
const int LG = 21; const int FN = 400005; const long long MOD = 998244353; const long long INF = 1e9; const long long INFLL = 1e18; #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; typedef vector<int> vi; typedef vector<ll> vll; #define forn(i, n) for (int (i) = 0; (i) != (n); (i)++) #define all(v) (v).begin(), (v).end() #define rall(v) (v).rbegin(), (v).rend() #define popcount(x) __builtin_popcount(x) #define popcountll(x) __builtin_popcountll(x) #define fi first #define se second #define re return #define pb push_back #define uniq(x) sort(all(x)); (x).resize(unique(all(x)) - (x).begin()) #ifdef LOCAL #define dbg(x) cerr << __LINE__ << " " << #x << " " << x << endl #define ln cerr << __LINE__ << endl #else #define dbg(x) void(0) #define ln void(0) #endif // LOCAL int cx[4] = {-1, 0, 1, 0}; int cy[4] = {0, -1, 0, 1}; string Yes[2] = {"No", "Yes"}; string YES[2] = {"NO", "YES"}; ll inq(ll x, ll y) { if (!y) re 1 % MOD; ll l = inq(x, y / 2); if (y % 2) re l * l % MOD * x % MOD; re l * l % MOD; } ll rev(ll x) { return inq(x, MOD - 2); } bool __precomputed_combinatorics = 0; vector<ll> __fact, __ufact, __rev; void __precompute_combinatorics() { __precomputed_combinatorics = 1; __fact.resize(FN); __ufact.resize(FN); __rev.resize(FN); __rev[1] = 1; for (int i = 2; i < FN; i++) __rev[i] = MOD - __rev[MOD % i] * (MOD / i) % MOD; __fact[0] = 1, __ufact[0] = 1; for (int i = 1; i < FN; i++) __fact[i] = __fact[i - 1] * i % MOD, __ufact[i] = __ufact[i - 1] * __rev[i] % MOD; } ll fact(int x) { if (!__precomputed_combinatorics) __precompute_combinatorics(); return __fact[x]; } ll cnk(int n, int k) { if (k < 0 || k > n) return 0; if (!__precomputed_combinatorics) __precompute_combinatorics(); return __fact[n] * __ufact[n - k] % MOD * __ufact[k] % MOD; } int Root(int x, vector<int> &root) { if (x == root[x]) return x; return root[x] = Root(root[x], root); } void Merge(int v, int u, vector<int> &root, vector<int> &sz) { v = Root(v, root), u = Root(u, root); if (v == u) return; if (sz[v] < sz[u]) { sz[u] += sz[v]; root[v] = u; } else { sz[v] += sz[u]; root[u] = v; } } int ok(int x, int n) { return 0 <= x && x < n; } void bfs(int v, vi &dist, vector<vi> &graph) { fill(all(dist), -1); dist[v] = 0; vi q = {v}; for (int i = 0; i < q.size(); i++) { for (auto u : graph[q[i]]) { if (dist[u] == -1) { dist[u] = dist[q[i]] + 1; q.push_back(u); } } } } ll log10(ll x) { if (x < 10) re 1; re 1 + log10(x / 10); } double sqr(double x) { return x * x; } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); ll h, w, a, b, c, n; cin >> h >> w >> a >> b >> c >> n; vll x(n), y(n); forn(i, n) cin >> x[i] >> y[i]; vll dp(n, INFLL); vi r(n, 0); dp[0] = 0; for (int i = 0; i < n; i++) { ll minc = INFLL, id = -1; for (int j = 0; j < n; j++) { if (r[j] == 0 && dp[j] < minc) { minc = dp[j]; id = j; } } r[id] = 1; for (int j = 0; j < n; j++) { ll v = min(abs(x[id] - x[j]), abs(y[id] - y[j])) * c + b; dp[j] = min(dp[j], dp[id] + v); } } cout << dp[n - 1]; } /* Note: Check constants at the beginning of the code. N is set to 4e5 but be careful in problems with large constant factor. Setting N in every problem is more effective. Check corner cases. N = 1 No def int long long for now. Add something here. */

Compilation message (stderr)

soccer.cpp: In function 'void bfs(int, vi&, std::vector<std::vector<int> >&)':
soccer.cpp:114:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < q.size(); i++)
                     ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...