蓝桥杯专题-试题版-【地宫取宝】【斐波那契】【波动数列】【小朋友排队】

news2024/11/15 21:02:34
  • 点击跳转专栏=>Unity3D特效百例
  • 点击跳转专栏=>案例项目实战源码
  • 点击跳转专栏=>游戏脚本-辅助自动化
  • 点击跳转专栏=>Android控件全解手册
  • 点击跳转专栏=>Scratch编程案例
  • 点击跳转=>软考全系列
  • 点击跳转=>蓝桥系列

👉关于作者

专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎底部卡片私我,获取更多支持,交流让学习不再孤单

芝麻粒儿-空名先生

👉实践过程

需要所有整理的文档可底部卡片联系我,直接发压缩包。

😜地宫取宝

问题描述
  X 国王有一个地宫宝库。是 n x m 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。

地宫的入口在左上角,出口在右下角。

小明被带到地宫的入口,国王要求他只能向右或向下行走。

走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。

当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明。

请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这k件宝贝。
输入格式
  输入一行3个整数,用空格分开:n m k (1<=n,m<=50, 1<=k<=12)

接下来有 n 行数据,每行有 m 个整数 Ci (0<=Ci<=12)代表这个格子上的宝物的价值
输出格式
  要求输出一个整数,表示正好取k个宝贝的行动方案数。该数字可能很大,输出它对 1000000007 取模的结果。
样例输入
2 2 2
1 2
2 1
样例输出
2
样例输入
2 3 2
1 2 3
2 1 5
样例输出
14

import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.Arrays;

public class Main
{
	private static StreamTokenizer tokenizer = new StreamTokenizer(
			new InputStreamReader(System.in));
	private static PrintWriter outWriter = new PrintWriter(
		new OutputStreamWriter(System.out));
	private static int n, m, k;
	private static int[][] table;
	private static final int MOD = 1000000007;
	private static long[][][][] state;
	private static long dfs(int i, int j, int num, int max)
	{
		if (state[i][j][num][max] != -1)
			return state[i][j][num][max];
		long currentAns = 0;
		if (i == n - 1 && j == m - 1)
		{
	if (num == k || max < table[i][j] && num + 1 == k)
				currentAns++;
			state[i][j][num][max] = currentAns;
			return currentAns;
		}
		if (i + 1 < n)
		{
			currentAns += dfs(i + 1, j, num, max);
			if (max < table[i][j] && num + 1 <= k)
		currentAns += dfs(i + 1, j, num + 1, table[i][j]);
		}
		if (j + 1 < m)
		{
			currentAns += dfs(i, j + 1, num, max);
			if (max < table[i][j] && num + 1 <= k)
		currentAns += dfs(i, j + 1, num + 1, table[i][j]);
		}
		state[i][j][num][max] = currentAns;
		return currentAns;
	}
	public static void main(String[] args) throws Exception
	{
		tokenizer.nextToken();
		n = (int) tokenizer.nval;
		tokenizer.nextToken();
		m = (int) tokenizer.nval;
		tokenizer.nextToken();
		k = (int) tokenizer.nval;

		table = new int[n][m];
		state = new long[n][m][k + 1][14];

		for (int i = 0; i < n; i++)
			for (int j = 0; j < m; j++)
				for (int t = 0; t <= k; t++)
					Arrays.fill(state[i][j][t], -1);

		for (int i = 0; i < n; i++)
			for (int j = 0; j < m; j++)
			{
				tokenizer.nextToken();
				table[i][j] = (int) tokenizer.nval;
				table[i][j]++;
			}

		long ret = dfs(0, 0, 0, 0);

		outWriter.println(ret % MOD);
		outWriter.flush();
	}
}

😜斐波那契

问题描述
  斐波那契数列大家都非常熟悉。它的定义是:

f(x) = 1 … (x=1,2)
  f(x) = f(x-1) + f(x-2) … (x>2)

对于给定的整数 n 和 m,我们希望求出:
  f(1) + f(2) + … + f(n) 的值。但这个值可能非常大,所以我们把它对 f(m) 取模。
  公式如下图
但这个数字依然很大,所以需要再对 p 求模。
输入格式
  输入为一行用空格分开的整数 n m p (0 < n, m, p < 10^18)
输出格式
  输出为1个整数,表示答案
样例输入
2 3 5
样例输出
0
样例输入
15 11 29
样例输出
25
在这里插入图片描述

import java.math.BigInteger;
import java.util.Scanner;
public class Main{
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		long n,m;
		n=sc.nextLong();
		m=sc.nextLong();
		BigInteger p=sc.nextBigInteger(),fn,fm;
		if(n+2>m)
		{
			fm=think(m,null);
	fn=think(n+2,fm).subtract(new BigInteger("1"));
	System.out.println(fn.remainder(fm).remainder(p));
		}
		else
		{
	fn=think(n+2,p).subtract(new BigInteger("1"));
			System.out.println(fn.remainder(p));
		}
	}

	private static BigInteger think(long m,BigInteger mod) {
		// TODO Auto-generated method stub
		BigInteger a1=new BigInteger("1"),a2=new BigInteger("1"),x[][];
		if(m==1)return a1;
		else if(m==2)return a2;
		else
		{
			x=new BigInteger[2][2];
			x[0][0]=new BigInteger("1");
			x[0][1]=new BigInteger("1");
			x[1][0]=new BigInteger("1");
			x[1][1]=new BigInteger("0");
			x=doublex(x,m-2,mod);
			return x[0][0].add(x[0][1]);
		}
	}

	private static BigInteger[][] doublex(BigInteger[][] x, long n,BigInteger mod) {
		// TODO Auto-generated method stub
		BigInteger x2[][];
		x2=new BigInteger[2][2];
		if(n==1)return x;
		else
		{
			if(n%2==1)return cheng(doublex(cheng(x,x,mod),n/2,mod),x,mod);
			else return doublex(cheng(x,x,mod),n/2,mod);
		}
	}

	private static BigInteger[][] cheng(BigInteger[][] x, BigInteger[][] y,BigInteger mod) {
		// TODO Auto-generated method stub
		BigInteger z[][];
		z=new BigInteger[2][2];
		if(mod!=null)
		{
			z[0][0]=x[0][0].multiply(y[0][0]).add(x[1][0].multiply(y[0][1])).remainder(mod);
	z[0][1]=x[0][0].multiply(y[0][1]).add(x[0][1].multiply(y[1][1])).remainder(mod);
	z[1][0]=x[1][0].multiply(y[0][0]).add(x[1][1].multiply(y[1][0])).remainder(mod);
	z[1][1]=x[1][0].multiply(y[0][1]).add(x[1][1].multiply(y[1][1])).remainder(mod);
			return z;
		}
	z[0][0]=x[0][0].multiply(y[0][0]).add(x[1][0].multiply(y[0][1]));
	z[0][1]=x[0][0].multiply(y[0][1]).add(x[0][1].multiply(y[1][1]));
	z[1][0]=x[1][0].multiply(y[0][0]).add(x[1][1].multiply(y[1][0]));
	z[1][1]=x[1][0].multiply(y[0][1]).add(x[1][1].multiply(y[1][1]));
		return z;
	}
}

😜波动数列

问题描述
  观察这个数列:
  1 3 0 2 -1 1 -2 …
  这个数列中后一项总是比前一项增加2或者减少3。
  栋栋对这种数列很好奇,他想知道长度为 n 和为 s 而且后一项总是比前一项增加a或者减少b的整数数列可能有多少种呢?
输入格式
  输入的第一行包含四个整数 n s a b,含义如前面说述。
输出格式
  输出一行,包含一个整数,表示满足条件的方案数。由于这个数很大,请输出方案数除以100000007的余数。
样例输入
4 10 2 3
样例输出
2
样例说明
  这两个数列分别是2 4 1 3和7 4 1 -2。
数据规模和约定
  对于10%的数据,1<=n<=5,0<=s<=5,1<=a,b<=5;
  对于30%的数据,1<=n<=30,0<=s<=30,1<=a,b<=30;
  对于50%的数据,1<=n<=50,0<=s<=50,1<=a,b<=50;
  对于70%的数据,1<=n<=100,0<=s<=500,1<=a, b<=50;
  对于100%的数据,1<=n<=1000,-1,000,000,000<=s<=1,000,000,000,1<=a, b<=1,000,000。

public class Main {
	public static void main(String[] args) {
		int mod = 100000007;
		int n, s, a, b, i, j, t;
		int x[][] = new int[1001][1001];
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt();
		s = sc.nextInt();
		a = sc.nextInt();
		b = sc.nextInt();
		b %= n;
		b *= -1;
		while (b < 0)
			b += n;
		a %= n;
		s %= n;
		while (s < 0)
			s += n;
		for (i = 0; i < n; i++)
			for (j = 0; j < n; j++)
				x[i][j] = 0;
		x[1][a] = x[1][b] = 1;
		for (i = 1; i < n - 1; i++)
			for (j = 0; j < n; j++) {
				t = (j + a * (i + 1)) % n;
				x[i + 1][t] += x[i][j];
				x[i + 1][t] %= mod;
				t = (j + b * (i + 1)) % n;
				t %= n;
				x[i + 1][t] += x[i][j];
				x[i + 1][t] %= mod;
			}
		System.out.printf("%d\n", x[n - 1][s]);
	}
}

😜小朋友排队

问题描述
  n 个小朋友站成一排。现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。

每个小朋友都有一个不高兴的程度。开始的时候,所有小朋友的不高兴程度都是0。
  如果某个小朋友第一次被要求交换,则他的不高兴程度增加1,如果第二次要求他交换,则他的不高兴程度增加2(即不高兴程度为3),依次类推。当要求某个小朋友第k次交换时,他的不高兴程度增加k。
  请问,要让所有小朋友按从低到高排队,他们的不高兴程度之和最小是多少。

如果有两个小朋友身高一样,则他们谁站在谁前面是没有关系的。
输入格式
输入的第一行包含一个整数n,表示小朋友的个数。
  第二行包含 n 个整数 H1 H2 … Hn,分别表示每个小朋友的身高。
输出格式
  输出一行,包含一个整数,表示小朋友的不高兴程度和的最小值。
样例输入
3
3 2 1
样例输出
9
样例说明
  首先交换身高为3和2的小朋友,再交换身高为3和1的小朋友,再交换身高为2和1的小朋友,每个小朋友的不高兴程度都是3,总和为9。
数据规模和约定
  对于10%的数据, 1<=n<=10;
  对于30%的数据, 1<=n<=1000;
  对于50%的数据, 1<=n<=10000;
  对于100%的数据,1<=n<=100000,0<=Hi<=1000000。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main{
	static int N = 100010;
	static int MAX = 1000100;
	static int[] C = new int[MAX];
	static int[] S = new int[MAX];
	static int[] b = new int[N];
	static long[] total = new long[N];
	static long ans;
	static int[] num = new int[N];
	static int T, s, t, i, j;

	static int Lowbit(int x) {
		return x & (-x);
	}

	static void add(int pos, int num, int[] P) {
		while (pos <= MAX) {
			P[pos] += num;
			pos += Lowbit(pos);
		}
	}

	static int Sum(int end, int[] P) {
		int cnt = 0;
		while (end > 0) {
			cnt += P[end];
			end -= Lowbit(end);
		}
		return cnt;
	}

	static void init() {
		total[0] = 0;
		for (int i = 1; i < N; ++i) {
			total[i] = total[i - 1] + i;
		}
	}
	public static void main(String[] args) throws IOException {
		init();
		BufferedReader buf = new BufferedReader(
				new InputStreamReader(System.in));
		T = Integer.parseInt(buf.readLine());
		String[] str = buf.readLine().split(" ");
		for (int j = 0; j < T; j++) {
			num[j] = Integer.parseInt(str[j]);
			add(num[j] + 1, 1, C);
			b[j] = j - Sum(num[j], C);
										
			b[j] -= Sum(num[j] + 1, C) - Sum(num[j], C) - 1;

		}
		ans = 0;
		for (int j = T - 1; j > -1; --j) {
			add(num[j] + 1, 1, S);
			b[j] += Sum(num[j], S);
			ans += total[b[j]];
		}
		System.out.println(ans);
	}
}

👉其他

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

温馨提示点击下方卡片获取更多意想不到的资源。
空名先生

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

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

相关文章

MySQL相关知识点

这里写目录标题 MySQL简介概述配置安装连接&#xff08;企业级&#xff09;数据模型sql语句简介语法分类 数据库设计DDL&#xff08;SQL语句&#xff09;数据库操作idea集成mysql开发图形化工具&#xff08;直接在空java项目里打开mysql数据库&#xff09; 表&#xff08;对表的…

ASEMI代理ST可控硅BTA41封装,BTA41图片

编辑-Z BTA41参数描述&#xff1a; 型号&#xff1a;BTA41 封装&#xff1a;TO-3P RMS导通电流IT(RMS)&#xff1a;40A 非重复浪涌峰值导通电流ITSM&#xff1a;420A 峰值栅极电流IGM&#xff1a;8A 平均栅极功耗PG&#xff1a;1W 存储接点温度范围Tstg&#xff1a;-40…

kubelete源码阅读

kubelet 是运行在每个节点上的主要的“节点代理”&#xff0c;每个节点都会启动 kubelet进程&#xff0c;用来处理 Master 节点下发到本节点的任务&#xff0c;按照 PodSpec 描述来管理Pod 和其中的容器&#xff08;PodSpec 是用来描述一个 pod 的 YAML 或者 JSON 对象&#xf…

ATTCK(四)之ATTCK矩阵战术技术(TTP)逻辑和使用

ATT&CK矩阵战术&技术&#xff08;TTP&#xff09;逻辑和使用 ATT&CK的战术与技术组织结构 ATT&CK矩阵中的所有战术和技术&#xff0c;都可以通过以下链接进行目录结构式的浏览https://attack.mitre.org/techniques/enterprise/&#xff0c;也可以在矩阵里直接…

arcgis栅格影像--镶嵌

1、打开软件导入数据&#xff0c;如下&#xff1a; 2、在搜索栏中搜索“镶嵌至新栅格”&#xff0c;如下&#xff1a; 3、双击打开镶嵌对话框&#xff0c;如下&#xff1a; 4、点击确定按钮&#xff0c;进行栅格镶嵌&#xff0c;镶嵌结果如下&#xff1a; 5、去除黑边&#xff…

若依框架-前端使用教程

1 使用 npm run dev 命令执行本机开发测试时&#xff0c;提出错误信息如下&#xff1a; opensslErrorStack: [ error:03000086:digital envelope routines::initialization error ], library: digital envelope routines, reason: unsupported, code: ERR_OSSL_EVP_UNS…

Web安全——PHP基础

PHP基础 一、PHP简述二、基本语法格式三、数据类型、常量以及字符串四、运算符五、控制语句1、条件控制语句2、循环控制语句 六、php数组1、数组的声明2、数组的操作2.1 数组的合拼2.2 填加数组元素2.3 添加到指定位置2.4 删除某一个元素2.5 unset 销毁指定的元素2.6 修改数组中…

Tune-A-Video:用于文本到视频生成的图像扩散模型的One-shot Tuning

Tune-A-Video: One-Shot Tuning of Image Diffusion Models for Text-to-Video Generation Project&#xff1a;https://tuneavideo.github.io 原文链接&#xff1a;Tnue-A-Video:用于文本到视频生成的图像扩散模型的One-shot Tuning &#xff08;by 小样本视觉与智能前沿&…

基于matlab使用校准相机测量平面物体(附源码)

一、前言 此示例演示如何使用单个校准相机以世界单位测量硬币的直径。 此示例演示如何校准相机&#xff0c;然后使用它来测量平面对象&#xff08;如硬币&#xff09;的大小。这种方法的一个示例应用是测量传送带上的零件以进行质量控制。 二、校准相机 相机校准是估计镜头…

基于多站点集中汇聚需求的远程调用直播视频汇聚平台解决方案

一、行业背景 随着视频汇聚需求的不断提升&#xff0c;智慧校园、智慧园区等项目中需要将各分支机构的视频统一汇聚到总部&#xff0c;进行统一管控&#xff0c;要满足在监控内部局域网、互联网、VPN网络等TCP/IP环境下&#xff0c;为用户提供低成本、高扩展、强兼容、高性能的…

ModaHub魔搭社区:如何基于向量数据库+LLM(大语言模型),打造更懂你的企业专属Chatbot?

目录 1、为什么Chatbot需要大语言模型向量数据库? 2、什么是向量数据库? 3、LLM大语言模型ADB-PG:打造企业专属Chatbot 4、ADB-PG:内置向量检索全文检索的一站式企业知识数据库 5、总结 1、为什么Chatbot需要大语言模型向量数据库? 这个春天,最让人震感的科技产品莫过…

6.28作业

作业1 结构体不能被继承&#xff0c;类可以被继承结构体默认的都是公共&#xff0c;类默认是私有的 转载【结构体和类的区别】 结构体是值类型&#xff0c;类是引用类型 结构体存在栈中&#xff0c;类存在堆中 结构体成员不能使用protected访问修饰符&#xff0c;而类可以 结…

vsCode 运行 报错信息 yarn : 无法加载文件 C:\Program Files\nodejs\yarn.ps1

检索说是 PowerShell 执行策略&#xff0c;默认设置是Restricted不去加载配置文件或运行脚本。需要去做相应的变更&#xff0c; 修改配置为 RemoteSigned 管理员身份打开 PowerShell&#xff0c;执行命令&#xff0c;修改PowerShell 执行策略 set-ExecutionPolicy RemoteSigne…

2023.6.28

类和结构体区别&#xff1a; 1&#xff0c;类可以进行封装&#xff08;有访问权限等&#xff09;&#xff0c;结构体无&#xff1b; 2&#xff0c;类有&#xff1a;封装&#xff0c;继承&#xff0c;多态三大特征&#xff0c;结构体只有变量和函数。 #include <iostream&g…

面试题小计(1)

Https加密过程、与三次握手 三次握手是传输层的概念&#xff0c;HTTPS通常是 SSL HTTP 的简称&#xff0c;目前使用的 HTTP/HTTPS 协议是基于 TCP 协议之上的&#xff0c;因此也需要三次握手。要在 TCP 三次握手建立链接之后&#xff0c;才会进行 SSL 握手的过程&#xff08;…

Linux在线升级JDK版本(不用去官网下载安装包)

Linux在线升级JDK版本 ​ 只要3个命令 确保系统已连接到互联网&#xff1a;确保你的 Linux 系统已连接到互联网&#xff0c;以便下载和安装新的 JDK 版本。 更新软件包管理器&#xff1a;运行以下命令来更新系统的软件包管理器&#xff08;在不同的 Linux 发行版中&#xff0…

(3)深度学习学习笔记-简单线性模型

文章目录 一、线性模型二、实例1.pytorch求导功能2.简单线性模型&#xff08;人工数据集&#xff09; 来源 一、线性模型 一个简单模型&#xff1a;假设一个房子的价格由卧室、卫生间、居住面积决定&#xff0c;用x1&#xff0c;x2&#xff0c;x3表示。 那么房价y就可以认为yw…

大数据分析与机器学习的结合:实现智能决策

章节一&#xff1a;引言 在当今数字化时代&#xff0c;大数据分析和机器学习已经成为推动技术创新和业务发展的关键要素。大数据的快速增长和复杂性使得传统的数据处理方法变得不再有效。而机器学习作为一种自动化的数据分析方法&#xff0c;能够从海量数据中挖掘出有价值的信…

QSS样式设置及语法规则

QSS&#xff08;Qt Style Sheets&#xff09;是Qt的一个功能强大的样式表语言。它类似于CSS&#xff08;Cascading Style Sheets&#xff09;&#xff0c;可以用于定义和控制应用程序的外观和样式。QSS可以应用于Qt部件&#xff08;Widgets&#xff09;和绘制元素&#xff0c;以…

集合专题----Map篇

1、Map 接口和常用方法 &#xff08;1&#xff09;Map 接口实现类的特点 ① Map与Collection并列存在&#xff08;即平行关系&#xff09;。Map用于保存具有映射关系的数据&#xff1a;Key-Value&#xff1b; ② Map 中的 key 和 value 可以是任何引用类型的数据&#xff0c;…