B. The Butcher

news2024/11/24 12:05:20

Problem - 1819B - Codeforces

 

思路:因为在切割之后放回一个,然后拿另一个再进行切割,那么我们就想到了,我们可以求出切割之后的h和w的最大值,那么要么就是高为h要么就是宽为w,并且我们还能够知道所有矩形的面积和,这个面积和跟切割之前是相等的,那么我们就知道了两组可能的解h,sum/h与sum/w,w,并且相除是整除,那么接下来我们只需要判断这两组解是否满足条件即可,我们期望的是每次找跟h相等的或者跟w相等的,然后将矩形缩小,那么我们就要满足快速查找和删除,可以用一个multiset实现,用lower_bound配合erase来实现查找和删除,同时还要有一些特殊情况判断,比如说你用 lower_bound找到的不与h,w相等,则不满足条件

此题想到了大部分,但是没有想到用面积能够直接求出来另一个边长

// Problem: B. The Butcher
// Contest: Codeforces - Codeforces Round 866 (Div. 1)
// URL: https://codeforces.com/problemset/problem/1819/B
// Memory Limit: 256 MB
// Time Limit: 2000 ms

#include<iostream>
#include<cstring>
#include<string>
#include<sstream>
#include<bitset>
#include<deque>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<vector> 
#include<set>
#include<cstdlib>
#define fi first
#define se second
#define i128 __int128
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> PII;
typedef pair<int,pair<int,int> > PIII;
const double eps=1e-7;
const int N=5e5+7 ,M=5e5+7, INF=0x3f3f3f3f,mod=1e9+7,mod1=998244353;
const long long int llINF=0x3f3f3f3f3f3f3f3f;
inline ll read() {ll x=0,f=1;char c=getchar();while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9') {x=(ll)x*10+c-'0';c=getchar();} return x*f;}
inline void write(ll x) {if(x < 0) {putchar('-'); x = -x;}if(x >= 10) write(x / 10);putchar(x % 10 + '0');}
inline void write(ll x,char ch) {write(x);putchar(ch);}
void stin() {freopen("in_put.txt","r",stdin);freopen("my_out_put.txt","w",stdout);}
bool cmp0(int a,int b) {return a>b;}
template<typename T> T gcd(T a,T b) {return b==0?a:gcd(b,a%b);}
template<typename T> T lcm(T a,T b) {return a*b/gcd(a,b);}
void hack() {printf("\n----------------------------------\n");}

int T,hackT;
int n,m,k;
PII w[N];

bool check(ll hi,ll wi) {
	multiset<pair<ll,ll> > s1,s2;
	
	for(int i=1;i<=n;i++) s1.insert({w[i].fi,w[i].se});
	for(int i=1;i<=n;i++) s2.insert({w[i].se,w[i].fi});
	
	while(s1.size()) {
		auto it1=s1.lower_bound({hi,-1});
		if(it1==s1.end()||(*it1).fi!=hi) {
			auto it2=s2.lower_bound({wi,-1});
			if((*it2).fi!=wi||it2==s2.end()) return false;
			else {
				hi-=(*it2).se;
				if(hi<0) return false;
				auto it3=s1.lower_bound({(*it2).se,(*it2).fi});
				s1.erase(it3);
				s2.erase(it2);
			}
		}else {
			wi-=(*it1).se;
			if(wi<0) return false;
			auto it2=s2.lower_bound({(*it1).se,(*it1).fi});
			s1.erase(it1);
			s2.erase(it2);
		}
	}
	
	return true;
}

void solve() {
	n=read();
	
	for(int i=1;i<=n;i++) w[i].fi=read(),w[i].se=read();
	
	ll sum=0;
	for(int i=1;i<=n;i++) sum+=(ll)w[i].fi*w[i].se;
	
	int hi=0,wi=0;
	for(int i=1;i<=n;i++) hi=max(hi,w[i].fi),wi=max(wi,w[i].se);
	
	vector<pair<ll,ll> > ans;
	if(sum%hi==0&&check(hi,sum/hi)) ans.push_back({hi,sum/hi});
	if(sum%wi==0&&check(sum/wi,wi)) ans.push_back({sum/wi,wi});
	sort(ans.begin(),ans.end());
	ans.erase(unique(ans.begin(),ans.end()),ans.end());
	
	printf("%d\n",(int)ans.size());
	for(auto &it:ans) printf("%lld %lld\n",it.fi,it.se);
}   

int main() {
    // init();
    // stin();

    scanf("%d",&T);
    // T=1; 
    while(T--) hackT++,solve();
    
    return 0;       
}          

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/796158.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

酒店管理又出新招了!这样处理高级炸了

电力&#xff0c;作为酒店不可或缺的生命线&#xff0c;为酒店的正常运营和客户体验提供了坚实的基础。在这个电力系统的核心中&#xff0c;配电柜扮演着至关重要的角色&#xff0c;负责将能源有序地分配到各个区域和设备。 因此&#xff0c;为了确保电力供应的稳定性和安全性&…

【Linux命令200例】find用来查找文件和目录,不可错过的15个例子

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入…

跨平台的重复文件查找和删除工具,速度媲美Everything!

首先是第一款&#xff0c;功能较为简单&#xff0c;能够查找重复文件并执行删除的操作 Dupeguru DupeGuru是一个跨平台(Linux&#xff0c;OS X&#xff0c;Windows)的GUI工具&#xff0c;用于在系统中查找重复文件。它主要是用Python 3编写的&#xff0c;具有使用多个GUI工具…

【深度学习】基于图形的机器学习:概述

一、说明 图神经网络&#xff08;GNN&#xff09;在数据科学和机器学习中越来越受到关注&#xff0c;但在专家圈之外仍然知之甚少。为了掌握这种令人兴奋的方法&#xff0c;我们必须从更广泛的图形机器学习&#xff08;GML&#xff09;领域开始。许多在线资源谈论GNN和GML&…

四、运算符(3)

本章概要 移位运算符三员运算符字符串运算符常见陷阱类型转换 截断和舍入类型提升 Java 没有 sizeof总结 移位运算符 移位运算符面向的运算对象也是二进制的“位”。它们只能用于处理整数类型&#xff08;基本类型的一种&#xff09;。左移位运算符 << 能将其左边的运…

python_day15_闭包

闭包 def outer(logo):def inner(msg):print(f"<{logo}>{msg}<{logo}>")return innerfunc_1 outer("####") print(type(func_1)) func_1("jsy")func_2 outer("$$$$$") func_2(hello)nonlocal关键字&#xff0c;在闭包中…

C#|无法打开cs文件设计窗口

报错信息&#xff1a;To prevent possible data loss before loading the designer, the following errors must be resolved: 解决方案&#xff1a;实不相瞒我把项目解决方案名称改短了就可以了。。有其他原因或者解决方案望不吝赐教。。

【Huawei】WLAN实验(三层发现)

拓扑图如上&#xff0c;AP与S1在同一VLAN,S1与AC在同一VLAN&#xff0c;AP采用三层发现AC&#xff0c;AP与客户的DHCP由S1提供。 S1配置 vlan batch 10 20 30 dhcp enable ip pool apgateway-list 192.168.20.1network 192.168.20.0 mask 255.255.255.0option 43 sub-option …

详细介绍Webpack5中的Loader

loader用于帮助 webpack 将不同类型的文件转换为 webpack 可识别的模块。 优先级分类 pre&#xff1a; 前置 loader normal&#xff1a; 普通 loader&#xff0c;没有用enforce指定就是normal inline&#xff1a; 内联 loader post&#xff1a; 后置 loader loader执行顺序…

Vue实现柱状图横向自动滚动

Vue实现柱状图横向自动滚动 1. 前言2. 代码3、实现效果图 1. 前言 原理&#xff1a;通过定时器修改Echarts的配置&#xff08;options&#xff09;达到我们想要的效果。 此外&#xff0c;我们还需要了解Echarts中dataZoom这个组件&#xff0c;这个组件用于&#xff1a;用于区域…

几张图教你电商入门:如何做数据分析

电商API和电商数据分析是相辅相成的&#xff0c;它们一起为电商平台的发展和运营提供了重要支持。 电商API&#xff08;Application Programming Interface&#xff09;提供了丰富的功能和数据接口&#xff0c;使得开发者能够在电商平台上进行二次开发和定制化操作。比如&…

C++多线程编程(第二章 多线程通信和同步)

1、多线程状态 1.1线程状态说明 初始化&#xff08;Init&#xff09;:该线程正在被创建&#xff1b; 就绪&#xff08;Ready&#xff09;:该线程在就绪列表中&#xff0c;等待CPU调度&#xff1b; 运行&#xff08;Running&#xff09;:该线程正在运行&#xff1b; 阻塞&…

idea下tomcat运行乱码问题解决方法

idea虚拟机选项添加-Dfile.encodingUTF-8

yaml-cpp YAML格式处理库的介绍和使用(面向业务编程-文件格式处理)

YAML格式介绍 YAML的格式介绍&#xff0c;有关ini、json和xml或许很多人已经很了解了&#xff0c;但是关于YAML&#xff0c;还有许多人不了解。YAML被设计成更适合人类阅读&#xff08;我想正因为如此&#xff0c;所以相对来说更灵活&#xff0c;就导致到使用的时候很多人会觉…

PostMan+Jmeter+QTP工具介绍及安装

目录 一、PostMan介绍​编辑 二、下载安装 三、Postman与Jmeter的区别 一、开发语言区别&#xff1a; 二、使用范围区别&#xff1a; 三、使用区别&#xff1a; 四、Jmeter安装 附一个详细的Jmeter按照新手使用教程&#xff0c;感谢作者&#xff0c;亲测有效。 五、Jme…

python_day14_综合案例

文件内容 导包配置 import jsonfrom pyspark import SparkContext, SparkConf import osos.environ["PYSPARK_PYTHON"] "D:/dev/python/python3.10.4/python.exe" os.environ["HADOOP_HOME"] "D:/dev/hadoop-3.0.0" conf SparkC…

Megatron-LM、NVIDIA NeMo、model_optim_rng.pt 文件是什么?

本文涉及以下几个概念&#xff0c;分别是&#xff1a; Megatron和Megatron-LM-v1.1.5-3D_parallelism NVIDIA NeMo Megatron和Megatron-LM-v1.1.5-3D_parallelism是什么&#xff1f; Megatron是由NVIDIA开发的一种用于训练大规模语言模型的开源框架。它旨在提供高效的分布式…

鸿蒙4.0重大官宣!六大功能呼之欲出!

鸿蒙系统是当年华为为应对美国封杀而开发的操作系统,当时只是权宜之计&#xff0c;但没想到它的发展壮大远远超出了人们的预期,2021年其用户就突破了1亿,去年7月搭载鸿蒙系统的设备超过了3亿。近日,华为官宣将在今年8月4号的开发者大会上发布全新的鸿蒙4.0系统,系统包含多项让人…

THM-被动侦察和主动侦察

被动与主动侦察# 在计算机系统和网络出现之前&#xff0c;孙子兵法在孙子兵法中教导说&#xff1a;“知己知彼&#xff0c;必胜不疑。” 如果您扮演攻击者的角色&#xff0c;则需要收集有关目标系统的信息。如果你扮演防御者的角色&#xff0c;你需要知道你的对手会发现你的系…

加利福尼亚大学|3D-LLM:将3D世界于大规模语言模型结合

来自加利福尼亚大学的3D-LLM项目团队提到&#xff1a;大型语言模型 (LLM) 和视觉语言模型 (VLM) 已被证明在多项任务上表现出色&#xff0c;例如常识推理。尽管这些模型非常强大&#xff0c;但它们并不以 3D 物理世界为基础&#xff0c;而 3D 物理世界涉及更丰富的概念&#xf…