P3669 [USACO17OPEN]Paired Up S 贪心+双指针
P3669 [USACO17OPEN]Paired Up S
有M(M为偶数)头奶牛,每头奶牛有一个产奶量,将这些奶牛两两配对,每对奶牛的产奶的时间为两头奶牛产奶量的总和。现在这M/2对奶牛同时产奶,问所需的最短时间是多少 M保证为偶数
最短时间也就是m/2对中的最长时间,贪心很好想,肯定是时间最短的牛和时间最长的牛匹配才会使最长时间最短。这题比较有意思的是配对的双指针操作。如果直接给出每个牛的时间,直接排序,然后正反相加取最值即可。但是这题对时间进行分组,而且数据量很大,展开也会超时。所以这里的双指针设定一个头尾指针,直接判断这个时间的牛的数量然后相减可以剩下大量时间,而不能一个一个的匹配。
#include <bits/stdc++.h>
#include<iostream>
#include<thread>
using namespace std;
#pragma warning(disable:4996);
#define ll long long
#define int ll
#define endl "\n"
#define rep(j,b,e) for(int j=b;j<=e;j++)
#define eb(arr) arr.begin(),arr.end()
#define mm(arr) memset(arr,0,sizeof(arr))
#define get(a,node) get<a-1>(node)
int T;
const int N = 2e5 + 10;
int n, m, k, q;template <class T, class ...Arg>
void inline pln(T t, Arg ...args);//打印一行参数
template<typename T>
void inline pln(vector<T> a, string s = " ");
template<class T, class ...Arg>
void inline inln(T& t, Arg&...args);//输入一行数据
//----------------------------------struct node {int x, y;
};
signed main()
{
#ifndef ONLINE_JUDGE//freopen("in.txt", "r", stdin);//freopen("out.txt", "w", stdout);
#endifcin >> n;vector<node>arr(1);rep(j, 1, n) {int x, y;inln(x, y);arr.push_back({ x,y });}int ans = 0;sort(arr.begin() + 1, arr.end(), [](node a, node b) {return a.y < b.y;});int i = 1, j = n;while (i <= j) {auto t1 = arr[i];auto t2 = arr[j];ans = max(ans, arr[i].y + arr[j].y);if (t1.x > t2.x) {arr[i].x -= arr[j].x;j--;}else if (t1.x < t2.x) {arr[j].x -= arr[i].x;i++;}else {i++;;j--;}}pln(ans);return 0;
}//-------------------------------------
void inline inln() {}
template<class T, class ...Arg>
void inline inln(T& t, Arg&...args) {cin >> t;inln(args...);
}
void inline pln() {cout << "\n";
}
template <class T, class ...Arg>
void inline pln(T t, Arg ...args) {cout << t << " ";pln(args...);
}
template<typename T>
void inline pln(vector<T> a, string s) {for (T& x : a) {cout << x << s;}cout << endl;
}
P3669 [USACO17OPEN]Paired Up S 贪心+双指针相关推荐
- [贪心|双指针] leetcode 11 盛最多水的容器
[贪心|双指针] leetcode 11 盛最多水的容器 1.题目 题目链接 给你 n 个非负整数 a1,a2,-,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 ...
- 7068 Dota2 Pro Circuit 杭电多校(2021“MINIEYE杯”中国大学生算法设计超级联赛9) [贪心+双指针]
题目 Dota2 Pro Circuit *Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Oth ...
- 贪心 双指针----Codeforces Round #727 (Div.2) D. PriceFixed
题目链接 题目大意: 市场上有 nnn 种商品,每种商品的价格都是 222 .现在你需要买第 iii 种商品 a[i]a [ i ]a[i] 件.但是对于第 iii 种商品有一个属性 bbb ,意味着 ...
- 【贪心+双指针】LeetCode 11. Container With Most Water
LeetCode 11. Container With Most Water Solution1: 参考网址:http://www.cnblogs.com/grandyang/p/4455109.ht ...
- 验证回文字符串 II(贪心+双指针)
面对该题我们最最容易想到的算法就是暴力,我一开始也是没注意看该题的数据大小 直接暴力-- 首先判断原串是否是回文串,如果是,就返回 true:如果不是,则枚举每一个位置作为被删除的位置,再判断剩下的字 ...
- LeetCode 1775. 通过最少操作次数使数组的和相等(贪心+双指针)
文章目录 1. 题目 2. 解题 1. 题目 给你两个长度可能不等的整数数组 nums1 和 nums2 . 两个数组中的所有值都在 1 到 6 之间(包含 1 和 6). 每次操作中,你可以选择 任 ...
- [力扣刷题总结](双指针篇)
文章目录 |||||||||||||||||||| 双指针 |||||||||||||||||| 905. 按奇偶排序数组 解法1:双指针+原地交换 解法2:两次遍历+保持相对位置 475. 供暖器 ...
- Codeforces Round #481 (Div. 3)【完结】
2022.3.1 题目地址:https://codeforces.com/contest/978 目录 A. Remove Duplicates[模拟] B. File Name[贪心 / 双指针] ...
- 牛客小白月赛37【部分题解】
目录 A: 经此一役小红所向无敌[难度: 一般 / 知识点: 模拟] B: 擅长解密的小红同学[难度: 中 / 知识点: 组合数学 数学期望] D: 比那名居的桃子[难度: 一般 / 知识点: 前缀和 ...
最新文章
- 《面向模式的软件体系结构2-用于并发和网络化对象模式》读书笔记(3)--- 服务访问和配置模式...
- 互联网公装企业“inDeco领筑智造”完成A+B轮近1.1亿元融资
- go语言的书籍的淘宝调查
- 阅读与html阅读的区别,w3c School读书笔记(一):HTML基础
- 重庆大学计算机课程设计,计算机组成原理课程设计报告重庆大学.doc
- 绘制彩虹html代码,HTML5 Canvas 彩虹螺旋图生成器
- [SDK2.2]Windows Azure Storage (16) 使用WCF服务,将本地图片上传至Azure Storage (上) 客户端代码...
- C语言 #define
- V-Play入门手册3-如何编写高效的代码?
- 基于linux桌面3d面打印机,基于DLP技术的桌面级3D打印机研发
- java 随机抽取数组内容_工具类:随机抽取数组或集合中的几个不重复元素
- Mixly编程使用Arduino ESP32实现ESP-NOW组网
- 关于ruoyi框架整合ueditor富文本编辑器
- m_sequencer和p_sequencer
- 使用微PE安装U盘windows系统
- mysql 1058_MySQL数据库之mysql启动服务报1058错误的解决方法
- linux固态硬盘检测,linux 检查硬盘是 SSD or HDD
- 开源SSL加快器的构建
- 基于MRS-Hudi构建数据湖的典型应用场景介绍
- eclipse注释字体大小显示不一样大