Submission #219253

#TimeUsernameProblemLanguageResultExecution timeMemory
219253MKopchev구경하기 (JOI13_watching)C++14
0 / 100
709 ms33536 KiB
#include<bits/stdc++.h> using namespace std; const int nmax=2e3+42; int n,p,q,inp[nmax]; int would_go_small[nmax],would_go_big[nmax]; int dp[nmax][nmax]; int rec(int p_now,int q_now) { if(p_now==0&&q_now==0)return 1; if(dp[p_now][q_now]!=-1)return dp[p_now][q_now]; int ret=0,current; if(p_now) { current=would_go_small[rec(p_now-1,q_now)]; ret=max(ret,current); } if(q_now) { current=would_go_big[rec(p_now,q_now-1)]; ret=max(ret,current); } dp[p_now][q_now]=ret; return ret; } bool can(int w) { for(int i=1;i<=n;i++) { would_go_small[i]=lower_bound(inp+1,inp+n+1,inp[i]+w)-inp; would_go_big[i]=lower_bound(inp+1,inp+n+1,inp[i]+2*w)-inp; //cout<<i<<" -> "<<would_go_small[i]<<" "<<would_go_big[i]<<endl; } would_go_big[n+1]=n+1; would_go_small[n+1]=n+1; memset(dp,-1,sizeof(dp)); return rec(p,q)>n; } int main() { scanf("%i%i%i",&n,&p,&q); for(int i=1;i<=n;i++)scanf("%i",&inp[i]); sort(inp+1,inp+n+1); int ok=1e9/3+1,not_ok=0; while(ok-not_ok>1) { int av=(ok+not_ok)/2; if(can(av))ok=av; else not_ok=av; } printf("%i\n",ok); return 0; }

Compilation message (stderr)

watching.cpp: In function 'int main()':
watching.cpp:48:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%i%i%i",&n,&p,&q);
     ~~~~~^~~~~~~~~~~~~~~~~~~
watching.cpp:49:31: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     for(int i=1;i<=n;i++)scanf("%i",&inp[i]);
                          ~~~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...