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

【题解】洛谷P14308 【MX-S8-T1】斐波那契螺旋

对于这题,难点主要在于将图中这些正方形的左下角坐标求出来,注意到数据范围:\(\left| x \right|,\left| y \right| \leq 10^{18}\),所以用\(int\)绝对会炸吧,一定要开\(long long\)

那么我们如何算出这些正方形的左下角坐标呢?从3号方形开始求,我们发现可以不断维护当前求出的这整个矩形的上下左右边界,根据这些边界我们就可以求出下一个矩形的左下角坐标,下面来结合图看一下。

四条虚线分别为当前的上下左右界,当前为求\(2\)号矩形的时候(分别是\(up,down,left,right\))

我们发现\(3\)号矩形的左下角坐标是\((right,down)\),直接可以求出,求完三号后当前我们求出的总矩形也更新了,那么我们接着维护边界。

我们把\(3\)号加入当前的总矩形,将\(right+3\)号矩形的边长

接着我们要求\(4\)号矩形的左下角坐标,发现正好是\((left,up)\),然后接着维护边界。

发现\(5\)号的左下坐标为\((left-5号矩形的边长,down)\)

继续维护。

发现\(6\)号的左下坐标为\((left,down-6号矩形的边长)\)

继续维护。

欸?求\(7\)号是不是和求\(3\)号矩形的那种情况是一样的?

接下来一直重复就可以,通过简单计算后发现,我们算到第\(92\)个long long就也存不下了,但无伤大雅,这个时候我们的\(x\)\(y\)值都已经大于\(10^{19}\)了,这个时候停止对于答案其实已经没有影响力(

最后我们对于每个询问的点,我们都把求出来的这一堆点拿出来遍历一遍(也就\(92\)个),既然让输出边长最短的那个矩形的边长(注意是边长!),我们就从小到遍历,一旦出现一个符合要求的我们就输出然后停止,然后处理下一个询问。

代码:

#include <iostream>
using namespace std;
typedef long long ll;
const int maxn = 1e7;
struct Squ{ll x, y;ll len;
} squ[maxn];
struct Node{ll x, y;
} req[maxn];
ll leftt=-1, rightt=0, up=1, down=-1, n;
int main(){cin >> n;squ[1].len = squ[2].len = 1;squ[1].x = -1; squ[1].y = 0;squ[2].x = -1; squ[2].y = -1;for (int i = 3;i <= 92;i ++)squ[i].len = squ[i-1].len + squ[i-2].len;for (int i = 3;i <= 92;i ++){if (i % 4 == 3){squ[i].y = down;squ[i].x = rightt;rightt += squ[i].len;}else if (i % 4 == 0){squ[i].x = leftt;squ[i].y = up;up += squ[i].len;}else if (i % 4 == 1){leftt -= squ[i].len;squ[i].x = leftt;squ[i].y = down;}else {down -= squ[i].len;squ[i].x = leftt;squ[i].y = down;}}for (int i = 1;i <= n;i ++)cin >> req[i].x >> req[i].y;for (int i = 1;i <= n;i ++){for (int j = 1;j <= 92;j ++){if (squ[j].x <= req[i].x && req[i].x <= (squ[j].x + squ[j].len) && squ[j].y <= req[i].y && (squ[j].y + squ[j].len) >= req[i].y){cout << squ[j].len << '\n';break;}}}return 0;
}
http://www.hskmm.com/?act=detail&tid=38979

相关文章:

  • MAC地址类型速记
  • 《程序员修炼之道》阅读笔记3
  • 深入解析:关于在博客页面添加live2d-widget的一些心得和踩过的坑
  • Android设备位置历史深度解析:本地存储与取证技术
  • LLM学习记录DAY12
  • MCP Gateway 综述与实战指南
  • 清晨的阳光刚染红天边,我就钻进了彩虹色的热气球吊篮
  • vue3 不同构建版本
  • 使用 Android NDK 获取 YUV420p摄像头原始数据
  • task3
  • LLM安全新威胁:为什么几百个毒样本就能破坏整个模型
  • 文档扩展名.js .jsx .ts .tsx区别(JavaScript扩展名、React扩展名、TypeScript扩展名)
  • MySQL5.7安装及配置
  • ASP.NET Core Blazor简介和快速入门三(布局和路由)
  • 碎碎念(0....)
  • 玩转单片机之智能车小露——通过UART为单片机增加TTY终端
  • mysql数据库学习之用户权限管理(四) - 实践
  • 2025超纯水推荐品牌,哪个品牌口碑好?
  • 五笔练习
  • cnbook主题风格美化 —— 01(未完成)
  • 2025 年热镀锌方管立柱制造厂家最新推荐榜,技术实力与市场口碑深度解析佛山/顺德/广州薄壁/异形/Q235厂家推荐
  • 【嵌入式】IIC和SPI的比较
  • session、cookie、token的区别
  • AppSec与事件响应的融合实践
  • 权威调研榜单:电磁加热器厂家TOP3榜单好评深度解析
  • CSP-S模拟39 ( 2025多校冲刺CSP模拟赛8 )
  • 2025年市面上双曲铝单板品牌、行业内双曲铝单板厂家、市场双曲铝单板产品、目前双曲铝单板供应商、口碑好的双曲铝单板公司排行榜
  • 2025市面上双曲铝单板品牌、行业内双曲铝单板厂家、市场双曲铝单板产品、口碑好的双曲铝单板厂家、2025年双曲铝单板供应商权威排名
  • 2025市面上双曲铝单板品牌、行业内双曲铝单板生产厂家、市场双曲铝单板供应厂家、目前双曲铝单板实力厂家、口碑好的双曲铝单板公司排行榜
  • 2025 年调直机厂家最新推荐排行榜权威发布:聚焦伺服 / 高速 / 铁线 / 扁铁机型,揭秘行业优质企业