Merge the squares! 2023牛客暑期多校训练营4-H

news2024/11/16 23:39:16

登录—专业IT笔试面试备考平台_牛客网

题目大意:有n*n个边长为1的小正方形摆放在边长为n的大正方形中,每次可以选择不超过50个正方形,将其合并为一个更大的正方形,求一种可行的操作使所有小正方形都被合并成一个n*n的大正方形

1<=n<=1000

思路:对于一个a*b(a>b)的矩形,我们可以用类似黄金分割的办法将其分割成cnt个b*b的正方形,然后剩下一个(a-cnt)*b*b的矩形,继续分割,一定能最后分割到剩下的矩形边长为1的情况,所以我们将一开始的大正方形分割成左上、右下两个边长分别为a,b的正方形,和剩下两个a*b的矩形,就可以完成题目要求。

现在来求a,b,我们可以从1到n枚举分割出来的矩形边长a,b=n-a,然后用辗转相减法,求出最后剩下边长为1的矩形是,一共构造出了几个正方形,如果<=24,那么两个矩形加起来加上a*a,b*b的正方形就不会超过50个

打表求出每个正方形的边长对应的a,b之后,我们就可以递归求解,每次从大正方形开始,先记录答案,然后分别递归到四个分出来的图形中,横着的和竖着的也就是一开始左下和右上的矩形要分别写一个递归,最后将所有答案逆序输出即可

//#include<__msvc_all_public_headers.hpp>
#include<bits/stdc++.h>
using namespace std;
const int N = 1005;
typedef long long ll;
const ll MOD=998244353;
int siz[N];
vector<pair<int, pair<int, int>>>ans;
bool check(int a, int b)
{//辗转相减法计算a*b的矩形能分割出几个正方形
	if (!b)
		return a <= 7;//7*7以下的可以直接合并成一个
	int cnt = 1;
	while (b)
	{
		cnt += a / b;
		int c = a % b;
		a = b;
		b = c;
	}
	return cnt <= 25;//将初始的大正方形分割成了两个矩形
}
void dfs2(int x, int y, int leny, int lenx);
void dfs3(int x, int y, int leny, int lenx);
void dfs(int x, int y, int s)
{//当前正方形的坐标,大小
	if (s == 1)
		return;//边长为1的不用记录
	ans.push_back({ x,{y,s} });
	if (!siz[s])
		return;//分不了的就和别人一起合并即可
	int a = s - siz[s], b = siz[s];
	dfs2(x + a, y, b, a);//左下角的矩形
	dfs3(x, y + a, a, b);//右上角的矩形
	dfs(x, y, a);//左上角的正方形
	dfs(x + a, y + a, b);//右下角的正方形
}
void dfs2(int x, int y, int lenx, int leny)
{//矩形坐标,纵轴长,横轴长
	if (lenx <= 1)
		return;
	int cnt = leny / lenx;//当前矩形能分出几个正方形
	for (int i = 0; i < cnt; i++)
	{
		dfs(x, y + i * lenx, lenx);//继续分割切出来的每个小正方形
	}
	dfs3(x, y + cnt * lenx, lenx, leny % lenx);//剩下的矩形变成了竖着的
}
void dfs3(int x, int y, int lenx, int leny)
{//横着的矩形
	if (leny <= 1)
		return;
	int cnt = lenx / leny;
	for (int i = 0; i < cnt; i++)
	{
		dfs(x + i * leny, y, leny);
	}
	dfs2(x + cnt * leny, y, lenx % leny, leny);
}
int main()
{
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		for (int j = 0; j <= i / 2; j++)
		{//检查n以内所有分割方案是否合法
			if (check(i - j, j))
			{
				siz[i] = j;
				break;
			}
		}
	}
	dfs(1, 1, n);
	cout << ans.size() << endl;
	reverse(ans.begin(), ans.end());//获取的答案是从大到小,要求是从小到大
	for (int i = 0; i < ans.size(); i++)
	{
		cout << ans[i].first << " " << ans[i].second.first << " " << ans[i].second.second << endl;
	}
	return 0;
}

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

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

相关文章

硬件-8-操作系统的历史

操作系统的最强入门科普&#xff08;Unix/Linux篇&#xff09; 操作系统的发展史&#xff08;DOS/Windows篇&#xff09; Mac操作系统进化史 手机操作系统的沉浮往事&#xff08;上&#xff09; 手机操作系统的沉浮往事&#xff08;下&#xff09; 1 操作系统种类 我们天天都…

flex 弹性布局学习

一.Flex布局: Flex是Flexible Box 缩写“弹性布局”,用来为盒状模型提供最大得灵活性。 任何一个容器都可以指定为 Flex 布局。 .box{display: flex; } 行内元素也可以使用 Flex 布局。 .box{display: inline-flex; } Webkit 内核的浏览器&#xff0c;必须加上-webkit前缀。…

CAS中ABA问题

在线程1最后需要写入比较时&#xff0c;发现预估值与内存值都为1是相同的&#xff0c;就会误以为之前没有其他线程操作&#xff0c;其时之前线程2将1->2,又将2->1&#xff0c;称为ABA。 4.4.1解决方法 添加类的版本号&#xff0c;来避免ABA问题&#xff0c;如原来内存值…

代码随想录训练营day4

问题一&#xff1a; 面试题 02.07. 链表相交 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 输入 输出 intersectVal 8, list…

无涯教程-jQuery - Fold方法函数

Fold 效果可以与show/hide/toggle一起使用。这样可以像折叠纸一样折叠元素。 Fold - 语法 selector.hide|show|toggle( "fold", {arguments}, speed ); 这是所有参数的描述- horizFirst - 是否先水平折叠。可以是true或false。默认值为false。model - 效果…

数字光源控制器报警说明

Revision Sheet: Rev Data Author Description 1.0 20230729 Shuangyi 数字光源控制器报警说明 V1.0 一.报警说明 当我们所连接的光源负载超出光源控制器本身驱动能力的时候&#xff0c;我们会对控制器进行保护&#xff0c;从以下方式可知道过流的情况&#xff0c;如…

ScheduledThreadPoolExecutor 及 ThreadPoolExecutor的基本使用及说明

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览2.1 为什么不推荐使用Executors去创建线程池 三、…

C# 快速写入日志 不卡线程 生产者 消费者模式

有这样一种场景需求&#xff0c;就是某个方法&#xff0c;对耗时要求很高&#xff0c;但是又要记录日志到数据库便于分析&#xff0c;由于访问数据库基本都要几十毫秒&#xff0c;可在方法里写入BlockingCollection&#xff0c;由另外的线程写入数据库。 可以看到&#xff0c;在…

abp vnext4.3版本托管到iis同时支持http和https协议

在项目上本来一直使用的是http协议,后来因为安全和一些其他原因需要上https协议,如果发布项目之后想同时兼容http和https协议需要更改一下配置信息,下面一起看一下: 1.安装服务器证书 首先你需要先申请一张服务器证书,申请后将证书安装到服务器上(也可以在iis中选择服务器…

第27天-熔断,降级,限流,网关流控,服务链路追踪

1.熔断/降级/限流 1.1.简介 1.1.1.熔断 A服务调用B服务某个功能&#xff0c;由于网络不稳定问题&#xff0c;或者B服务卡机&#xff0c;导致功能时间超长。如果这样的次数太多&#xff0c;我们就可以直接将B服务断路&#xff08;A不再请求B接口&#xff09;&#xff0c;凡是…

OJ练习第145题——并行课程 III

力扣链接&#xff1a;2050. 并行课程 III 题目描述 给你一个整数 n &#xff0c;表示有 n 节课&#xff0c;课程编号从 1 到 n 。同时给你一个二维整数数组 relations &#xff0c;其中 relations[j] [prevCoursej, nextCoursej] &#xff0c;表示课程 prevCoursej 必须在课…

如何高效书写文章访问

一、了解CSDN CSDN&#xff08;CSDN博客&#xff09;是中国最大的IT技术社区和程序员学习平台之一。CSDN成立于1999年&#xff0c;是中国软件开发者网络的缩写&#xff0c;旨在为中国的软件开发者和IT技术爱好者提供学习、交流和分享的平台。以下是关于CSDN的一些介绍&#xff…

1.写uni-app推荐的工具 HBuilderX

ni-app是一个框架&#xff0c;最大的优点是适用性强。你用这个框架写一套代码&#xff0c;他就能转换为各种小程序(微信&#xff0c;支付宝)&#xff0c;App&#xff0c;PC的web的样子 对于目前&#xff08;20230723&#xff09;来讲&#xff0c;在跨端的时候极容易报错。比如…

Ubuntu Server版 之 共享文件 samba和NFS 两种方法

NFS 和 Samba NFS &#xff1a; linux之间资源共享 Samba&#xff1a; 是windows系统与Linux系统之间资源共享的 samba 安装samba 工具 sudo apt install samba 创建共享目录 sudo mkdir /home/shared sudo chmod 777 /home/shared 配置sambd sudo vim /etc/samba/smb.con…

MySQL 实现分库和分表的备份 2023.7.29

1、分库备份 [rootlocalhost mysql-backup]# cat db_bak.sh #!/bin/bash k_userroot bak_password123456 bak_path/root/mysql-backup/ bak_cmd"-u$bak_user -p$bak_password" exc_db"Database|information_schema|mysql|performance_schema|sys" dbname…

SQL-每日一题【1068. 产品销售分析 I】

题目 销售表 Sales&#xff1a; 产品表 Product&#xff1a; 写一条SQL 查询语句获取 Sales 表中所有产品对应的 产品名称 product_name 以及该产品的所有 售卖年份 year 和 价格 price 。 查询结果中的顺序无特定要求。 查询结果格式示例如下&#xff1a; 解题思路 1.题目要…

Go-高质量编程与性能调优

高质量编程&#xff1a; 什么是高质量&#xff1a; ​ ——编写代码能达到正确可靠&#xff0c;简洁清晰的目标 各种边界条件是否考虑完备 异常情况处理&#xff0c;稳定性保证 易读易维护 编程原则 简单性 消除“多余的复杂性”&#xff0c;以简单清晰的逻辑编写代码 不理解…

《Vue3+Typescript》一个简单的日历组件实现

这是一个没有套路的前端博主&#xff0c;热衷各种前端向的骚操作&#xff0c;经常想到哪就写到哪&#xff0c;如果有感兴趣的技术和前端效果可以留言&#xff5e;博主看到后会去代替大家踩坑的&#xff5e; 主页: oliver尹的主页 格言: 跌倒了爬起来就好&#xff5e; 目录 一、…

带宽管理:知识点概述及防火墙带宽管理实验

目录 一、带宽管理技术介绍 1.1 基本概念&#xff1a; 1.2 带宽管理原理介绍&#xff1a; 1.3 接口带宽原理&#xff1a; 1.4 带宽策略原理&#xff1a; 1.5 带宽通道原理 1.6 带宽复用 二、带宽管理实验 一、带宽管理技术介绍 1.1 基本概念&#xff1a; 带宽管理对通…

hMailServer-5.3.3-B1879.exe

hMailServer-5.3.3-B1879.exe