제출 #219255

#제출 시각아이디문제언어결과실행 시간메모리
219255MKopchev구경하기 (JOI13_watching)C++14
100 / 100
74 ms8576 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]; 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; for(int p_now=0;p_now<=p;p_now++) for(int q_now=0;q_now<=q;q_now++) { if(p_now==0&&q_now==0){dp[p_now][q_now]=1;continue;} int ret=0,current; if(p_now) { current=would_go_small[dp[p_now-1][q_now]]; ret=max(ret,current); } if(q_now) { current=would_go_big[dp[p_now][q_now-1]]; ret=max(ret,current); } dp[p_now][q_now]=ret; if(ret>n)return 1; } return 0; } int main() { scanf("%i%i%i",&n,&p,&q); p=min(p,n); q=min(q,n); 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; }

컴파일 시 표준 에러 (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:53: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...