【刷题汇总 -- 爱吃素、相差不超过k的最多数、最长公共子序列(一)】

news2024/9/20 23:29:22

C++日常刷题积累

  • 今日刷题汇总 - day026
    • 1、爱吃素
      • 1.1、题目
      • 1.2、思路
      • 1.3、程序实现
    • 2、相差不超过k的最多数
      • 2.1、题目
      • 2.2、思路
      • 2.3、程序实现 -- 滑动窗口
    • 3、最长公共子序列(一)
      • 3.1、题目
      • 3.2、思路
      • 3.3、程序实现 -- dp
    • 4、题目链接

今日刷题汇总 - day026

1、爱吃素

1.1、题目

在这里插入图片描述

1.2、思路

读完题知道,让判断两个正整数相乘之后是否是素数。当数据量太大时,考虑会超过范围,所以对于大数不能简单的相乘后判断。那么首先要清楚素数的性质,素数(质数)指除了能被1或本身外整除的数。根据题目和示例分析,可分类讨论解决,当a=1时判断b是否是素数,因为ab = 1b = b直接判断b的结果,把结果保留后,再当b=1时,判断a是否为素数,最后两个结果或上即可,都说明a*b为素数。那么接下来,就是程序实现。

1.3、程序实现

首先,按照题目要求写好输入,然后根据思路分析对ab分类讨论,当a = 1且b是素数或者b =1且a为素数则,ab为素数输出“YES"即可,否则输出“NO"。其中封装一个isprim函数潘顿是否为素数,值得注意的是数据范围的问题,采用long long即可。

#include <iostream>
#include <cmath>
using namespace std;

bool isprim(long long x)
{
    if(x < 2)
        return false;
    for(int i = 2;i <= sqrt(x);i++)
    {
        if(x % i == 0)
            return false;
    }
    return true;
}

int main()
{
    int T;
    cin >> T;
    long long  a,b;
    while(T--)
    {
        cin >> a >> b;
        if((a == 1 && isprim(b)) || (b == 1 && isprim(a)))
        {
            cout << "YES" << endl;
        }
        else
            cout << "NO" << endl;
    }
    return 0;
}

在这里插入图片描述
在这里插入图片描述

2、相差不超过k的最多数

2.1、题目

在这里插入图片描述

2.2、思路

读完题知道,给定一个数组,选择一些数,要求选择的数中任意两数差的绝对值不超过 k。问最多能选择多少个数?读完题知道,根据蛮力法的思路就是把数组sort排序,然后从左向右枚举所有情况,判定能够选择最多数的方案即可,但是这样子right会有很多的回溯,所以既然两个指针相同的方向遍历。且具有k约束差值大小,所以很容易想到了适用滑动窗口进行优化。那么滑动窗口就需要确定:
(1)、进窗口,right所指的元素直接进窗口即可。
(2)、判断窗口,当窗口大于k,即:arr[right] - arr[left] > k ,
(3)、出窗口,然后left++滑动窗口,元素个数也跟着减少,即为出窗口;
(4)、更新结果,更新区间的元素个数即可,保持最多的元素个数到ret变量中即可;
那么接下来,就是程序实现。

2.3、程序实现 – 滑动窗口

首先,按照题目要求写好输入,然后进行排序预处理,接着根据思路分析采用滑动窗口思路优化蛮力法,因为这里控制的是元素个数,所以直接进窗口,知道判断窗口,再出窗口滑动窗口,然后更新每一个出之后的结果,最后遍历完后得到最多元素个数ret,输出ret即可。

#include <iostream>
#include <algorithm>
using namespace std;

const int N = 2e5 + 10;
int arr[N];

int main()
{
    int n,k;
    cin >> n >> k;
    for(int i = 0;i < n;i++)
        cin >> arr[i];
    //排序
    sort(arr,arr+n);
    int left = 0;
    int right = 0;
    int ret = 1;//元素个数至少为1
    while(right < n)
    {
        //进窗口 + 判断窗口 + 滑动窗口
        while(arr[right] - arr[left] > k)
        {
            left++;
        }
        //更新结果
        ret = max(ret,right - left + 1);
        right++;
    }
    cout << ret << endl;
    return 0;
}

在这里插入图片描述

在这里插入图片描述

3、最长公共子序列(一)

3.1、题目

在这里插入图片描述

3.2、思路

读完题知道,与之前最长回文子序列类似,而这里是给定两个字符串 s1 和 s2,长度为 n 和 m 。求两个字符串最长公共子序列的长度。所谓子序列,指一个字符串删掉部分字符(也可以不删)形成的字符串。最长公共子序列,即一个最长的字符串,它既是 s1 的子序列,也是 s2 的子序列。对于这种选择删与不删很容易想到0/1背包等dp类问题,所以采用dp思路根据题目和示例分析,需要确定状态表示和状态转移方程。
状态表示: dp[i][j] 表示:字符串s1中[0, i] 区间与字符串s2中[0, j] 区间内所有的子序列中,最长公共子序列的长度是多少。
状态转移⽅程:根据最后⼀个位置的字符情况,划分情况:
a.选择最后一个位置:s1[i] == s2[j]:dp[i][j] = dp[i - 1][j - 1] + 1;
b.不选择最后一个位置:s1[i] != s2[j]:dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])。
初始化:为了防⽌越界,我们把字符串的起始位置从1开始计算。
那么接下来,就是程序实现。

3.3、程序实现 – dp

推导确定状态表示和状态转移方程即可。
状态表示: dp[i][j] 表示:字符串s1中[0, i] 区间与字符串s2中[0, j] 区间内所有的子序列中,最长公共子序列的长度是多少。
状态转移⽅程:根据最后⼀个位置的字符情况,划分情况:
a.选择最后一个位置:s1[i] == s2[j]:dp[i][j] = dp[i - 1][j - 1] + 1;
b.不选择最后一个位置:s1[i] != s2[j]:dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])。
初始化:为了防⽌越界,我们把字符串的起始位置从1开始计算。

#include <iostream>
using namespace std;


const int N = 1010;
char s1[N];
char s2[N];

//dp[i][j]表示:字符串s1中[0, i] 区间与字符串s2中[0, j] 区间内所有的子序列中,最长公共子序列的长度是多少。
int dp[N][N];

int main()
{
    int n,m;
    cin >> n >> m;
    for(int i = 1;i <= n;i++)
        cin >> s1[i];
    for(int i = 1;i <= m;i++)
        cin >> s2[i];
    
    for(int i = 1;i <= n;i++)
    {
        for(int j = 1;j <=m;j++)
        {
            if(s1[i] == s2[j])//选择最后一个位置
                dp[i][j] = dp[i-1][j-1] + 1;//前一个位置的最长子序列+自己本身
            else
                dp[i][j] = max(dp[i-1][j],dp[i][j-1]);//前面区间的最大值
        }
    }
    cout << dp[n][m] << endl;
    return 0;
}

在这里插入图片描述
在这里插入图片描述

4、题目链接

🌟爱吃素
🌟相差不超过k的最多数
🌟最长公共子序列(一)

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

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

相关文章

自写Json转换工具

前面写了简单的API测试工具ApiTools&#xff0c;返回的json有时需要做很多转换&#xff0c;于是开发了这个工具。 功能包括 1、json字符串转为表格&#xff0c;可以直观的展示&#xff0c;也可以复制&#xff0c;并支持转换后的表格点击列头进行排序&#xff0c;比较方便地定…

鸿蒙系统开发【应用接续】基本功能

应用接续 介绍 基于ArkTS扩展的声明式开发范式编程语言编写的一个分布式视频播放器&#xff0c;主要包括一个直播视频播放界面&#xff0c;实现视频播放时可以从一台设备迁移到另一台设备继续运行&#xff0c;来选择更合适的设备继续执行播放功能以及PAD视频播放时协同调用手…

怎么选择的开放式耳机好用?2024超值耳机分享!

耳机在当前数字化时代已成为我们生活、娱乐乃至工作中的重要部分。随着市场需求的增长&#xff0c;消费者对耳机的期望也在提高&#xff0c;他们不仅追求音质的卓越&#xff0c;还关注佩戴的舒适度和外观设计。虽然传统的入耳式和半入耳式耳机在音质上往往能够满足人们&#xf…

JavaFX布局-Accordion

JavaFX布局-Accordion 一个可扩展的面板&#xff0c;包括标题、内容与TitledPane配合一起使用 public static Accordion demo1() {// 创建AccordionAccordion accordion new Accordion();// 内边距accordion.setPadding(new Insets(10, 10, 10, 10));for (int i 1; i < 1…

PSINS工具箱函数介绍——avperrset

目录 avperrset是设置avp误差的函数使用方法函数源代码源代码解析 avperrset是设置avp误差的函数 输入为角度误差、速度误差、位置误差。 输出也是角度误差、速度误差、位置误差。 看起来输入和输出都一样&#xff0c;为什么还要这个函数呢&#xff1f; 那是因为这个函数可以进…

计算机网络-PIM-DM密集模式工作原理

一、PIM-DM基础概念 PIM-DM主要用在组成员较少且相对密集的网络中&#xff0c;通过"扩散-剪枝"的方式形成组播转发树&#xff08;SPT&#xff09;。 PIM-DM在形成SPT的过程中&#xff0c;除了扩散&#xff08;Flooding&#xff09;&#xff0c;剪枝&#xff08;Prune…

基于YOLOv10的裂缝检测系统

基于YOLOv10的裂缝检测系统 (价格80) 包含 【裂缝】 1个类 通过PYQT构建UI界面&#xff0c;包含图片检测&#xff0c;视频检测&#xff0c;摄像头实时检测。 &#xff08;该系统可以根据数据训练出的yolov10的权重文件&#xff0c;运用在其他检测系统上&#xff0c;如火…

Logic Error: 如何识别和修复逻辑错误

&#x1f9e9; Logic Error: 如何识别和修复逻辑错误 &#x1f50d; &#x1f9e9; Logic Error: 如何识别和修复逻辑错误 &#x1f50d;摘要引言正文内容一、什么是逻辑错误&#xff1f; &#x1f914;1.1 逻辑错误的定义1.2 逻辑错误的特征 二、常见的逻辑错误类型 &#x1f…

深度洞察·情感保鲜与经济可持续的共鸣——解锁情感与品牌长青的密码

深度洞察情感保鲜与经济可持续的共鸣——解锁情感与品牌长青的密码 在这个快节奏的时代&#xff0c;我们常常在探寻&#xff0c;为何曾经那份心动的激情会逐渐褪色&#xff0c;如同你我点解&#xff0c;两人并肩却渐失“feel”&#xff0c;想要转身离去&#xff1f;或许&#…

分享5款ai头像工具,助你轻松实现社交新形象

如今&#xff0c;无论是社交媒体上的个人形象塑造&#xff0c;还是虚拟世界中的角色扮演&#xff0c;一个独特而吸引人的AI头像都能成为你个性化的代表。 例如&#xff0c;ai头像男古风通常代表着一种对传统文化的尊重和热爱&#xff1b;而现代简约头像可能代表着一种追求简洁…

U盘数据恢复不再难:2024年4款工具,找回你“躲藏”的记忆

现在市面上有一些非常棒的U盘数据恢复软件&#xff0c;它们特别好用&#xff0c;就算你对电脑不太懂也能轻松搞定。这些软件能在几分钟之内帮你检查U盘&#xff0c;找出那些被误删的照片、文件和视频&#xff0c;让你可以轻松把它们找回来。不管你是自己用还是工作需要&#xf…

bus hound简单使用记录,抓取usb hid数据

有很多博文介绍&#xff0c;如参考&#xff0c;但在实际操作中很迷茫&#xff0c;第一步的选设备就一脸懵&#xff0c;下面是实际使用过程 使用这个bus hound的原因 在调试一个usb的自定义hid时出现很多数据无效&#xff0c;但有些又可用&#xff0c;所以想用软件查看真正的上…

科普文:微服务之Spring Cloud 组件API网关Gateway

API网关是一个服务器&#xff0c;是系统的唯一入口。从面向对象设计的角度看&#xff0c;它与外观模式类似。API网关封装了系统内部架构&#xff0c;为每个客户端提供一个定制的API。它可能还具有其它职责&#xff0c;如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响…

OpenAI API giving error: 429 Too Many Requests

题意&#xff1a;OpenAI API 返回错误&#xff1a;429 请求过多 问题背景&#xff1a; I am trying to make a request to the openai API with the following code in express nodeJS: 我正在尝试使用以下 Express Node.js 代码向 OpenAI API 发送请求&#xff1a; import …

MolGAN网络架构:用于小分子图的隐式生成模型

MolGAN&#xff1a;小分子图的隐式生成模型 文章目录 一、说明二、简介三、背景知识3.1.分子作为图表3.2.隐式方法与基于可能性的方法2.3 改进的 WGAN2.4.确定性策略梯度 四、模型说明4.1生成器4.2.判别器和奖励网络 五、实验5.1 数据集5.2 生成器架构5.3 判别器和奖励网络架构…

打造前端开发的利器--NPM

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

YOLOv8添加注意力模块并测试和训练

YOLOv8添加注意力模块并测试和训练 参考bilibili视频 yolov8代码库中写好了注意力模块&#xff0c;但是yolov8的yaml文件中并没用使用它&#xff0c;如下图的通道注意力和空间注意力以及两者的结合CBAM&#xff0c;打开conv.py文件可以看到&#xff0c;其中包含了各种卷积块的…

ClinicalAgent:结合大模型的临床试验多智能体系统

ClinicalAgent&#xff1a;结合大模型的临床试验多智能体系统 提出背景ClinicalAgent 框架规划智能体功效智能体安全智能体 解法解法 子解法1&#xff08;因为需要处理复杂的数据和多变量&#xff09; 子解法2&#xff08;因为需要及时反馈临床试验中的变化&#xff09; 子解…

海信聚好看的DBDocter软件使用心得

在墨天轮大会看到这个软件,好称是内核级别的诊断工具, 工作空闲下载免费看看 结果要1.7GB还TAR. DBdoctor是一款内核级数据库性能诊断软件。可以对数据库做细粒度的扫描&#xff0c;帮助您一分钟内找到数据库性能问题&#xff0c;实现性能诊断百倍提效。针对数据库性能诊断门…

ICML 2024:从历史数据中挖掘最优策略,高效完成50+任务,“离线策略提升的在线演员-评论家”研究工作

长期以来&#xff0c;如何提升数据利用效率被认为是强化学习落地应用的一大桎梏。过去非策略&#xff08;off-policy&#xff09;的强化学习虽然能反复利用收集到的数据来进行策略优化&#xff0c;然而这些方法未能最大限度地利用重放缓冲区&#xff08;Replay buffer&#xff…