• SGU114-Telecasting station


    114. Telecasting station

    time limit per test: 0.5 sec.
    memory limit per test: 4096 KB

     

    Every city in Berland is situated on Ox axis. The government of the country decided to build new telecasting station. After many experiments Berland scientists came to a conclusion that in any city citizens displeasure is equal to product of citizens amount in it by distance between city and TV-station. Find such point on Ox axis for station so that sum of  displeasures of all cities is minimal.

     

    Input

    Input begins from line with integer positive number N (0<N<15000) – amount of cities in Berland. Following N pairs (X, P) describes cities (0<X, P<50000), where X is a coordinate of city and P is an amount of citizens. All numbers separated by whitespace(s).

     

    Output

    Write the best position for TV-station with accuracy 10-5.

     

    Sample Input

    4
    1 3
    2 1
    5 2
    6 2
    

     

    Sample Output

    3.00000
    


    题意是说,有个国家的城市之间要建个公交(我英语不好、翻译可能会跑偏、也可能是电视塔、也可能是别的、我也不知道是啥),然后有一个不满意度,咱们自己想想也知道,肯定都喜欢把地铁站设在自己家门口。然后这个不满意度=城市的人数*这个站的位置。。。然后的然后、我也不会做这个题,直接上理论:数学家说,这是一个带权中位数问题,具体内容见 http://baike.baidu.com/link?url=NZbFTsJCCn_jsx8W24aLu6XGEVdpDH0hpO_SIzeCF7vFi_Nz-xV4pe7tzuJBpQsQSzoa719FmHYb3lr7QKV3q_   这个讲的很明白了。然后,下面的代码就自然手到擒来了!!!

    #include<iostream>
    #include<string.h>
    #include<stdio.h>
    #include<ctype.h>
    #include<algorithm>
    #include<stack>
    #include<queue>
    #include<set>
    #include<math.h>
    #include<vector>
    #include<map>
    #include<deque>
    #include<list>
    using namespace std;
    struct N
    {
        double x;
        int p;
    } a[15009];
    int b[15009];
    int cmp(N a,N b)
    {
        return a.x<b.x;
    }
    int main()
    {
        int n;
        while(scanf("%d",&n)!=EOF)
        {
            memset(b,0,sizeof(b));
            for(int i=0; i<n; i++)
                scanf("%d%d",&a[i].x,&a[i].p);
            sort(a,a+n,cmp);
            int s=0;
            for(int i=0; i<n; i++)
            {
                s+=a[i].p;
                b[i]=s;
            }
            int mid=s/2,w;
            for(int i=0; i<n; i++)
            {
                if(b[i]>=mid)
                {
                    w=i;
                    break;
                }
            }
            printf("%d
    ",a[w].x);
        }
        return 0;
    }
    


     

  • 相关阅读:
    动态代理方案性能对比(转载)
    Java类的初始化
    第78天:jQuery事件总结(一)
    第77天:jQuery事件绑定触发
    第76天:jQuery中的宽高
    第75天:jQuery中DOM操作
    第74天:jQuery实现图片导航效果
    第73天:jQuery基本动画总结
    第72天:jQuery实现下拉菜单
    第71天:jQuery基本选择器(二)
  • 原文地址:https://www.cnblogs.com/riasky/p/3459254.html
Copyright © 2020-2023  润新知