美文网首页
[算法设计与分析]油井问题 解题报告

[算法设计与分析]油井问题 解题报告

作者: vouv | 来源:发表于2018-06-17 17:09 被阅读0次

    Problem Description

    image.png

    主油管道为东西向,确定主油管道的南北位置,使南北向油井喷油管道和最小。要求线性时间完成。

    1<= 油井数量 <=2 000 000

    输入要求:

    输入有油井数量行,第 K 行为第 K 油井的坐标 X ,Y 。其中, 0<=X<231,0<=Y<231 。

    输出要求:

    输出有一行, N 为主管道最优位置的最小值

    注意:用快排做的不给分!!

    友情提示:可以采用while(scanf("%d,%d",&x,&y) != EOF)的数据读入方式。

    测试输入

    41,969978
    26500,413356
    11478,550396
    24464,567225
    23281,613747
    491,766290
    4827,77476
    14604,597006
    292,706822
    18716,289610
    5447,914746
    

    测试输出

    597006
    

    Ac code

    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    
    int arr[2000000];
    int RandomizedSelect(int arr[],int p,int r,int k);
    
    int Partition(int arr[],int p,int r){
    
        int i= p,j = r + 1;
        int x = arr[p];
        while (1){
    
            while(arr[++i] < x && i < r);
            while(arr[--j] > x);
            if(i >= j)break;
            int tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
    
        }
        arr[p] = arr[j];
        arr[j] = x;
        return  j;
    
    }
    int RandomizedPartition(int arr[],int p,int r){
        int i = (rand() % (r-p+1))+ p;
        int temp = arr[i];
        arr[i] = arr[p];
        arr[p] = temp;
        return Partition(arr,p,r);
    }
    int RandomizedSelect(int arr[],int p,int r,int k){
    
        if(p == r){
            return arr[p];
        }
        int i = RandomizedPartition(arr,p,r),j = i - p + 1;
    
        if(k <= j){
            return RandomizedSelect(arr,p,i,k);
        }
    
        else return  RandomizedSelect(arr,i + 1,r,k - j);
    }
    
    
    
    int main() {
    
        int x,y,n;
        n=0;
    
        while(scanf("%d,%d",&x,&y) != EOF){
            
            arr[n++] = y;
        }
    
        int mid;
        if(n%2==0)mid = n/2;
        else mid = (n+1)/2;
    
        printf("%d\n",RandomizedSelect(arr, 0 , n-1 , mid));
    
    
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:[算法设计与分析]油井问题 解题报告

          本文链接:https://www.haomeiwen.com/subject/isvweftx.html