제출 #1218583

#제출 시각아이디문제언어결과실행 시간메모리
1218583JooDdaeShortcut (IOI16_shortcut)C++20
71 / 100
2092 ms1352 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const ll INF = 1e18; ll find_shortcut(int n, vector<int> l, vector<int> d, int c) { vector<ll> p(n, 0); for(int i=1;i<n;i++) p[i] = p[i-1]+l[i-1]; auto find = [&](int i, int j, ll m) -> array<ll, 4> { ll x = p[i], yl = p[j]-m+d[i]+d[j], yr = p[j]+m-d[i]-d[j]; return {x+yl, x-yr, x+yr, x-yl}; }; auto solve = [&](ll m) { ll xl = -INF, yl = -INF, xr = INF, yr = INF; for(int i=0;i<n;i++) for(int j=i+1;j<n;j++) if(p[j]-p[i]+d[j]+d[i] > m) { auto [XL, YL, XR, YR] = find(i, j, m-c); // cout << i << " " << j << " : " << XL << " " << YL << " " << XR << " " << YR << "\n"; xl = max(xl, XL), yl = max(yl, YL); xr = min(xr, XR), yr = min(yr, YR); if(xl > xr || yl > yr) return false; } for(auto u : p) { ll L = max(xl-u, yl+u), R = min(xr-u, yr+u); auto it = lower_bound(p.begin(), p.end(), L); if(it != p.end() && *it <= R) return true; } return false; }; ll s = 0, e = INF; while(s <= e) { ll m = (s+e) >> 1; if(solve(m)) e = m-1; else s = m+1; } return s; }

컴파일 시 표준 에러 (stderr) 메시지

shortcut.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
shortcut_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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...