zoukankan      html  css  js  c++  java
  • 【POJ

    Protecting the Flowers

    直接中文

    Descriptions

    FJ去砍树,然后和平时一样留了 N (2 ≤ N ≤ 100,000)头牛吃草。当他回来的时候,他发现奶牛们正在津津有味地吃着FJ种的美丽的花!为了减少后续伤害,FJ决定立即采取行动:运输每头牛回到自己的牛棚。 每只奶牛i在离牛棚Ti(1 ≤ Ti ≤ 2,000,000) 分钟路程的地方,每分钟吃掉Di(1 ≤ Di ≤ 100)朵花。FJ使尽浑身解数,也只能一次带回一头奶牛。弄回一头奶牛i需要2*Ti分钟(来回)。由于怕被怼,从FJ决定带回i号奶牛开始,i号奶牛就不会吃花。请你找出被毁坏的花的最小数量 .

    Input

    第一行:N 
    第 2.. N+1: 第i+1行是Ti和Di,

    Output

    Line 1: 被毁坏花的最少数量。保证结果在64位整数范围内

    Sample Input

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

    Sample Output

    86

    Hint

    FJ的顺序是: 6, 2, 3, 4, 1, 5.当找回6、2、3、4、1、5时,损失花数量分别为24、28、16、12、6、0 。 24 + 28 + 16 + 12 + 6 = 86.
     
    题目链接
     
    典型的贪心算法,一定是要先送破坏力大的牛回去,怎么来计算谁的破坏力大呢,可以用d/t,算出相对破坏力,按这个从大到小的顺序排序即可,注意要能够用long long
     
    AC代码
    #include <iostream>
    #include <cstdio>
    #include <fstream>
    #include <algorithm>
    #include <cmath>
    #include <deque>
    #include <vector>
    #include <queue>
    #include <string>
    #include <cstring>
    #include <map>
    #include <stack>
    #include <set>
    #include <sstream>
    #define IOS ios_base::sync_with_stdio(0); cin.tie(0);
    #define Mod 1000000007
    #define eps 1e-6
    #define ll long long
    #define INF 0x3f3f3f3f
    #define MEM(x,y) memset(x,y,sizeof(x))
    #define Maxn 100000+100
    using namespace std;
    int n;
    struct node
    {
        int t;//时间
        int d;//破坏力
    };
    node a[Maxn];
    bool cmp(node x,node y)
    {
    //    破坏力/时间,易得谁的破坏力大,先送破坏力大的回家
        double t1=(x.d*1.0)/(x.t*1.0);
        double t2=(y.d*1.0)/(y.t*1.0);
        return t1>t2;
    }
    int main()
    {
        cin>>n;
    //    题目强调了结果在64位整数范围内,注意用ll
        ll sum=0;//全部破坏的花朵数量
        ll ans=0;//最终答案
        for(int i=0; i<n; i++)
        {
            cin>>a[i].t>>a[i].d;
            sum+=a[i].d;
        }
        sort(a,a+n,cmp);//按破坏力从大到小排序
    //    排序结果
    //    for(int i=0;i<n;i++)
    //        cout<<a[i].t<<" "<<a[i].d<<endl;
        for(int i=0; i<n-1; i++)
        {
            sum-=a[i].d;//送哪个走,哪个破坏的花朵数量就不能计算在内,其他的都要乘上这头牛的时间再*2
            ans+=sum*a[i].t*2;
        }
        cout<<ans<<endl;
        return 0;
    }
  • 相关阅读:
    编辑语言发展历史
    正则表达式
    css
    伪类和伪元素区别
    WEB 之API端口
    event flow (Dow)
    for衍生对象
    前端语言的发展
    document
    password user message email的正则表达式
  • 原文地址:https://www.cnblogs.com/sky-stars/p/11302753.html
Copyright © 2011-2022 走看看