ABC304D A Piece of Cake

news/2025/2/22 0:09:45

ABC304D A Piece of Cake

题目大意

平面上有一个蛋糕以及 n n n个草莓,这些草莓的坐标分别为 p 1 , q 1 , p 2 , q 2 , … , p n , q n p_1,q_1,p_2,q_2,\dots,p_n,q_n p1,q1,p2,q2,,pn,qn

有下面若干条直线,将蛋糕分为

  • A A A条平行于 y y y轴的直线: x = a 1 , x = a 2 , … , x = a A x=a_1,x=a_2,\dots,x=a_A x=a1,x=a2,,x=aA
  • B B B条平行于 x x x轴的直线: y = b 1 , y = b 2 , … , y = b B y=b_1,y=b_2,\dots,y=b_B y=b1,y=b2,,y=bB

这些直线将蛋糕分为 ( A + 1 ) ( B + 1 ) (A+1)(B+1) (A+1)(B+1)份。

T T T要在这 ( A + 1 ) ( B + 1 ) (A+1)(B+1) (A+1)(B+1)块中选一块。请你告诉他草莓最多的一块和草莓最少的一块。保证没有草莓在块与块的边缘。

3 ≤ w , h ≤ 1 0 9 , 1 ≤ n ≤ 2 × 1 0 5 , 1 ≤ A , B ≤ 2 × 1 0 5 3\leq w,h\leq 10^9,1\leq n\leq 2\times 10^5,1\leq A,B\leq 2\times 10^5 3w,h109,1n2×105,1A,B2×105


题解

m a p map map来存每块蛋糕的草莓的数量,用一个结构体 t t t来存储有草莓的蛋糕的数量,再用 m a p map map来记录每块蛋糕是否加入了 t t t中。

t t t的长度不会超过 n n n,所以枚举 t t t中的蛋糕,找到草莓数量最多的。如果 t t t的长度小于 ( A + 1 ) ( B + 1 ) (A+1)(B+1) (A+1)(B+1),则总有一个蛋糕的草莓数量为 0 0 0,最小值为 0 0 0;否则枚举 t t t中的蛋糕,找到草莓数量最少的。

时间复杂度为 O ( n log ⁡ n ) O(n\log n) O(nlogn)

code

#include<bits/stdc++.h>
using namespace std;
int w,h,n,v1,v2,t1=0,m1,m2,x[200005],y[200005],a[200005],b[200005];
map<int,int>wt[200005],z[200005];
struct node{
	int x,y;
}t[1000005];
int main()
{
	scanf("%d%d%d",&w,&h,&n);
	for(int i=1;i<=n;i++){
		scanf("%d%d",&x[i],&y[i]);
	}
	scanf("%d",&v1);
	for(int i=1;i<=v1;i++){
		scanf("%d",&a[i]);
	}
	a[++v1]=2e9;
	scanf("%d",&v2);
	for(int i=1;i<=v2;i++){
		scanf("%d",&b[i]);
	}
	b[++v2]=2e9;
	for(int i=1;i<=n;i++){
		int d1,d2;
		d1=lower_bound(a+1,a+v1+1,x[i])-a;
		d2=lower_bound(b+1,b+v2+1,y[i])-b;
		++wt[d1][d2];
		if(!z[d1][d2]){
			t[++t1]=(node){d1,d2};
			z[d1][d2]=1;
		}
	}
	m1=2e9;m2=0;
	if(t1<1ll*v1*v2) m1=0;
	for(int i=1;i<=t1;i++){
		int vt=wt[t[i].x][t[i].y];
		m1=min(m1,vt);
		m2=max(m2,vt);
	}
	printf("%d %d",m1,m2);
	return 0;
}

http://www.niftyadmin.cn/n/396085.html

相关文章

github开源化课程体系推荐 浙江大学 计算机考研必备408资料汇总 北京大学计算机系资料整理

github漫游指南 github漫游指南 *所有开源课程资料网站整理在文末 什么是GitHub Wiki 百科上是这么说的 GitHub 是一个共享虚拟主机服务&#xff0c;用于存放使用Git版本控制的软件代码和内容项目。它由GitHub公司&#xff08;曾称Logical Awesome&#xff09;的开发者Chr…

Adapter Tuning:详细解读Parameter-Efficient Transfer Learning for NLP

Diffusion Models专栏文章汇总:入门与实战 前言:大语言模型实在是太火了,各种技术日新月异,研究diffusion models的从LLMs中找一些研究灵感已经是基操了。当模型比较小的时候,微调全部参数还是可以的。但是现在的大预训练模型时代,微调所有参数不仅效果堪忧,对资源的消耗…

【iOS】消息传递和消息转发机制

消息传递机制 在OC语言中&#xff0c;调用对象的方法被叫做消息传递。消息有名称和选择子(selector)&#xff0c;可以接受参数&#xff0c;还可能有返回值。 在Objective-C中&#xff0c;如果向某对象传递消息&#xff0c;那就会使用动态绑定机制来决定需要调用的方法。在底层…

周赛348(模拟、反向思维、数位DP)

文章目录 [6462. 最小化字符串长度](https://leetcode.cn/problems/minimize-string-length/)阅读理解 [6424. 半有序排列](https://leetcode.cn/problems/semi-ordered-permutation/)模拟 [6472. 查询后矩阵的和](https://leetcode.cn/problems/sum-of-matrix-after-queries/)…

S7-200 PLC的CPU模块介绍

更多关于西门子S7-200PLC内容查看&#xff1a;西门子200系列PLC学习课程大纲(课程筹备中) 1.什么是西门子200PLC的CPU? 如下图1-1所示&#xff0c;S7-200 PLC CUP是将一个微处理器&#xff0c;一个集成电源&#xff0c;一定的数字量或模拟量I/O&#xff0c;一定的通信接口等…

【C++ 基础篇:20】:类的 (const)static 静态成员:面试题:实现一个类,计算程序中创建出了多少个类对象?

本系列 C 相关文章 仅为笔者学习笔记记录&#xff0c;用自己的理解记录学习&#xff01;C 学习系列将分为三个阶段&#xff1a;基础篇、STL 篇、高阶数据结构与算法篇&#xff0c;相关重点内容如下&#xff1a; 基础篇&#xff1a;类与对象&#xff08;涉及C的三大特性等&#…

南山城市更新--向南村(一期,二期)项目详情

向南村&#xff08;一期&#xff09;城市更新单元项目简介 项目于2010年被列入《深圳城市更新单元规划制定计划第一批计划》中&#xff0c;申报主体为向南实业股份有限公司&#xff0c;后与恒大合作开发。 项目位于南山区桂庙路南侧&#xff0c;毗邻前海、衔接后海&am…

linux理解软硬链接

软硬连接 在linux下面链接文件有两种&#xff0c;一种是类似window的快捷方式功能的文件&#xff0c;可以让你快速链接到目标文件&#xff08;或目录&#xff09;&#xff0c;叫做软链接&#xff0c;另一种则是通过文件系统的inode链接来产生新的文件名&#xff0c;而不是产生…