• 护花


    Description

      FJ出去砍木材去了,把N(2<=N<=100,000)头牛留在家中吃草,当他回来的时候,发现奶牛们都跑到花园里吃花去了,为了减少损失,FJ打算把牛移到牛棚中去。
      每头牛的位置离牛棚需要Ti分钟(1<=Ti<=2,000,000),而且在等待被移走的过程中,每分钟破坏Di(1<=Di<=100)朵花,无论多么努力FJ一次只能移动一只奶牛,移动一只奶牛到牛棚需要2×Ti分钟(来回各一次)。
      写一个程序安排移动顺序使得损失的花最少。

    Input

      第1行输入一个整数N
      第2到N+1行每行包含两个整数Ti和Di

    Output

      输出一个整数表示最少损失的花的数量

    Sample Input

    6
    3 1
    2 5
    2 3
    3 2
    4 1
    1 6

    Sample Output

    86

    Data Constraint

    Hint

    【样例说明】
    FJ按照6、2、3、4、1、5的顺序移走奶牛
    .
    .
    .
    .
    .
    .

    分析

    设:
    第一头牛时间为a,价格为b
    第二头牛时间为c,价格为d,

    则必有2ad<<2bc
    ad < bc
    a < bc/d
    a/b < c/d
    多头牛同理
    所以把时间/价格从小到大排序即可
    .
    .
    .
    .
    .

    程序:
    #include<iostream>
    using namespace std;
    int n;
    unsigned long long ans,s;
    int t[100001],d[100001];
    float a[100001];
    
    void kp(int l,int r)
    {
        if (l>=r) return;
        int i=l,j=r;
        double mid=a[(l+r)/2];
        do
        {
            while (a[i]<mid) i++;
            while (a[j]>mid) j--;
            if (i<=j)
            {
                a[0]=a[i];a[i]=a[j];a[j]=a[0];
                t[0]=t[i];t[i]=t[j];t[j]=t[0];
                d[0]=d[i];d[i]=d[j];d[j]=d[0];
                i++;j--;
            }
        }
        while (i<=j);
        kp(l,j);
        kp(i,r);
    }
    
    int main()
    {
    
        cin>>n;
        for (int i=1;i<=n;i++)
        {
            cin>>t[i]>>d[i];
            a[i]=(float)t[i]/d[i];
        }
        kp(1,n);
        for (int i=1;i<=n;i++)
        {
            ans+=s*d[i];
            s+=t[i]*2;
        }
        cout<<ans;
        return 0;
    }
  • 相关阅读:
    jquery 筛选元素(1)
    jquery操作元素的位置
    jquery 操作css 选择器
    jquery 操作css 尺寸
    jquery 标签中的属性操作
    jquery基本选择器
    jquery表单属性筛选元素
    jquery属性值选择器
    jquery 层级选择器
    jquery的基本选择器
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/9499956.html
Copyright © 2020-2023  润新知