码蹄集部分题目(第五弹;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.rhkb.cn/news/302505.html

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

相关文章

秋招算法刷题6

20240408 1.两数之和 &#xff08;时间复杂度是O&#xff08;n的平方&#xff09;&#xff09; public int[] twoSum(int[] nums, int target){int nnums.length; for(int i0;i<n;i){ for(int j1;j<n;j){ if(nums[i][j]target){ …

libVLC 提取视频帧使用OpenGL渲染

在上一节中&#xff0c;我们讲解了如何使用QWidget渲染每一帧视频数据。 由于我们不停的生成的是QImage对象&#xff0c;因此对 CPU 负荷较高。其实在绘制这块我们可以使用 OpenGL去绘制&#xff0c;利用 GPU 减轻 CPU 计算负荷&#xff0c;本节讲解使用OpenGL来绘制每一帧视频…

harmonyOS安装ohpm

下载 下载地址 HUAWEI DevEco Studio和SDK下载和升级 | 华为开发者联盟 初始化 注意&#xff1a;初始化ohpm前&#xff0c;需先完成node.js环境变量配置 1.解压文件&#xff0c;进入commandline-tools-windows-2.0.0.2\command-line-tools\ohpm\bin 2.执行&#xff1a; init.ba…

安卓开机启动流程

目录 一、整体框架二、流程代码分析2.1 Boot ROM2.2 Boot Loader2.3 Kernel层Kernel代码部分 2.4 Init进程Init进程代码部分 2.5 zygote进程zygote代码部分 2.6 SystemServer进程SystemServer代码部分 2.7 启动Launcher与SystemUI 三、SystemServices3.1 引导服务3.2 核心服务3…

C++进阶之路---何为智能指针?

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、为什么需要智能指针&#xff1f; 下面我们先分析一下下面这段程序有没有什么内存方面的问题&#xff1f;提示一下&am…

什么是HW,企业如何进行HW保障?

文章目录 一、什么是HW二、HW行动具体采取了哪些攻防演练措施三、攻击方一般的攻击流程和方法四、企业HW保障方案1.建意识2.摸家底3.固城池4.配神器5.增值守 一、什么是HW 网络安全形势近年出现新变化&#xff0c;网络安全态势变得越来越复杂&#xff0c;黑客攻击入侵、勒索病…

【腾讯云 TDSQL-C Serverless 产品体验】饮水机式使用云数据库

云计算的发展从IaaS&#xff0c;PaaS&#xff0c;SaaS&#xff0c;到最新的BaaS&#xff0c;FasS&#xff0c;在这个趋势中serverless(去服务器化&#xff09; 计算资源发展Physical -> Virtualisation -> Cloud Compute -> Container -> Serverless。 一、背景介绍…

【azure笔记 1】容器实例管理python sdk封装

容器实例管理python sdk封装 测试结果 说明 这是根据我的需求写的&#xff0c;所有有些参数是写死的&#xff0c;比如cpu核数和内存&#xff0c;你可以根据你的需要自行修改。前置条件&#xff1a; 当前环境已安装python3.8以上版本和azure cli并且已经登陆到你的账户 依赖安…

自己写的组件中使用v-model双向绑定

这里的时间选择表单是我写的一个组件&#xff0c;我想用v-model获取到实时的ref值。 代码&#xff1a; //父组件<TimePickerModal v-model:value"time" label-text"计划客面时间" /> const time ref(2024-04-09 15:20:00);//子组件<template>…

JRT判断数据是否存在优化

有一种业务情况类似下图&#xff0c;质控能做的项目是仪器关联的项目。这时候维护质控物时候开通项目时候要求加载仪器项目里面的项目&#xff08;没有开通的子业务数据的部分&#xff09;。对右边已经开通的部分要求加载仪器项目里面的项目&#xff08;有开通业务子数据的部分…

【C语言】扫雷小游戏

文章目录 前言一、游戏玩法二、创建文件test.c文件menu()——打印菜单game()——调用功能函数&#xff0c;游戏的实现main()主函数 game.c文件初始化棋盘打印棋盘随机布置雷的位置统计周围雷的个数展开周围一片没有雷的区域计算已排查位置的个数排查雷(包括检测输赢): game.h文…

基于ssm乐购游戏商城系统论文

摘 要 随着社会的发展&#xff0c;游戏品种越来越多&#xff0c;计算机的优势和普及使得乐购游戏商城系统的开发成为必需。乐购游戏商城系统主要是借助计算机&#xff0c;通过对信息进行管理。减少管理员的工作&#xff0c;同时也方便广大用户对个人所需信息的及时查询以及管理…

推荐一款自动化测试神器---Katalon Studio

Katalon Studio介绍 Katalon Studio 是一款在网页应用、移动和网页服务方面功能强大的自动化测试解决方案。基于 Selenium 和 Appium框架&#xff0c;Katalon Studio集成了这些框架在软件自动化方面的优点。这个工具支持不同层次的测试技能集。非程序员也可以快速上手一个自动…

maven profiles 配置

1.pom.xml中的文件配置 <profiles><profile> <!-- 开发/本地 默认激活 --><id>dev</id><activation><activeByDefault>true</activeByDefault></activation> <!--默认启用的是dev环境配置--><properties>&…

川川本人著作《Python3编程从零基础到实战》

在数字时代&#xff0c;Python已经成为了一种极为强大和灵活的编程语言&#xff0c;它的应用范围从网站开发到数据科学&#xff0c;再到机器学习和人工智能。无论你是一名编程新手还是希望深化已有技能的开发者&#xff0c;《Python3编程从零基础到实战》将成为你通往Python世界…

海外盲盒系统开发,盲盒出口成为企业新机遇

随着盲盒的兴起&#xff0c;国内消费市场形成了万物皆可盲盒的态势。并且&#xff0c;盲盒自带社交属性&#xff0c;也成为了年轻人的社交神器。 除了在国内&#xff0c;盲盒在海外也掀起了一股热潮&#xff0c;呈现出了爆发式增长形势&#xff0c;国内热门盲盒企业也出口到了…

DSP实时计算平台设计方案:912-基于6U CPCIe的双路光纤图像DSP实时计算平台

基于6U CPCIe的双路光纤图像DSP实时计算平台 一、设备概述 设备基于6U CPCIe架构&#xff0c;通过背板交换实现4片信号处理板卡的互联传输&#xff0c;每个信号处理板卡支持双TMS320C6678&#xff0c;支持2路光纤的图像处理&#xff0c;实现FPGA的预处理和备份工…

初识Python(注释、编码规范、关键字...)

&#x1f947;作者简介&#xff1a;CSDN内容合伙人、新星计划第三季Python赛道Top1 &#x1f525;本文已收录于Python系列专栏&#xff1a; 零基础学Python &#x1f4ac;订阅专栏后可私信博主进入Python学习交流群&#xff0c;进群可领取Python视频教程以及Python相关电子书合…

最新剧透前沿信息GPT-5或将今年发布

GPT2 很糟糕 &#xff0c;GPT3 很糟糕 &#xff0c;GPT4 可以 &#xff0c;但 GPT5 会很好。 PS:GPT2 很糟糕,3 很糟糕,4 可以,5 很可以。 如果想升级GPT4玩玩&#xff0c;地址 今年发布的具有推理功能的 GPT5不断发展&#xff0c;就像 iPhone 一样 Sam Altman 于 17 日&am…

【MATLAB高级编程】第二篇 | 元胞数组(cell)操作

【第二篇】元胞数组&#xff08;cell&#xff09;操作 1. 创建元胞数组cell2. 查看和修改cell内的元素值3. 高级操作: 可视化作图显示cell内的内容4. 把矩阵转换成单元数组5. 把单元数组转换成结构体变量 你好&#xff01; 欢迎进入 《MATLAB高级编程》 文章系列 &#xff0c;每…