码蹄集部分题目(第五弹;OJ赛2024年第10期)

🐋🐋🐋竹鼠通讯(钻石;分治思想;模板题:就算几何平面点对问题)

时间限制:3秒

占用内存:128M

🐟题目描述

在真空中,一块无限平坦光滑绝缘不导热草地上有很多光滑且相同球形竹鼠,它们的坐标为(xi,yi)。竹鼠之间会通过脑电波联系彼此。现在请问相距最近两只竹鼠的直线距离分别是多少(所有竹鼠都在草地的第一象限)?

🐟输入输出格式

输入格式:
第一行一个整数n;
接下来 nn行每行两个非负浮点数,xi,yi,表示第 i个点的 X 坐标与 Y 坐标。xi,yi都精确到小数点后两位。
​
输出格式:
一行,一个浮点数,最短距离。精确到小数点后4位。

🐟样例

🐚样例1

输入:
4
0.0 0.0
0.0 1.0
1.0 0.0
1.0 1.0
​
输出:
1.0000

🐚备注

其中:0≤n≤10^5,竹鼠的坐标数据范围在int型范围内。并且可能会有重叠的竹鼠。

🐟题目思路

经典的最近点对问题,用分治思想解决。

先说每一轮的思想:

  • 找到本轮的l、r、mid三条范围线,l是最左边的竹鼠所在的x位置,r是最右边的竹鼠所在的x位置,mid是l和r的中线

  • 最小距离只会出现在三种情况中:两个竹鼠都在左边,两个竹鼠都在右边,两个竹鼠跨中线

  • 分别求出两个竹鼠都在左边和都在右边的最小距离d,然后据此找出跨中线范围(mid±d)的竹鼠,将这些竹鼠按y排序,然后枚举任意两只竹鼠间的距离,找到最小距离即为结果

再说分治思想:

  • 切割整个l、r范围直到最小划分单位(l和r要么差0要么差1):

    • l=r,距离设为无穷大

    • l=r-1,直接返回两只竹鼠的距离

感谢官网用户——那是松石,提供的思路。

🐟代码

#include <bits/stdc++.h>
​
using namespace std;
#define INF 10000000000
const int N=1e5+10;
struct point
{double x, y;
}a[N];
​
int n,t[N];
double d=0;
​
bool cmp(point &a,point &b)//先按x排升序,x相等按y排升序
{if(a.x<b.x) return true;else if(a.x==b.x&&a.y<b.y) return true;else return false;
}
bool cmp2(int &i,int &j)//只按y排升序
{if(a[i].y<a[j].y) return true;else return false;
}
double dis(int i,int j)//计算距离
{double c=sqrt(pow(a[i].x-a[j].x,2)+pow(a[i].y-a[j].y,2));return c;
}
double solve(int l,int r)//l和r是所有竹鼠所在的x范围
{//分治中最小的两种任务情况:if(l==r) return INF;//左右范围重叠if(l==r-1) return dis(l,r);//左右范围没有重合,计算距离返回//距离最近的两个竹鼠只会是:全在左边、全在右边、跨中线三种情况之一int mid=(l+r)/2;//找到范围中线//分别求全在左边和全在右边的各自最小距离double d1=solve(l,mid);double d2=solve(mid+1,r);d=min(d1,d2);//得到全在左边和全在右边中的最小值int k=0;//记录跨中线范围内的竹鼠的数量//求跨中线的最小值for(int i=l;i<=r;i++){//对中线左右各d范围内的竹鼠按y排序,遍历得到这些竹鼠中的最小距离if(fabs(a[i].x-a[mid].x)<=d)//fabs,返回浮点数的绝对值;记录范围内竹鼠的x坐标信息{t[k]=i;k++;}sort(t,t+k,cmp2);//按y排序for(int i=0;i<k;i++)//枚举这些竹鼠的两两配对情况,计算得到最小距离{for(int j=i+1;j<k&&a[t[j]].y-a[t[i]].y<d;j++)//从i+1开始,避免重复判断{d=min(d,dis(t[i],t[j]));}}}return d;
}
int main()
{cin>>n;for(int i=0;i<n;i++) cin>>a[i].x>>a[i].y;sort(a,a+n,cmp);printf("%.4f",solve(0,n-1));return 0;
}

🐋🐋🐋上色(星耀;递归分治)

时间限制:1秒

占用内存:128M

🐟题目描述

🐟输入输出格式

🐟样例

🐟题目思路

对每个区域有两种上色方式:竖着刷,需要l-r+1次;横着刷,次数需要计算。

如果横着刷,那就是刷到最短的那根的长度为止,剩下的部分继续判断是竖着刷还是横着刷。

不断横竖判断,最后结果就是横着刷和竖着刷的最小值。

递归的结束判断就是l>r了,也就是遍历完整个区域了。

感谢官方视频解析的思路。

🐟代码

#include <bits/stdc++.h>
​
using namespace std;
​
int n,m;
int h[5010];//记录还没刷的栅栏高度int shu(int l,int r)//对l到r范围内的栅栏竖着刷,那就是栅栏的数量
{return r-l+1;
}
int heng(int l,int r)//横着刷
{int hmin=INT_MAX;for(int i=l;i<=r;i++)//找到该范围内最矮的栅栏,底下范围全部横着刷{hmin=min(h[i],hmin);}for(int i=l;i<=r;i++)//还剩下的还没刷,更新高度{h[i]-=hmin;}int ans=hmin;while(l<=r){while(l<=r&&h[l]==0)//找到剩余还未刷的一个子区域的左边界l{ l++;}int rr=l;//本段从l开始的连续区域的右边界的下一个位置//※※※rr从l+1开始的话就超内存了,有没有懂的大佬帮忙解答下原因~while(rr<=r&&h[rr]!=0)//找到本段区域的右边界的下一个位置{ rr++;}//对本段区域进行递归调用,判断最小的次数ans+=min(heng(l,rr-1),shu(l,rr-1));l=rr;//到下一段连续区域}return ans;
}int main()
{cin>>n;for(int i=1;i<=n;i++) cin>>h[i];cout<<min(heng(1,n),shu(1,n))<<endl;return 0;
}

🐋🐋🐋斐波那契数列(钻石;斐波那契数列性质求解最大公约数)

时间限制:1秒

占用内存:128M

🐟题目思路

大家都知道斐波那契数列即:f(1)=1,f(0)=0,f(i)=f(i−1)+f(i−2)(i≥2),现在请帮小码哥计算gcd⁡(f(n),f(m))的值。

🐟输入输出格式

输入格式:
第一行输入两个整数n,m(1≤n,m≤50000)。
​
输出格式:
输出一个整数代表gcd⁡(f(n),f(m)) 结果对1000000取模。

🐟样例

输入:
3 6
​
输出:
2

🐟题目思路

感谢官网用户——Silver,提供的思路。

🌮补充知识:斐波那契数列性质

前置知识:

  • 1:Fn和Fn+1互质

    • n=0时显然成立

    • n<=k-1时也成立:

      • 假设Fk和Fk-1互质,根据定义,Fk+1=Fk+Fk-1,假设存在d>1可以同时整除Fk+1和Fk,可知d也可以整除两者之差Fk-1,这与Fk和Fk-1互质矛盾

  • 2:Fn+m=FmFn+1+Fm-1Fn

    • 使用数学归纳法证明

    • m=1时,Fn+1=F1Fn+1+F0Fn=Fn+1成立

    • 假设m<=k时都成立:

      • 那么当m=k+1时,我们有Fn+k+1=Fn+k+Fn+k-1=(套用假设)FkFn+1+Fk-1Fn+Fk-1Fn+1+Fk-1Fn=(合并同类项)(Fk+Fk-1)Fn+1+(Fk-1+Fk-2)Fn=(斐波那契数列定义)=Fk+1Fn+1+FkFn,得证

据此可知(证明)最大公约数特性:

  • 根据前置知识2, 可以知道任何 Fn, Fm 的公约数, 都是 Fn+m的约数

  • 根据前置知识1、2,可以知道任何 Fn+m, Fn 的公约数 d, 都是 Fm 的约数

  • 根据以上两个结论, 我们知道 d 能整除 Fm, Fn 等价于 d 能整除 Fm+n, Fn

  • 推广上面的结论, 我们可以知道 d 能整除 Fm, Fn 等价于 d 能整除 Fm+kn, Fn

  • 注意到 m = m + kn (mod n), 我们用m替换 m+kn可以得到: d能整除 Fm % n, Fn等价于 d 能整除 Fm, Fn. 所以 gcd(Fm, Fn) = gcd(Fm%n, Fn). 这实际上就是欧几里得法求最大公约数的迭代过程, 迭代到最后可以得到gcd(Fm, Fn) = gcd(F0, Fgcd(m, n))

  • 由于 F0 =0, 且 gcd(0, x) = x, 我们得到 gcd(Fm, Fn) = Fgcd(m, n)

这道题目我们用到的特性就是:gcd(Fm, Fn) = Fgcd(m, n)

来源:TAOCP 学习记录 (1) - 斐波那契数列的最大公约数 · 瞎扯

🐟代码

#include<bits/stdc++.h> 
​
using namespace std;
​
int main( )
{long long n,m;cin>>n>>m;long long a=0,b=1,c=1;//F[0]、F[1]、F[2]long long x=__gcd(n,m);//调用标准库中的函数__gcd(int a,int b)来计算最大公约数if(x==0) cout<<a<<endl;//表示n和m没有公约数,根据特征,结果就是F0else if(x==1) cout<<b<<endl;//表示n和m的最大公约数是1,根据特征,结果就是F1else//n和m的最大公约数是x,根据特征,结果就是Fx{while(x>=2)//计算Fx{c=(a+b)%(long long)1e6;a=b;b=c;x--;}cout<<c<<endl;//输出Fx}return 0;
}

有问题我们随时评论区见~

⭐点赞收藏不迷路~

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

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

相关文章

自偏置电流镜、wilson和cascode电流镜、低压自偏置电流镜

1.自偏置电流镜 参考1&#xff1a;正确偏置和自启动电路 正确偏置&#xff1a; 2.自启动电路 参考2&#xff1a;两种自启动电路、cascode低压设计、自启动充放电过程分析 3.低压自偏置电流镜 参考3&#xff1a;电阻偏置分析 VbVgs3VodVgs1Vod 4.电阻偏置和MOS偏置的分…

【C++】动态规划算法

目录 还会持续更新动态规划斐波那契模型三步问题最小花费爬楼梯 路径问题不同路径路径问题Ⅱ 简单多状态按摩师 还会持续更新 动态规划 什么是动态规划&#xff1f; 斐波那契模型 三步问题 class Solution { public: const int N 1000009;int waysToStep(int n) {if(n1) …

服务器远程桌面连接不上怎么办?

随着互联网的发展和远程办公的兴起&#xff0c;服务器远程桌面连接成为了许多企业和个人不可或缺的工具。偶尔我们可能会碰到服务器远程桌面连接不上的情况&#xff0c;这时候我们需要找到解决办法&#xff0c;确保高效地远程访问服务器。 天联组网——突破远程连接障碍 在我们…

前端二维码工具小程序使用说明书

一、产品概述 前端二维码工具小程序是一款便捷、高效、易用的二维码生成与识别工具。本产品支持根据用户输入的文本或链接生成二维码&#xff0c;同时提供扫一扫功能以识别二维码内容&#xff0c;并支持将识别到的内容复制到剪贴板。此外&#xff0c;产品还提供了美化功能&…

Armadillo库:用于线性代数和科学计算的快速C/C++库下载及vs环境下的使用方法

armadillo库的下载及使用 一. armadillo库的下载二. vs2022环境下armadillo库的基本使用方法 一. armadillo库的下载 armadillo库的官方下载连接: https://arma.sourceforge.net/download.html 选择网页中最新版本的armadillo库压缩包文件进行下载。 解压armadillo-12.8.2.ta…

无重复的最长字串

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;算法分析与设计 ⛺️稳中求进&#xff0c;晒太阳 问题 给定一个字符串&#xff0c;我们需要找到该字符串中的最长无重复子串的长度。 示例 让我们以一个具体的示例来说明这个问题&#…

场景文本检测识别学习 day02(AlexNet论文阅读、ResNet论文精读)

怎么读论文 在第一遍阅读的时候&#xff0c;只需要看题目&#xff0c;摘要和结论&#xff0c;先看题目是不是跟我的方向有关&#xff0c;看摘要是不是用到了我感兴趣的方法&#xff0c;看结论他是怎么解决摘要中提出的问题&#xff0c;或者怎么实现摘要中的方法&#xff0c;然…

Elementplus 2.6.1表单校验模块开发体验改进

需求 之前的表单代码看了下&#xff0c;写的比较冗长&#xff0c;于是去万能的Github找点轮子&#xff0c;发现了这个&#xff1a; GitHub - aweiu/element-ui-verify: 如果你受够了饿了么ElementUI原生的校验方式&#xff0c;那就来试试它吧&#xff01;一款更懂你的校验插件…

Taro框架中的H5 模板基本搭建

1.H5 模板框架的搭建 一个h5 的基本框架的搭建 基础template 阿乐/H5 Taro 的基础模板

Java多线程实战-从零手搓一个简易线程池(四)线程池生命周期状态流转实现

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️本系列源码仓库&#xff1a;多线程并发编程学习的多个代码片段(github) &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正…

nexus设置s3存储

问题 因为我的nexus是安装在EC2上面&#xff0c;需要利用s3的存储能力&#xff0c;为nexus提供存储服务。 步骤 准备s3桶 输入桶名&#xff0c;创建s3桶&#xff0c;如下图&#xff1a; 创建桶读写策略 具体内容如下&#xff1a; {"Version": "2012-10-1…

c++之代码编译问题

为什么头文件不是编译的对象 1、头文件与包含指令(#include) 那些没有被项目中任何源文件包含的头文件&#xff0c;编译器是不去理会它的&#xff0c;不管它有没有语法错误&#xff0c;也不管它是否已添加到项目中。 2、包含指令的执行 包含指令是一种预编译指令&#xff0c;它…

如何区别进化和演化

在生物学中&#xff0c;"进化"和"演化"这两个词通常可以互换使用&#xff0c;它们都指的是生物种群随时间推移而发生的遗传变化。然而&#xff0c;在某些语境中&#xff0c;这两个词可能会有细微的差别&#xff1a; 进化&#xff08;Evolution&#xff09;…

[翻译] 在 CI 或测试环境中使用 Docker-in-Docker,三思而后行

发布日期&#xff1a;2024-04-08 18:01:01 原文地址&#xff1a;Using Docker-in-Docker for your CI or testing environment? Think twice. Docker-in-Docker 的主要目的是帮助 Docker 本身的开发。许多人使用它来运行 CI&#xff08;例如使用 Jenkins&#xff09;&#xf…

[NKCTF2024]-PWN:leak解析(中国剩余定理泄露libc地址,汇编覆盖返回地址)

查看保护 查看ida 先放exp 完整exp&#xff1a; from pwn import* from sympy.ntheory.modular import crt context(log_leveldebug,archamd64)while True:pprocess(./leak)ps[101,103,107,109,113,127]p.sendafter(bsecret\n,bytes(ps))cs[0]*6for i in range(6):cs[i]u32(p…

Java 基于微信小程序的校园请教小程序的研究与实现,附源码

博主介绍&#xff1a;✌程序员徐师兄、10年大厂程序员经历。全网粉丝12W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447…

SpringBoot整合Spring Data JPA

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉🍎个人主页:Leo的博客💞当前专栏: 循序渐进学SpringBoot ✨特色专栏: MySQL学习 🥭本文内容: SpringBoot整合Spring Data JPA 📚个人知识库: Leo知识库,欢迎大家访问 1.…

淘宝销量API商品详情页原数据APP接口测试㊣

淘宝/天猫获得淘宝app商品详情原数据 API 返回值说明 item_get_app-获得淘宝app商品详情原数据 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地…

Java-StringBuilder容器

一、基础用法 1.创建对象 StringBuilder sbnew StringBuilder(); 2.添加元素 可以添加整型、浮点型、字符串等。 sb.append(1); sb.append(2.3); sb.append(true); 3.反转 sb.reverse(); 4.获取长度 int len sb.length(); 5.转变成字符串 tring strsb.toString(); …

Python学习笔记11 - 列表

1. 列表的创建与删除 2. 列表的查询操作 3. 列表的增、删、改操作 4. 列表元素的排序 5. 列表生成式