제출 #939553

#제출 시각아이디문제언어결과실행 시간메모리
939553JakobZorzWatching (JOI13_watching)C++17
100 / 100
483 ms16296 KiB
#include<iostream> #include<vector> #include<queue> #include<stack> #include<algorithm> #include<limits.h> #include<math.h> #include<map> #include<set> #include<unordered_map> #include<unordered_set> #include<iomanip> #include<cstring> #include<random> typedef long long ll; typedef unsigned long long ull; typedef long double ld; using namespace std; int n,p,q; int arr[2000]; int nxt1[2001]; int nxt2[2001]; bool get(int w){ nxt1[n]=n; nxt2[n]=n; for(int i=0;i<n;i++){ nxt1[i]=i; while(nxt1[i]<n&&arr[nxt1[i]]<arr[i]+w) nxt1[i]++; } for(int i=0;i<n;i++){ nxt2[i]=i; while(nxt2[i]<n&&arr[nxt2[i]]<arr[i]+2*w) nxt2[i]++; } vector<vector<int>>dp(p+1,vector<int>(q+1)); // dp[i1][i2] = how far can you come with using i1 small and i2 big cameras for(int i1=0;i1<=p;i1++){ for(int i2=0;i2<=q;i2++){ if(i1){ dp[i1][i2]=max(dp[i1][i2],nxt1[dp[i1-1][i2]]); } if(i2){ dp[i1][i2]=max(dp[i1][i2],nxt2[dp[i1][i2-1]]); } } } return dp[p][q]==n; } void solve(){ cin>>n>>p>>q; p=min(n,p); q=min(n,q); for(int i=0;i<n;i++) cin>>arr[i]; sort(arr,arr+n); int l=0,r=1e9; while(l<r-1){ int m=(l+r)/2; if(get(m)) r=m; else l=m; } cout<<r<<"\n"; } int main(){ ios::sync_with_stdio(false);cout.tie(NULL);cin.tie(NULL); //freopen("/Users/jakob/cp_testing/test.txt","r",stdin);freopen("output.out","w",stdout); int t=1;//cin>>t; while(t--)solve(); return 0; } /* 3 1 1 2 11 17 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...