Submission #817891

#TimeUsernameProblemLanguageResultExecution timeMemory
817891IsamWatching (JOI13_watching)C++17
100 / 100
278 ms8620 KiB
#include<iostream> #include<algorithm> using namespace std; int n, p, q; const int MAX = 2001; int dp[MAX][MAX]; int x[MAX]; int Find(int pos, int seg){ int xpos = x[pos + 1] + seg - 1; int l = pos + 1, r = n - 1, mid, last = pos; while(l <= r){ mid = l + ((r - l) >> 1); if(x[mid] <= xpos){ last = mid; l = mid + 1; }else{ r = mid - 1; } } return last; } bool check(int& w){ dp[0][0] = -1; for(int i = 0; i <= p; ++i){ for(int j = 0; j <= q; ++j){ if(!i && !j) continue; if(!i) dp[i][j] = Find(dp[i][j-1], (w << 1)); else if(!j) dp[i][j] = Find(dp[i-1][j], w); else dp[i][j] = max(Find(dp[i-1][j], w), Find(dp[i][j-1], (w << 1))); if(dp[i][j] == n - 1) return true; } } return false; } int solve(){ cin >> n >> p >> q; for(int i = 0; i < n; ++i){ cin >> x[i]; } if(p + q >= n) return 1; sort(x, x + n); int l = 1, r = x[n-1], mid, w; while(l <= r){ mid = l + ((r - l) >> 1); if(check(mid)){ w = mid; r = mid - 1; }else{ l = mid + 1; } } return w; } int main(){ ios_base::sync_with_stdio(false); cout << solve() << '\n'; exit(0); }

Compilation message (stderr)

watching.cpp: In function 'int solve()':
watching.cpp:45:33: warning: 'w' may be used uninitialized in this function [-Wmaybe-uninitialized]
   45 |     int l = 1, r = x[n-1], mid, w;
      |                                 ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...