송유관 문제 - 분할 치료

모 석유 회 사 는 동쪽 에서 서쪽 으로 가 는 주요 송유관 을 건설 할 계획 이다.이 파 이 프 는 n 개의 유정 이 있 는 유전 을 통과 해 야 한다.모든 유정 에서 송유관 이 가장 짧 은 도로 (또는 남 또는 북) 를 따라 주관 도로 와 연결 되 어야 한다.만약 에 n 개의 유정 의 위 치 를 정 하면 그들의 x 좌표 (동서 방향) 와 y 좌표 (남북 방향) 는 메 인 파이프 의 가장 좋 은 위 치 를 어떻게 확정 해 야 합 니까? 설령 각 유정 에서 메 인 파이프 사이 의 송유관 길이 가 모두 가장 작은 위치 에 있 더 라 도?
유정 이 두 개 있 으 면 두 개의 유정 남북 방향 사이 의 임 의 위 치 를 취하 고 세 개의 유정 이 있 으 면 중위 수 를 취한 다.n. 유정 은 중위 수 아래 에서 분 리 된 사상 으로 중위 수 를 구 하 는 것 이지 C 언어 로 자체 적 으로 가지 고 있 는 sort () 함수 가 아니다.
#include
#include//abs()          
#define N 10010
int b[N],a[N];

void swapAij(int i,int j)
{
    int temp;
    temp=a[i];
    a[i]=a[j];
    a[j]=temp;
}

int SearchMid(int s,int e,int t)// a[s] a[e],  t  
{
    int nleft=0;
    //printf(" a[%d] a[%d]   %d   
",s,e,t);
//for(int k=s; k<=e; k++) //printf("%d ",a[k]); //printf("
");
int i,j=e; // i,j , a[s] a[s] , nleft for(i=s+1; i<=j; i++) { if(a[i]<=a[s]) nleft++;// //a[i]>a[s] , a[j]<=a[s] // a[i] a[j],nleft++ else { for(; j>i; j--) if(a[j]<=a[s]) { swapAij(i,j);// nleft++;// ++ } } } //a. a[j] ,i=e a[i] a[s] //b. a[j] ,a[j]>a[s],i=j // t-1, t a[s] if(nleft+1==t) return a[s]; // nleft t-1, a[s], t-nleft-1 else if(nleft+11,e,t-nleft-1); //nleft+1>t, t else SearchMid(s+1,i-1,t); } int main() { int n,mid,sum=0; scanf("%d",&n); for(int i=0; iscanf("%d %d",&b[i],&a[i]); mid=SearchMid(0,n-1,n/2+1);// a[0] a [n-1] n/2-1 //printf("mid=%d
",mid);
for(int i=0; iabs(a[i]-mid); printf("%d",sum); return 0; }

/ * 입력 샘플 5 1 2 2 1 3 3 - 2 3 5 1 3 - 2 3 1 2 2 2 2 2 출력 샘플 6 * /

좋은 웹페이지 즐겨찾기