CF1027D. Come a Little Closer (multiset使用)
D. Come a Little Closer
codeforces原题链接:https://codeforces.com/contest/2114/problem/D
Output
For each test case, output a single integer — the minimum cost to destroy all n
monsters.
Example
Input
7
3
1 1
1 2
2 1
5
1 1
2 6
6 4
3 3
8 2
4
1 1
1 1000000000
1000000000 1
1000000000 1000000000
1
1 1
5
1 2
4 2
4 3
3 1
3 2
3
1 1
2 5
2 2
4
4 3
3 1
4 4
1 2
Output
3
32
1000000000000000000
1
6
4
8
思路:
这道题使用multiset来解决似乎非常合适,首先先用vector分别存储每个怪物x和y的坐标
接着,每次输入插入坐标
这时候特判一波n=1的情况,如果为1直接输出答案
接下来遍历每个怪物作为被移动的那个的情况
特判类似样例1的情况
如果区域面积s小于了n说明说这时候是塞不下所有的怪兽的,考虑将x方向扩大一个间隔或者y方向扩大一个间隔的情况,然后更新ans
其余情况就是直接更新ans
题解
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+10;
typedef long long ll;
typedef unsigned long long ull;
int t;
int n;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--)
{
cin>>n;
vector<ll> vx(n),vy(n);
multiset<ll>mx,my;
for(int i=0;i<n;i++)
{
cin>>vx[i]>>vy[i];
mx.insert(vx[i]);
my.insert(vy[i]);
}
if(n==1)
{
cout<<1<<endl;
continue;
}
ll ans = LLONG_MAX;
for(int i=0;i<n;i++)
{
mx.erase(mx.find(vx[i]));
my.erase(my.find(vy[i]));
ll rx = *mx.rbegin();
ll lx = *mx.begin();
ll ry = *my.rbegin();
ll ly = *my.begin();
ll s = (rx-lx+1)*(ry-ly+1);
if(s==n-1)
{
ll s1 = (rx-lx+2)*(ry-ly+1);
ll s2 = (rx-lx+1)*(ry-ly+2);
ans = min(ans,min(s1,s2));
}
else ans = min(ans,s);
mx.insert(vx[i]);
my.insert(vy[i]);
}
cout<<ans<<endl;
}
return 0;
}
CF1027D. Come a Little Closer (multiset使用)的更多相关文章
- C++ std::multiset
std::multiset template < class T, // multiset::key_type/value_type class Compare = less<T>, ...
- Guava学习笔记:Guava新增集合类型-Multiset
Guava引进了JDK里没有的,但是非常有用的一些新的集合类型.所有这些新集合类型都能和JDK里的集合平滑集成.Guava集合非常精准地实现了JDK定义的接口.Guava中定义的新集合有: Multi ...
- [Google Guava]学习--新集合类型Multiset
Guava提供了一个新集合类型Multiset,它可以多次添加相等的元素,且和元素顺序无关.Multiset继承于JDK的Cllection接口,而不是Set接口. Multiset主要方法介绍: a ...
- UVA11136Hoax or what( multiset的应用)
题目链接 题意:n天,每天往一个箱子里放m个数,放完之后取最大的Max和最小的min做差,并把这两个数去掉,求n天之后的和 multiset 和 set的原理是相似的,multiset可以存多个相同的 ...
- 4.2 set和multiset
使用必须包含头文件set 1)multiset *:定义 如果不给第二个参数,默认less<key>,即用<来进行. 例如: A是一个类的名字,则可以定义一个容器对象如下: mult ...
- STL(multiset) UVA 11020 Efficient Solutions
题目传送门 题意:训练指南P228 分析:照着书上的做法,把点插入后把它后面不占优势的点删除,S.size ()就是优势的人数,时间复杂度O (nlogn) #include <bits/std ...
- Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset(可持久化Trie)
D. Vasiliy's Multiset time limit per test 4 seconds memory limit per test 256 megabytes input standa ...
- STL中的set/multiset小结
(1)使用set/multiset之前必须包含头文件<set>:#include<set> (2)namespace std{ template <class T, cl ...
- STL--集和多集(set/multiset)
与基本容器相比,关联容器更注重快速和高效地检索数据的能力.这些容器是根据键值(key)来检索数据的,键可以是值也可以是容器中的某一成员.这一类中的成员在初始化后都是按一定顺序排好序的. 本文地址:ht ...
- C++ Set & MultiSet
转自http://www.cppblog.com/wanghaiguang/archive/2012/06/05/177627.html STL Set介绍集合(Set)是一种包含已排序对象的关联容器 ...
随机推荐
- 高德地图 MCP,可用 Java SolonMCP 接入(支持 java8, java11, java17, java21)
1.MCP技术概述 1.1 什么是 MCP MCP (Model Control Protocol) 是一种允许大模型与外部工具交互的协议,高德地图基于此协议提供了地图服务能力,使 AI 大模型能够直 ...
- String to Integer (atoi)——LeetCode进阶路⑧
原题链接https://leetcode.com/problems/string-to-integer-atoi/ 说实话,看到这道题之前,看这通过率有点慌,到底是因为啥 让一道medium的题目这么 ...
- 杂七杂八系列----浅谈.NET微服务架构的演变
服务架构的演变 单体架构=>分布式架构=>SOA架构=>微服务架构=>Service Mesh=>Cloud Native 单体架构/垂直架构 分布式架构 SOA架构 微 ...
- React-Native开发鸿蒙NEXT-图片上传
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- RBMQ与odoo15的集成
背景:在对接物联网设备时候常用的协议就是:MQTT.AMQ.https.还有WebSocket,此案例就是针对接物联网设备传输的消息的消费 原理:通过新建守护线程的方式来启动mq服务,来消费设备平台端 ...
- java实现一个接口多个实现类,并且调用指定实现方法@Service
接口 package cn.daenx.framework.notify.sms.service; import cn.daenx.framework.common.vo.system.utils.S ...
- git创建远程分支
如果有个叫 serverfix 的分支需要和他人一起开发,有两种方式可以创建远程分支origin/serverfix 1.git push origin serverfix 2.git push or ...
- FastAPI安全认证:从密码到令牌的魔法之旅
title: FastAPI安全认证:从密码到令牌的魔法之旅 date: 2025/06/02 13:24:43 updated: 2025/06/02 13:24:43 author: cmdrag ...
- Flask之model以及缓存
Flask默认并没有提供任何数据库操作的API. Flask中可以自己的选择数据,用原生语句实现功能,也可以选择ORM(SQLAlchemy,MongoEngine)原生SQL缺点 代码利用率低,条件 ...
- Web前端入门第 64 问:JavaScript 几种函数定义方式有什么区别?
函数 作为 JS 的一等公民,随处可见它的身影. 我理解的它最主要作用就是用来提取重复代码,但凡有 JS 代码需要复制粘贴的时候,那么这时候就可以考虑使用函数封装了. 当函数写在对象中的时候,这时候它 ...