首页 > 其他分享 >ABC 330 F Minimize Bounding Square

ABC 330 F Minimize Bounding Square

时间:2024-06-21 17:00:27浏览次数:14  
标签:ABC 正方形 Minimize mid 横向 int right Bounding left

题意
给定xoy平面上的N个点,可以进行K次操作,每一次操作可以让这N个点中的一个点横向或纵向移动一个单位。最后用一个所有边都平行于x轴或y轴的正方形将这N个点包围,请最小化这个正方形的边长。

思路
最小化最大横向或纵向长度,显然二分答案。二分最后正方形的长度,现在问题转化为如何check。我们现在考虑一个问题,现在我们得到了最后的正方形边长mid,如果所有的点都被包含进去,那么我们将横向和纵向拆开了来看。以横向为例。所有的横向坐标都在一条长度为mid的线段里,那么我们先将x坐标排个序,然后定义left=1,right=N。那么我们每次将x[left]和x[right]组成一条线段,然后看这条线段的长度是否大于mid(正方形边长),如果大于那么多出的部分用k来抵消,如果小于或等于那么不管。同理,纵方向也是一样的操作,对于k的贡献是累加的。

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=2e5+10;
const int mo=0;
int n,k,x[maxn],y[maxn];

bool check(int length)
{
	int res=0;
	int left=1;
	int right=n;
	while(left<right)
	{
		res+=max(x[right]-x[left]-length,mo)+max(y[right]-y[left]-length,mo);
		right--;
		left++;
	}
	return res<=k;
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	
	cin>>n>>k;
	for(int i=1;i<=n;i++) cin>>x[i]>>y[i]; 
	sort(x+1,x+1+n);
	sort(y+1,y+1+n);
	int l=0;
	int r=1e15;
	while(l<r)
	{
		int mid=l+r>>1;
		if(check(mid)) r=mid;
		else l=mid+1;
	}
	cout<<l<<endl;
	
	return 0;
}

标签:ABC,正方形,Minimize,mid,横向,int,right,Bounding,left
From: https://www.cnblogs.com/lulu7/p/18260895

相关文章

  • AtCoder ABC 358
    比赛链接A-WelcometoAtCoderLandAC_Code#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongsignedmain(){strings,t;cin>>s>>t;if(s=="AtCoder"&&t=="Land")co......
  • AT_abc_G选刷
    AT_abc_G选刷目录AT_abc_G选刷ABC332G题目大意solutionABC331G题目大意solutionABC328G题目大意solutionABC326G题目大意solutionABC324G题目大意solutionABC350G题目大意solutiontipsABC352G题目大意solutionABC332G题目大意给定n种球,每种分别有\(a_i\)个,有m个盒子,每个盒子可......
  • ABC 328F Good Set Query
    题意直接看题吧https://atcoder.jp/contests/abc328/tasks/abc328_f题解本题主要考了带权并查集,具体实现是在路径压缩的时候顺便维护一下边权(其中w[i]表示点i距离它的祖先的边权之和,fa[i]是点i的祖先)。依次遍历每一次询问,如果询问中的a与b拥有公共祖先,也就是在同一个并查集里......
  • 【国赛赛题详解】2024年数学建模国赛ABCDEF题(点个关注,后续会更新)
     您的点赞收藏是我继续更新的最大动力!一定要点击如下的蓝色字体链接,那是获取资料的入口!点击链接加入群聊【2024国赛资料合集】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=eQt5WRIvc5-fogZRrrahAhbqDa2nKfW8&authKey=%2BqQfThTxNnhw5LGJFRIcneF8JXBj1ufd2K01UpKPrpcgkKDskF......
  • ABC358
    E-AlphabetTileshttps://atcoder.jp/contests/abc358/tasks/abc358_e方案数DP。先看摆花(五年前做过)。记\(f_{i,j}\)表示摆完前\(i\)种花,目前已经有了\(j\)盆花的方案数。可以考虑先枚举当前摆第\(i\)种花,然后再枚举摆完第\(i\)种花之后,目前已经有了\(j\)盆......
  • ABC353F 分讨
    回来补补题。分析:我先考虑\(k\)很大的时候,大块和大块间的移动,我们不得不尽量避免小块:我们容易发现这样时是最优的,可以发现就是在斜着走,也就是典型的切比雪夫距离。斜着走一次需要经过两条边,所以花费是两倍的切比雪夫距离。要是起点和终点不在大块上呢?首先考虑它们不在同一......
  • 【国赛赛题详解】2024年数学建模国赛ABCDEF题(点个关注,后续会更新)
     您的点赞收藏是我继续更新的最大动力!一定要点击如下的蓝色字体链接,那是获取资料的入口!点击链接加入群聊【2024国赛资料合集】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=eQt5WRIvc5-fogZRrrahAhbqDa2nKfW8&authKey=%2BqQfThTxNnhw5LGJFRIcneF8JXBj1ufd2K01UpKPrpcgkKDskF......
  • 【国赛赛题详解】2024年数学建模国赛ABCDEF题(点个关注,后续会更新)
    您的点赞收藏是我继续更新的最大动力!一定要点击如下的蓝色字体链接,那是获取资料的入口!点击链接加入群聊【2024国赛资料合集】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=eQt5WRIvc5-fogZRrrahAhbqDa2nKfW8&authKey=%2BqQfThTxNnhw5LGJFRIcneF8JXBj1ufd2K01UpKPrpcgkKDskFkr......
  • 「杂题乱刷」AT_abc358_g
    代码恢复训练2024.6.15(补)链接(luogu)链接(atcoder)abc最水的G了吧。你发现,你最后肯定全在在同一个点上不动,而且你一定可以在\(n\timesm\)回合内走到这个点,因此我们直接\(dp_{i,x,y}\)表示走\(i\)步到\((x,y)\)这个格子所能得到的最大值即可。时间复杂度\(O(......
  • [题解]ABC358E Alphabet Tiles
    AtCoder~E-AlphabetTilesLuogu~ABC358EAlphabetTiles题意简述给定正整数\(K\)和\(C_1,C_2,\dots,C_{26}\)。请求出长度在\(1\)到\(K\)之间,满足下列条件的字符串个数(取模\(998244353\)):该字符串全由大写字母组成。对于\(1\lei\le26\),下面条件成立:设\(a......