# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
165547 | ArKCa | Cipele (COCI18_cipele) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
int n,k,m;
int dizi1[5000],dizi2[5000],dp[5000][5000];
int dpf(int crr,int r){
if(crr==(n-1)){
int mn=INT_MAX;
for(int i=r;i<m;i++){
mn=min(mn,abs(dizi1[crr]-dizi2[i]) );
}
dp[crr][r]=mn;
return dp[crr][r];
}
if( (n-crr) > (m-r) ){
return INT_MAX;
}
if(dp[crr][r]!=-1){
return dp[crr][r];
}
int mn=INT_MAX;
// printf("a\n");
for(int i=r;i<m && ( (n-(crr+1)) <= (m-(i+1)) );i++){
mn=min(mn,max( abs(dizi1[crr]-dizi2[i] ),dpf(crr+1,i+1) ) );
}
dp[crr][r]=mn;
return dp[crr][r];
}
int main(){
// freopen("a.gir","r",stdin);
// freopen("a.cik","w",stdout);
memset(dp,-1,sizeof(dp));
scanf("%d %d",&n,&m);
if(n==m){
int mx=0;
for(int i=0;i<n;i++){
scanf("%d",&dizi1[i]);
}
for(int i=0;i<m;i++){
scanf("%d",&dizi2[i]);
}
sort(dizi1,dizi1+n);
sort(dizi2,dizi2+m);
for(int i=0;i<n;i++){
mx=max(abs(dizi2[i]-dizi1[i]),mx);
}
printf("%d\n",mx );
return 0;
}
else if(n<m){
for(int i=0;i<n;i++){
scanf("%d",&dizi1[i]);
}
for(int i=0;i<m;i++){
scanf("%d",&dizi2[i]);
}
sort(dizi1,dizi1+n);
sort(dizi2,dizi2+m);
printf("%d\n",dpf(0,0) );
return 0;
}
int a;
else{
for(int i=0;i<n;i++){
scanf("%d",&dizi2[i]);
}
for(int i=0;i<m;i++){
scanf("%d",&dizi1[i]);
}
a=n;
n=m;
m=a;
sort(dizi1,dizi1+n);
sort(dizi2,dizi2+m);
printf("%d\n",dpf(0,0) );
return 0;
}
}