# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
30041 | 2017-07-21T18:20:51 Z | samir_droubi | 구경하기 (JOI13_watching) | C++14 | 1000 ms | 5976 KB |
#include <bits/stdc++.h> using namespace std; int n,p,q; const int mxn=1005; int dp[mxn][mxn]; int a[mxn]; int l[mxn]; int l2[mxn]; int calc(int i,int u) { if( u > p )return (1e9); if(i == 0 ) return 0; int ans = calc( l[i] - 1 , u + 1 ); ans = min(ans , 1 + calc( l2[i] - 1 , u ) ); return dp[i][u] = ans; } bool check(int w) { memset(dp,-1,sizeof dp); l[0] = 1; l2[0] = 1; for(int i = 1; i <= n ; ++i) { l[i] = l[i - 1]; l2[i] = l2[i - 1]; while(a[i] - a[ l[i] ] + 1 > w) ++l[i]; while(a[i] - a[ l2[i] ] + 1 > 2*w) ++l2[i]; } return calc( n , 0 ) <= q; } void bs() { int l=1; int r=(1e9); int ans=-1; while( l <= r ) { int md = ( l + r ) / 2; if( check( md ) )r = md - 1 , ans = md; else l = md + 1; } printf("%d\n",ans); } int main() { scanf("%d%d%d",&n,&p,&q); for(int i = 1 ; i <= n ; ++i ) scanf("%d",&a[i]); sort( a + 1 , a + n + 1 ); bs(); return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 6 ms | 5976 KB | Output is correct |
2 | Correct | 6 ms | 5976 KB | Output is correct |
3 | Correct | 6 ms | 5976 KB | Output is correct |
4 | Execution timed out | 1000 ms | 5976 KB | Execution timed out |
5 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Runtime error | 0 ms | 5976 KB | Execution killed with signal 11 (could be triggered by violating memory limits) |
2 | Halted | 0 ms | 0 KB | - |