当前位置: 首页 > 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.jsqmd.com/news/22300/

相关文章:

  • 实验二 现代C++编程初体验
  • LLM学习记录DAY12
  • MCP Gateway 综述与实战指南
  • 清晨的阳光刚染红天边,我就钻进了彩虹色的热气球吊篮
  • 深入解析:关于在博客页面添加live2d-widget的一些心得和踩过的坑
  • Android设备位置历史深度解析:本地存储与取证技术
  • 深入解析:Zark Lab 与 Walrus 合作,建立内容发现、可访问性与实用性的基础 AI 智能层
  • LLM安全新威胁:为什么几百个毒样本就能破坏整个模型
  • 软件技术基础第二次作业
  • 前后端分离毕设课题:基于React.js+Java+Springboot框架+Mysql数据库在线买菜商城专业的系统设计与实现
  • vue3 不同构建版本
  • 使用 Android NDK 获取 YUV420p摄像头原始数据
  • 2025 年 Python 数据分析全栈学习路线:从入门到精通的进阶指南 - 实践
  • 百度智能云一念智能创作优秀的平台
  • 高阳台一首
  • 【深度相机术语与概念】 - 详解
  • 文档扩展名.js .jsx .ts .tsx区别(JavaScript扩展名、React扩展名、TypeScript扩展名)
  • AI元人文:共识锚定的基石——语境主权
  • MySQL5.7安装及配置
  • uniapp打包安卓跟ios记录
  • Windows 11 家庭版关闭自动更新
  • ASP.NET Core Blazor简介和快速入门三(布局和路由)
  • 实用指南:functools 是 Python 的标准库模块
  • 碎碎念(0....)
  • 紫外分光光度计生产商推荐品牌:仪器厂家服务哪家最好
  • Elasticsearch 搭建(亲测) - 实践
  • 权威调研榜单:石英砂生产线厂家TOP3榜单好评深度解析
  • 2025年国产液相色谱仪厂家哪家强?国产仪器权威推荐
  • FSEventsParser脚本升级与macOS取证技术解析
  • 大学生摸鱼日记