当前位置: 首页 > news >正文

牛客 Wall Builder II 题解

思路

外部预处理

首先,知道n之后我们可以求出所有矩形的面积之和S,在面积相同的情况下矩形的长宽差距越小,周长越小

因为n最大就100,所以我们就对每一个n暴力求解出周长最短情况的长与宽:S=a*b下令a+b最小

求得的结果存到pair<int,int>数组中,解题代码中n输入几就用第几个就好了

在知道长宽之后确定每个砖的位置就很好处理了,因为一定能放完,令长宽的较小值作为墙的高度,一层层的放就行了

每种长度的砖有多少块用一个数组存着

先从最长的砖开始放,然后遍历寻找还能放到当层的砖,每层遍历时设定一个now变量作为横坐标指针,因为高度都为1是固定的就不格外增加变量了

AC代码

#include<bits/stdc++.h>
using namespace std;#define int long long//外部预处理出的1-100的n对应的墙的长宽值
pair<int,int> hv[101]={{0,0},{1,1},{2,2},{2,5},{4,5},{5,7},{7,8},{7,12},{10,12},{11,15},
{11,20},{13,22},{14,26},{13,35},{20,28},{20,34},{24,34},{19,51},{30,38},{35,38},{35,44},
{23,77},{44,46},{46,50},{50,52},{45,65},{52,63},{58,63},{58,70},{31,145},{62,80},{62,88},
{68,88},{77,85},{84,85},{74,105},{76,111},{37,247},{95,104},{82,130},{82,140},{43,287},
{86,154},{110,129},{115,132},{115,141},{94,184},{98,188},{140,140},{119,175},{130,170},
{106,221},{156,159},{159,165},{165,168},{154,190},{152,203},{59,551},{145,236},{122,295},
{155,244},{183,217},{192,217},{208,210},{208,220},{143,335},{187,268},{134,391},{230,238},
{161,355},{213,280},{219,284},{222,292},{185,365},{190,370},{266,275},{266,286},{143,553},
{260,316},{270,316},{270,328},{249,369},{287,332},{238,415},{301,340},{215,493},{319,344},
{319,356},{330,356},{273,445},{345,364},{322,403},{188,713},{235,589},{376,380},{380,388},
{388,392},{291,539},{385,420},{330,505},{404,425}};int n;
int kuan,gao,nd,now;
int chai[101]; //存每个长度的砖有多少块void solve(){cin>>n;for(int i=1;i<=n;++i){chai[i]=n+1-i;}cout<<(hv[n].first+hv[n].second)*2<<'\n';kuan=hv[n].second; gao=hv[n].first;for(int i=0;i<gao;++i){nd=kuan; now=0;for(int j=n;j>0 && nd;){ //倒着找从最长的砖开始if(nd>=j && chai[j]){cout<<now<<' '<<i<<' '<<now+j<<' '<<i+1<<'\n';nd-=j;now=now+j;--chai[j];}else --j; //不符合当前情况就找长度更短的}}}signed main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int _=1;cin>>_;while(_--){solve();}    return 0;
}

相关文章:

  • DeepSeek-提示词工程
  • 形式化数学——Lean的介绍与安装
  • Python异步编程入门:从同步到异步的思维转变
  • 链表操作练习
  • 【C++】WSL常用语法
  • 电子商务商家后台运营专员模板
  • Android工厂模式
  • 设一个测试情境,新用户注册后显示的名字不完整,测试思路是怎么样的?
  • 【C/C++】inline关键词
  • 用网页显示工控仪表
  • 精益数据分析(40/126):移动应用商业模式的关键指标与盈利策略
  • 常见小模型的实现原理及使用示例:Android端
  • 黑马点评day02(缓存)
  • 常用CPU、GPU、NPU、DSP、ASIC等芯片区别介绍
  • IL2CPP 技术深度解析
  • 三星SMT贴片机选型与效能提升指南
  • 学习路线(c++)
  • 使用Mathematica绘制Sierpinski地毯
  • ZYNQ笔记(十七):IP核封装与接口定义
  • Java抽象类与接口详解
  • 有乘客被高铁车门夹住?铁路回应:系突感不适下车,未受伤,列车正点发车
  • 消失的日本中年劳动者:任何人都有与社会脱节的风险
  • 铁路上海站迎五一返程客流最高峰,今日预计到达75.9万人次
  • 特朗普宣布对进口电影征收100%关税
  • 江南华南较强降雨扰返程,北方大部需防风沙
  • 日本政府强烈反对美关税政策并要求其取消