【每日一题】Protecting the Flowers

Protecting the Flowers

https://ac.nowcoder.com/acm/problem/25043

题目描述:
有一群牛在花园里面,农夫需要一个个地把牛运送到牛舍,已知农夫把牛运到牛舍需要地时间(分钟)time以及牛每分钟破坏的花的数目destroy,给出一个数n,n头牛,下面有n行,每行两个数字分别使time,destroy.问如何搬运牛才能使花被破坏的数目最少。
题目求解:
我们可以看牛群中A,B两头牛,显然任意改变A,B两头牛的位置都对前面的搬运没有影响;
1.假设A牛放在B牛的前面,对于后面的影响有:sum * A.destroy+(sum+2 * A.time) * B.destroy
2.假设B牛在A牛的前面,对于后面的影响有:sum * B.destroy+(sum+ 2 * B.time) * A.destroy
3.不妨假设A放在前面比较好,那么sum * A.destroy+(sum+ 2 * A.time) * B.destroy<sum * B.destroy+(sum+2 * B.time) * A.destroy. 也就是 A.time * B.destroy<A.destroy * B.time.

代码如下:

#include <bits/stdc++.h>
#include <algorithm>
#include<cstdio>
using namespace std;
#define js ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)
typedef long long ll;
const ll MOD = 1e5 + 7;
const ll maxn =1e5+7;
struct node{
    int t,d;
    bool operator<(const node&b) const{
        return t*b.d<b.t*d;
    }//结构体内嵌比较函数
}a[maxn];
int main(){
    js;
    int n;
    cin>>n;
    for(int i=0;i<n;i++) cin>>a[i].t>>a[i].d;
    sort(a,a+n);
    ll time=0,ans=0;
    for(int i=0;i<n;i++){
        ans+=time*a[i].d;
        time+=2*a[i].t;
    }
    cout<<ans<<endl;
}
全部评论

相关推荐

07-07 11:33
江南大学 Java
已经在暑假实习了&nbsp;,没有明确说有hc,纠结实习到八月份会不会有点影响秋招毕竟感觉今年好多提前批
程序员小白条:92的话准备提前批,其他没必要,没面试机会的,而且你要准备充分,尤其八股和算法题
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-04 14:23
steelhead:你回的有问题,让人感觉你就是来学习的
点赞 评论 收藏
分享
Rena1ssanc...:对的,要是面评没太烂,勤更新简历等捞就行了,腾讯可以无限复活
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务