一道挤奶的奶牛题的题解
来源:互联网 发布:云图制作软件 编辑:程序博客网 时间:2024/06/09 17:00
题目描述
农夫约翰发现,当他的奶牛在附近有另一头奶牛获得其他奶牛支持时候,他就更容易挤牛奶了。因此,他想把他的M头奶牛(M < 1000000000,M是 偶数)分割为M/2对。然后,每一对将被引到谷仓里的一个单独的小隔间里挤奶。每一个隔间的挤牛奶将同时进行。
让事情变得有点复杂的是,每一个农夫约翰的奶牛都有不同的产奶量。如果奶牛产奶量是A和B,那么就需要用A+B的时间来给它们挤奶。
请帮助农场主约翰确定整个挤奶过程所需的最短时间。
输入格式
第一行为N(1<N<100 000) 接下来的N行每一行都有两个整数x,y,表示有x头奶牛的产奶量为y(1≤y≤1,000,000,000)。x的和是整数M。
输出格式
输出整个过程的最短时间。
样例数据
input
3 1 82 51 2
output
10
样例说明:这里 4头奶牛的产奶量为2,5,5,8。显然,将他们分为2+8 和5+5所需的时间最短(其他任意分配都会导致有一组奶牛的时间超过 10),所需时间为10
大致思路:
1.将奶牛的产奶量从小到大(或从大到小)进行排序:因为要所需时间最短,也就是所求得的结果最小,那么就因该最小的和最大的进行组合,然后将组合数最大的为最终结果输出
2.因为买一组的数据中有多组奶牛,且产奶的时间各不相同,所以要用结构体读入,然后再用sort函数按照产奶时间进行从小到大排序。
3.然后从小(即数组的最左边,变量为l)到大(r)进行组合,然后最后的结果是最大的组合数。但是一个一个组合会有一个问题:超时。所以要进行一些语句的优化
即:a.如果第l头牛的挤奶时间和第r头牛的挤奶时间是一样的话就i++,r--.因为可以减少多次重复,没用的判断.
b.如果第l头牛的挤奶时间小于第r头牛得挤奶时间,则l++,第i头牛的牛的数量减去第l头牛的牛的数量.
c.判断第l头牛得挤奶时间大于第i头牛得挤奶时间,处理方法与第b种情况的处理方法正好相反.
程序如下:
#include <bits/stdc++.h>using namespace std;struct cow{int x;long long y;}a[200000];//定义结构体int n;bool sort_p(cow a,cow b) { return (a.y<b.y); }//结构体的排序函数int main(){cin>>n;for (int i=1;i<=n;i++) cin>>a[i].x>>a[i].y;sort(a+1,a+n+1,sort_p);int l=1,r=n;long long large=-1;for (;l<=r;){if (a[r].y+a[l].y>large) large=a[l].y+a[r].y;//判断最大值if (a[l].x<a[r].x) {a[r].x-=a[l].x;l++;}elseif (a[l].x>a[r].x){a[l].x-=a[r].x;r--;}elseif (a[l].x==a[r].x){l++;r--;}//以上为上述的a,b,c的优化程序}cout<<large;//输出最大值return 0;}
- 一道挤奶的奶牛题的题解
- 【题解】P1373 奶牛的卧室
- 关于奶牛art1003的题解
- 【题解】CQ大神原创的一道题
- [题解]USACO5.4 奶牛的电信 Telecowmunication
- 三道水水的奶牛题
- 水题一道----奶牛政坛
- 一道可用背包问题解的华为编程题
- [ Java学习 ] 一道Java好题的详细题解 001
- 【bzoj1612】【Usaco2008 Jan】Cow Contest奶牛的比赛 题解&代码
- 迅雷的一道笔试题解析
- 一道题解析面向对象的特征
- USACO1.2.1 Milking Cows 给奶牛挤奶
- 一道据说是月薪3W的面试的题解答
- 这周的一道程序设计题兼sicily1443 Printer Queue题解
- topcoder 上的一道1000分题解答
- Java中有关构造函数的一道笔试题解析
- 关于“去哪网”一道笔试题解法的思考
- A03_IO文件管理
- ionic3开发系列——打包APK运行,启动页后白屏几秒,解决方案
- E
- 算法爱好者——子集 ? 待解决
- codeigniter3.16版本migration(数据工厂迁移类)的使用
- 一道挤奶的奶牛题的题解
- Kotlin使用Retrofit进行get请求的方法(懒加载机制)
- shrio 权限管理filterChainDefinitions过滤器配置
- [Leetcode] 500. Keyboard Row 解题报告
- Hdfs 数据块丢失处理
- android系统常用URI
- mysql--表拆分
- 仿知乎广告效果
- 算法爱好者——最接近的三数之和 ? 待解决