蓝桥杯刷题——day6

蓝桥杯刷题——day6

  • 题目一
    • 题干
    • 解题思路
    • 代码
  • 题目二
    • 题干
    • 解题思路
    • 代码

题目一

题干

小明发现49很有趣,首先,它是个平方数。它可以拆分为4和9,拆分出来的部分也是平方数。169 也有这个性质,我们权且称它们为:拼接平方数。100 可拆分1,00,这有点勉强,我们规定,0,00,000 等都不算平方数。小明想:还有哪些数字是这样的呢?你的任务出现了:找到某个区间的所有拼接平方数。
输入: 两个正整数 a,b,其中(a<b<10的6次方)
输出: 若干行,每行一个正整数。表示所有的区间 [a,b] 中的拼接平方数,从小到大输出。
示例一:

输入:
169 10000
输出:
169
361
1225
1444
1681
3249
4225
4900
9025

题目链接:拼接平方数

解题思路

这条题目很简单,首先我们从a遍历到b,在遍历的过程中先要满足他是一个平方数,如果是平方数,那么我们记录他的位数,然后再根据位数逐个划分为两个部分,在判断这两个部分是否是平方数。下面是完整代码:

代码

import java.util.Scanner;
public class Main {
    public static boolean is_sqrt(int a) {
        if (a == 0){
            return false;
        }
        double num = Math.sqrt(a);
        return num == Math.floor(num);
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        int b = scanner.nextInt();

        for (int i = a; i <= b; i++) {
            int tmp = i;
            if (is_sqrt(tmp)) {
                int num = 1;
                while (tmp / 10 != 0) {
                    num++;
                    tmp = tmp / 10;
                }
                while (num > 0) {
                    num--;
                    int ten = (int) Math.pow(10, num);
                    int x = i / ten;
                    int y = i % ten;
                    if (is_sqrt(x)&& is_sqrt(y)){
                        System.out.println(i);
                    }
                }
            }
        }
    }
}

is_sqrt函数是用于判断一个数是否是平方数,首先根据题意,0不是平方数,然后我们将这个数进行开平方,然后向下取值,如果向下取值和开平方数是一样的,那就证明该数是平方数,然后num用于记录该数的位数,x和y分别记录分开来的数字,如果同时满足x和y都是平方数,则打印出来。

题目二

题干

在一个排列中,一个折点是指排列中的一个元素,它同时小于两边的元素,或者同时大于两边的元素。对于一个1∼n 的排列,如果可以将这个排列中包含t个折点,则它称为一个t+1 单调排列。例如,排列 (1,4,2,3)是一个3单调排列,其中4和2都是折点,给定n和k,请问1∼n的所有排列中有多少个k单调排列?
输入: 输入一行包含两个整数n和k。
输出: 输出一个整数,表示答案。答案可能很大,你可需要输出满足条件的排列 数量除以123456 的余数即可。
示例一:

输入:
4 2
输出:
12

题目链接:排列数

解题思路

这条题目可以说是相当的难了,刚拿到手可能想到的是暴力解法,可能完全无从下手,这时候我们就要想到用动态规划来解决了,我们先来理解一下这条题目的大致意思,我们来看这么一个图:
在这里插入图片描述

我们可以看到有两个折点(5和1),这个5和1将这个数列分为了三段(红-蓝-红标了出来),题目问我们我现在给你一个两个数(一个表示节点的个数,一个表示分为了几段),问有多少种方法。这个就是题目的大致意思了,那么如何解决呢?我们假设dp[i][j] 表示 1∼i 的排列中j单调序列的个数。我们需要分以下几种情况:
1.j为偶数,并且序列开始处上升状态,如图:
在这里插入图片描述

  • 当我们把i+1插入到两个“峰”的前后时,我们发现j没有发生改变,并且开始序列仍然保持上升的状态,我们发现如果有j个单调序列,那么就会有j/2个“峰”,那么得到转移方程式:

dp[i+1][j] = dp[i+1][j] + dp[i][j] × j

  • 当我们把i+1插入到开头处时,开头序列就会从上升状态变为下降状态,同时单调序列从j变为j+1;同样的,当我们把i+1插入到末尾时,结尾序列就会从下降状态变为上升状态,同时单调序列从j变为j+1;因此转移方程式:

dp[i + 1][j + 1] = dp[i + 1][j + 1] + dp[i][j] × 2

  • 以上两种考虑完了,我们发现将n+1插入其他的位置,j个单调序列就会变为j+2,除去以上两种情况,剩下(i+1)−j−2 = i−j−1种情况,得到转移方程:

dp[i + 1][j + 2] = dp[i + 1][j + 2] + dp[i][j] * (i - j - 1)

2.j为偶数,并且序列开始处下降状态,如图:
在这里插入图片描述

  • 当我们把i+1插入到两个“峰”的前后时,我们发现j没有发生改变,并且开始序列仍然保持下降的状态,我们发现如果有j个单调序列,那么就会有(j/2)-1个“峰”,同时我们又发现,如果将i+1插入开始位置和结束位置,他的j也不会发生变化,因此总共有2×[(j/2)-1]+2个情况,化简可得就是为j,那么得到转移方程式:

dp[i+1][j] = dp[i+1][j] + dp[i][j] × j

  • 当我们把i+1插入开始的第二个节点和结束的倒数第二个节点时,j个单调序列就会从j变为j+1,因此我们得到转移方程:

dp[i + 1][j + 1] = dp[i + 1][j + 1] + dp[i][j] × 2

  • 以上两种考虑完了,我们发现将n+1插入其他的位置,j个单调序列就会变为j+2,除去以上两种情况,剩下(i+1)−j−2 = i−j−1种情况,得到转移方程:

dp[i + 1][j + 2] = dp[i + 1][j + 2] + dp[i][j] * (i - j - 1)

3.j为奇数,并且序列开始处上升状态4.j为奇数,并且序列开始处下降状态这两种情况与上面的结果是一模一样的所以我们就不在赘述,因为这些状态转移方程是一摸一样的,我们就可以进行合并,这也是为什么求状态转移方程时,我们会在前面加上一个自身,例如dp[i+1][j] = dp[i+1][j] + dp[i][j] × j ,这个状态转移方程中我们是dp[i+1][j] = dp[i+1][j] + dp[i][j] × j,而不是dp[i+1][j] = dp[i][j] × j,就是这个原因。最后让我们看一下完整代码:

代码

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        int[][] dp = new int[505][505];
        int mod = 123456;
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        if (n == 1) {
            if (m == 1) {
                System.out.println(1);
            } else {
                System.out.println(0);
            }
        }
        dp[2][1] = 2;
        for (int i = 2; i < n; i++) {
            for (int j = 1; j <= m; j++) {
                dp[i + 1][j] = (dp[i + 1][j] + dp[i][j] * j) % mod;
                dp[i + 1][j + 1] = (dp[i + 1][j + 1] + dp[i][j] * 2) % mod;
                dp[i + 1][j + 2] = (dp[i + 1][j + 2] + dp[i][j] * (i - j - 1)) % mod;
            }
        }
        System.out.println(dp[n][m] % mod);
    }
}

这条题目可以说是相当有难度,因此千万不要因为做不出来垂头丧气,也不怕各位笑话这条题目我看别人解析,自己理解就花了一个多小时。当然如果能自己做出来那真的是特别的厉害,可以说是将动态规划融会贯通了,如果有什么疑问或者问题,欢迎私信+评论,谢谢各位的点赞收藏。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL中的联结表

本文介绍什么是联结&#xff0c;为什么使用联结&#xff0c;以及如何编写使用联结的SELECT语句。 1. 联结 SQL最强大的功能之一就是能在数据查询的执行中联结&#xff08;join&#xff09;表。联结是SQL的SELECT能执行的最重要的操作&#xff0c;理解联结及其语法是学习SQL的…

.Net WebAPI(一)

文章目录 项目地址一、WebAPI基础1. 项目初始化1.1 创建简单的API1.1.1 get请求1.1.2 post请求1.1.3 put请求1.1.4 Delete请求 1.2 webapi的流程 2.Controllers2.1 创建一个shirts的Controller 3. Routing3.1 使用和创建MapControllers3.2 使用Routing的模板语言 4. Mould Bind…

SQL在线格式化 - 加菲工具

SQL在线格式化 打开网站 加菲工具 选择“SQL 在线格式化” 或者直接访问 https://www.orcc.online/tools/sql 输入sql&#xff0c;点击上方的格式化按钮即可 输入框得到格式化后的sql结果

vs 调试

常用&#xff1a; 调试->窗口-> 断点 监视 自动窗口 局部变量 调用堆栈 内存 反汇编&#xff08;也可以右键&#xff0c;转到反汇编&#xff09; 寄存器 快捷键&#xff1a; F5:启用调试&#xff0c;经常用来跳到下一个断点处 F9创建断点和取消断点。断点的重要作用&…

25. 深浅拷贝

一、什么是浅拷贝 只对对象的最顶层进行的拷贝称为 浅拷贝。我们可以用 copy 模块中的 copy() 方法实现浅拷贝。 import copya [11, 22, 33] b [44, 55, 66] c [a, b] d copy.copy(c)print(f"c: {c}") print(f"d: {d}") print(f"c d: {c d}&q…

docker简单命令

docker images 查看镜像文件 docker ps -a 查看容器文件 docker rm 0b2 删除容器文件&#xff0c;id取前三位即可 docker rmi e64 删除镜像文件&#xff08;先删容器才能删镜像&#xff09;&#xff0c;id取前三位即可 在包含Dockerfile文件的目录…

【Java】4、虚拟机 JVM

目录 Java内存区域详解(重点) JVM垃圾回收详解(重点) 类文件结构详解 类加载过程详解 类加载器详解(重点) 最重要的JVM参数总结 JDK监控和故障处理工具总结 JVM线上问题排查和性能调优案例 参考&#xff1a; JVM 核心技术 32 讲 深入浅出 Java 虚拟机

谷歌浏览器的无障碍功能介绍

在数字化时代&#xff0c;互联网已经成为人们生活中不可或缺的一部分。然而&#xff0c;并不是所有人都能平等地享受网络带来的便利。为了帮助有特殊需求的人士更好地访问和使用网络内容&#xff0c;谷歌浏览器推出了一系列无障碍功能。这些功能旨在提升视力障碍、听力障碍及其…

3D 生成重建035-DiffRF直接生成nerf

3D 生成重建035-DiffRF直接生成nerf 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 本文提出了一种基于渲染引导的三维辐射场扩散新方法DiffRF&#xff0c;用于高质量的三维辐射场合成。现有的方法通常难以生成具有细致纹理和几何细节的三维模型&#xff0c;并且容易出…

从斯柯达和大众汽车安全漏洞事件剖析谈软件安全设计

一、事件概述 2022年&#xff0c;斯柯达和大众汽车被曝出存在一系列安全漏洞&#xff0c;这一事件引起了广泛关注。据估算&#xff0c;这些漏洞可能涉及超过 140 万辆汽车&#xff0c;涵盖斯柯达速派 III&#xff08;Skoda Superb III&#xff09;、斯柯达柯珞克&#xff08;S…

Hyperledger Fabric 2.x 环境搭建

Hyperledger Fabric 是一个开源的企业级许可分布式账本技术&#xff08;Distributed Ledger Technology&#xff0c;DLT&#xff09;平台&#xff0c;专为在企业环境中使用而设计&#xff0c;与其他流行的分布式账本或区块链平台相比&#xff0c;它有一些主要的区别。 环境准备…

OpenIPC开源FPV之Adaptive-Link天空端代码解析

OpenIPC开源FPV之Adaptive-Link天空端代码解析 1. 源由2. 框架代码3. 报文处理3.1 special报文3.2 普通报文 4. 工作流程4.1 Profile 竞选4.2 Profile 研判4.3 Profile 应用 5. 总结6. 参考资料7. 补充资料7.1 RSSI 和 SNR 的物理含义7.2 信号质量加权的理论依据7.3 实际应用中…

metinfo的csrf漏洞复现

http://localhost/metinfo/install/index.php 管理员admin登录 抓修改信息包 进入点击受害链接 localhost/333.html 管理员被修改密码原来root错误被强制退出 输入密码123456登录正常

jclasslib Bytecode Viewer 安装

IDEA 2023.1.3 Settings->Plugins->Marketplace&#xff0c;搜索jclasslib Bytecode Viewer, install,apply 选中你所要分析的类&#xff0c;view->show bytecode with jclasslib gaoding

智能高效的IDE GoLand v2024.3全新发布——支持最新Go语言

GoLand 使 Go 代码的阅读、编写和更改变得非常容易。即时错误检测和修复建议&#xff0c;通过一步撤消快速安全重构&#xff0c;智能代码完成&#xff0c;死代码检测和文档提示帮助所有 Go 开发人员&#xff0c;从新手到经验丰富的专业人士&#xff0c;创建快速、高效、和可靠的…

Android学习路线图

‌Android系统的开发始于2003年&#xff0c;最初由安迪鲁宾在危险公司&#xff08;Danger, Inc.&#xff09;开发。2005年&#xff0c;Google收购了危险公司&#xff0c;并将其移动开发团队纳入旗下。2007年&#xff0c;Google正式发布了Android的第一个版本&#xff0c;并随后…

【含开题报告+文档+PPT+源码】基于微信小程序的旅游论坛系统的设计与实现

开题报告 近年来&#xff0c;随着互联网技术的迅猛发展&#xff0c;人们的生活方式、消费习惯以及信息交流方式都发生了深刻的变化。旅游业作为国民经济的重要组成部分&#xff0c;其信息化、网络化的发展趋势也日益明显。旅游论坛作为旅游信息交流和分享的重要平台&#xff0…

CTFshow-php特性(Web89-115)

CTFshow-php特性(Web89-115) Web89&#xff08;intval&#xff09; <?php include("flag.php"); highlight_file(__FILE__);if(isset($_GET[num])){$num $_GET[num];if(preg_match("/[0-9]/", $num)){die("no no no!");}if(intval($num))…

ip地址获取失败啥意思?ip地址获取失败怎么回事

在日常的网络使用中&#xff0c;我们时常依赖于稳定的IP地址来确保数据的顺畅传输和设备的正常识别。然而&#xff0c;有时我们会遇到“IP地址获取失败”的困扰&#xff0c;这不仅阻碍了我们的网络访问&#xff0c;还可能带来一系列的网络连接问题。那么&#xff0c;IP地址获取…

中国计算机学会计算机视觉专委会携手合合信息举办企业交流活动,为AI安全治理打开“新思路”

近期&#xff0c;《咬文嚼字》杂志发布了2024年度十大流行语&#xff0c;“智能向善”位列其中&#xff0c;过去一年时间里&#xff0c;深度伪造、AI诈骗等话题屡次登上热搜&#xff0c;AI技术“野蛮生长”引发公众担忧。今年9月&#xff0c;全国网络安全标准化技术委员会发布了…