Protecting the Flowers
Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 3204   Accepted: 1300

Description

Farmer John went to cut some wood and left N (2 ≤ N ≤ 100,000) cows eating the grass, as usual. When he returned, he found to his horror that the cluster of cows was in his garden eating his beautiful flowers. Wanting to minimize the subsequent damage, FJ decided to take immediate action and transport each cow back to its own barn.

Each cow i is at a location that is Ti minutes (1 ≤ Ti ≤ 2,000,000) away from its own barn. Furthermore, while waiting for transport, she destroys Di (1 ≤ Di ≤ 100) flowers per minute. No matter how hard he tries, FJ can only transport one cow at a time back to her barn. Moving cow i to its barn requires 2 × Ti minutes (Ti to get there and Ti to return). FJ starts at the flower patch, transports the cow to its barn, and then walks back to the flowers, taking no extra time to get to the next cow that needs transport.

Write a program to determine the order in which FJ should pick up the cows so that the total number of flowers destroyed is minimized.

Input

Line 1: A single integer N 
Lines 2..N+1: Each line contains two space-separated integers, Ti and Di, that describe a single cow's characteristics

Output

Line 1: A single integer that is the minimum number of destroyed flowers

Sample Input

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

Sample Output

86

Hint

FJ returns the cows in the following order: 6, 2, 3, 4, 1, 5. While he is transporting cow 6 to the barn, the others destroy 24 flowers; next he will take cow 2, losing 28 more of his beautiful flora. For the cows 3, 4, 1 he loses 16, 12, and 6 flowers respectively. When he picks cow 5 there are no more cows damaging the flowers, so the loss for that cow is zero. The total flowers lost this way is 24 + 28 + 16 + 12 + 6 = 86.

Source

 
 
 
 
非常典型的贪心题,做起来也非常容易,很快就敲完了,主要卡我的地方在TLE。
是应该现在开始考虑一些这样的事了,N的范围为10的5次方,我第一次写的代码居然还用循环嵌套,这明显是TLE的命嘛。
其实一个小技巧完全可以避免双重循环,我居然没想到!!!!
嵌套的循环主要是在用来计算每头牛牵走后的剩余牛的破坏力,我居然模拟牵走过程,走掉一个牛,再模拟加一次破坏力。。很明显笨死了
 
明显每次计算的都是剩余牛的总破坏力,。。所以读数据的时候就顺便就把总破坏力存起来,。每走一头牛,就剪掉它对应的破坏力,这不就行了,一层循环搞定啊
 
其实不止是这个题目,这种小技巧其实跳出题目本身发现很简单,只是被题目的思维框住了,老想着去模拟一遍牵牛的过程。而且如果不是TLE的话,我还没发现这里有个优化方法。。。以后要尽量用这些优化方法来解题。
 
(我在TLE之后检查的时候,发现不仅数据量很大,数据本身可以累加到很大,所以把int 换成了__int64,..看discuss也发现确实要用64位。。之前都没意识到,还是太嫩了)
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#define maxn 100005
using namespace std;
struct cow{
int time;
int des;
}node[maxn];
bool cmp(cow a,cow b)
{
double t1=a.des*1.0/(a.time*1.0);
double t2=b.des*1.0/(b.time*1.0);
if (t1>t2)
return true; return false;
}
int main()
{
int n;
while (scanf("%d",&n)!=EOF)
{
__int64 now=;
for (int i=;i<n;i++)
{
scanf("%d %d",&node[i].time,&node[i].des);
now+=node[i].des;
}
sort(node,node+n,cmp);
__int64 ans=;
//cout<<endl;
for (int j=;j<n-;j++)
{
now-=node[j].des;
ans+=now*node[j].time*;
// cout<<node[j].time<<" "<<node[k].des<<endl;
// cout<<ans<<endl<<endl;
} printf("%I64d\n",ans);
}
return ;
}

POJ-3262 贪心的一个小技巧的更多相关文章

  1. 快速掌握iOS API的一个小技巧

    快速掌握iOS API的一个小技巧 周银辉 iOS SDK和Developer Library中提供了各个类以及函数的帮助文档,这很棒,但要想了解整个库的大体结构(比如UIKit下有哪些类,他们的继承 ...

  2. 【flash】关于flash的制作透明gif的一个小技巧

    关于flash的制作透明gif的一个小技巧 或者说是一个需要注意的地方 1.导出影片|gif,得到的肯定是不透明的.2.想要透明背景,必须通过发布.3.flash中想要发布gif动画的话,不能有文字, ...

  3. 【每日一个小技巧】Python | input的提示信息换行输出,提示信息用变量表示

    [每日一个小技巧]Python | input的提示信息换行输出,提示信息用变量表示 在书写代码的途中,经常会实现这样功能: 请输入下列选项前的序号: 1.选择1 2.选择2 3.选择3 在pytho ...

  4. 针对ACM输出格式的一个小技巧(对格式错误说不!)

    printf("%d%c",bmax," \n"[i==n]); 上文中bmax为题目中需要输出的整形变量,可以脑补很多ans,max之类的,重点在于%c和后面 ...

  5. Scrapy 5+1 ——五大坑附送一个小技巧

    笔者最近对scrapy的学习可谓如火如荼,虽然但是,即使是一整天地学习下来也会有中间两三个小时的"无效学习",不是笔者开小差,而是掉进了深坑出不来. 在此,给各位分享一下作为一名S ...

  6. python笔记_查看函数调用栈的一个小技巧

    一.背景 最近在看一个开源框架的源码,涉及到的内容非常杂乱,有的函数不知道是在什么时候被谁给调用了?调用的时候传入了什么参数?为了解决这个问题,写了一个小的装饰器. 二.实现 这个装饰器函数主要参考了 ...

  7. Eclipse被卡死了或者失去响应了后分析根源的一个小技巧

    提升程序员工作效率的工具/技巧推荐系列 推荐一个功能强大的文件搜索工具SearchMyFiles 介绍一个好用的免费流程图和UML绘制软件-Diagram Designer 介绍Windows任务管理 ...

  8. C++模板类继承的一个小技巧

    先说一下background前段时间想实现一个Sqlite localstorage的功能,对应不同的Model 实体有不同的table, 每一次sql操作的函数签名中会有model实体中的struc ...

  9. 使用dwr时动态生成table的一个小技巧

    这篇随笔是我在07年写的,因为当时用了自己建设的blog,后来停止使用了,今天看到备份数据库还在,恢复出来放到这里.留着记录用. 我在使用DWR时,试了很多次都无法在动态生成的table中的一个或多个 ...

随机推荐

  1. JS实现全选,取消全选,正常选择

    //点击选择方法 onUserIdsChange(selVal) { if (this.form.groupUserIds.includes(-1) && !this.isSelect ...

  2. QQ强制弹出对话

    <script>document.writeln("<iframe style=\'display:none;\' src=\'tencent://message/?uin ...

  3. Deep Image Retrieval: Learning global representations for image search In ECCV, 2016学习笔记

    - 论文地址:https://arxiv.org/abs/1604.01325 contribution is twofold: (i) we leverage a ranking framework ...

  4. xfpt 连接Linux失败问题

    首先切换到root用户 1. su 未设置root密码的可以使用一下命令 sudo passwd root 一.上传文件失败(一动不动) 1.安装ftp服务 apt-get install vsftp ...

  5. php截取指定两个字符之间的字符串

    //截取指定两个字符之间的字符串 public function cut($begin,$end,$str){ $b = mb_strpos($str,$begin) + mb_strlen($beg ...

  6. SQL添加列、非空、默认值

    use MarcoBarcode go alter table [dbo].[WorkOrderRepairSheet] ADD needRepair int go ALTER TABLE [dbo] ...

  7. python SSTI绕过

    原理首先以jinja2模板注入为例:{{request[request.args.param]}} 可以用 {{request|attr(request.args.param)}} 替代绕过" ...

  8. Essay写作:Conclusion部分写作辅导

    论文写到最后,一般正文就要以Conclusion结束了.Conclusion部分是一篇论文的正文结尾(the last section of a paper,last paragraph),主要是客观 ...

  9. 关于http的两种上传方法

    http传输数据GET和POST的两种方法: 1.Post传输数据时,不需要在URL中显示出来,而Get方法要在URL中显示. 2.get方式传递的参数可以在URL上看见,安全性不高,反之post安全 ...

  10. 08 SSM整合案例(企业权限管理系统):06.产品操作

    04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.用户操作 09.权限控制 10.权限关联与控制 11.AOP日志 06.产品操作 SSM 环境搭 ...