Submission #1314564

#TimeUsernameProblemLanguageResultExecution timeMemory
1314564dex111222333444555Passport (JOI23_passport)C++20
48 / 100
970 ms375088 KiB
#include <bits/stdc++.h> #define ii pair<int, int> #define fi first #define se second #define siz(v) ((int)(v).size()) #define all(v) begin((v)), end(v) #define BIT(x, i) (((x) >> (i)) & 1) #define MASK(i) (1LL << (i)) #define TIME (1.0 * clock() / CLOCKS_PER_SEC) #define dbg(x) "[" #x " = " << x << "]" using namespace std; const int MAXN = 2505, infINT = 1e9 + 23737, MAXB = 31; const int dx[4] = {-1, 0, 0, 1}; const int dy[4] = {0, -1, 1, 0}; template<class X, class Y> bool minimize(X &x, const Y &y){return x > y ? x = y, 1: 0;} template<class X, class Y> bool maximize(X &x, const Y &y){return x < y ? x = y, 1: 0;} struct E{ int nl, nr, nw; E(int _nl = 0, int _nr = 0, int _nw = 0): nl(_nl), nr(_nr), nw(_nw) {}; }; int numVal, numQuery, dist[MAXN][MAXN], query[MAXN]; int L[MAXN], R[MAXN], bestL[MAXN][MAXN], bestR[MAXN][MAXN]; vector<E> adj[MAXN][MAXN]; void input(){ cin >> numVal; for(int i = 1; i <= numVal; i++) cin >> L[i] >> R[i]; cin >> numQuery; for(int q = 1; q <= numQuery; q++) cin >> query[q]; } void addEdge(int l, int r, int nl, int nr, int nw){ adj[nl][nr].push_back(E(l, r, nw)); } void bfs(){ memset(dist, 0x3f, sizeof dist); deque<ii> q; q.emplace_back(1, numVal); dist[1][numVal] = 0; while(q.size()){ int l = q.front().fi, r = q.front().se; q.pop_front(); for(const E &e: adj[l][r]){ if (minimize(dist[e.nl][e.nr], dist[l][r] + e.nw)){ if (e.nw == 0) q.emplace_front(e.nl, e.nr); else q.emplace_back(e.nl, e.nr); } } } } void solve(){ for(int l = 1; l <= numVal; l++){ bestL[l][l] = L[l]; bestR[l][l] = R[l]; for(int r = l + 1; r <= numVal; r++){ bestL[l][r] = min(bestL[l][r - 1], L[r]); bestR[l][r] = max(bestR[l][r - 1], R[r]); } } for(int i = 1; i <= numVal; i++){ addEdge(i, i, L[i], R[i], 1); } for(int l = 1; l <= numVal; l++) for(int r = l + 1; r <= numVal; r++){ addEdge(l, r, bestL[l][r], r, 1); addEdge(l, r, l, bestR[l][r], 1); addEdge(l, r, l + 1, r, 0); addEdge(l, r, l, r - 1, 0); } bfs(); for(int q = 1; q <= numQuery; q++){ int d = dist[query[q]][query[q]]; cout << (d <= infINT ? d: -1) << '\n'; } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define task "THONGHANH" if (fopen(task".inp", "r")){ freopen(task".inp", "r", stdin); freopen(task".out", "w", stdout); } int t = 1; // cin >> t; while(t--){ input(); solve(); } cerr << TIME << ".s\n"; }

Compilation message (stderr)

passport.cpp: In function 'int main()':
passport.cpp:87:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   87 |         freopen(task".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
passport.cpp:88:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   88 |         freopen(task".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#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...