备战蓝桥杯 Day5

news2024/11/25 22:48:36

1191:流感传染

【题目描述】

有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着。在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已经得病的不变),空房间不会传染。请输出第m天得流感的人数。

【输入】

第一行一个数字n,n不超过100,表示有n*n的宿舍房间。

接下来的n行,每行n个字符,’.’表示第一天该房间住着健康的人,’#’表示该房间空着,’@’表示第一天该房间住着得流感的人。

接下来的一行是一个整数m,m不超过100。

【输出】

输出第m天,得流感的人数。

【输入样例】

5
....#
.#.@.
.#@..
#....
.....
4

【输出样例】

16
#include<iostream>
using namespace std;
const int N = 1e2 + 10;
char a[N][N];//房间数组
int dx[] = { 0,0,1,-1 };
int dy[] = { 1,-1,0,0 };
bool vis[N][N];//标记当天生病的
int main()
{
	int n; cin >> n;
    //存储房间
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= n; j++)
		{
			cin >> a[i][j];
		}
	}
    //记录生病的人数
	int cnt=0;
	int m;
	cin >> m;
	//开始感染
	for (int day = 2; day <= m; day++)
	{
		memset(vis,0,sizeof vis);
		for (int i = 1; i <= n; i++)
		{
			for (int j = 1; j <= n; j++)
			{
				if (a[i][j] == '@'&&!vis[i][j]) 
				{
					//遍历所有可能感染的方向
					for (int k = 0; k < 4; k++)
					{
						int bx = i + dx[k], by = j + dy[k];
						//超出房间的边界
						if (i<1 || i>n || j<1 || j>n)continue;
						if (a[bx][by] == '.') 
						{
							a[bx][by] = '@';
							//标记当天被感染的
							vis[bx][by] = 1;
						}
							
					}
				}
				
			}
		}
	}
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= n; j++)
		{
			if (a[i][j] == '@')
				cnt++;
		}
	}
	cout << cnt;
	return 0;
}

1314:【例3.6】过河卒(Noip2002)

【题目描述】

棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上的某一点有一个对方的马(如C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点,如图3-1中的C点和P1,……,P8,卒不能通过对方马的控制点。棋盘用坐标表示,A点(0,0)、B点(n, m) (n,m为不超过20的整数),同样马的位置坐标是需要给出的,C≠A且C≠B。现在要求你计算出卒从A点能够到达B点的路径的条数

【输入】

给出n、m和C点的坐标。

【输出】

从A点能够到达B点的路径的条数。

【输入样例】

8 6 0 4

【输出样例】

1617
#include<iostream>
using namespace std;
#define int long long
const int N = 1e2 + 10;
int a[N][N];
//马可走的八个方向
int dx[] = {1,1,-1,-1,2,2,-2,-2};
int dy[] = {2,-2,2,-2,1,-1,1,-1};
bool vis[N][N];//马运动的轨迹
/*
//边界
a[i][j]=1
//递推关系式
a[i][j]=a[i-1][j]+a[i][j-1]
*/
signed main()
{
	int tx, ty;//B点坐标
	int cx, cy;//C点坐标
	cin >> tx >> ty >> cx >> cy;
	vis[cx][cy] = 1;//标记马
	//马运动的轨迹
	for (int i = 0; i < 8; i++)
	{
		int cxx = cx + dx[i], cyy = cy + dy[i];
		//如果新生成的坐标越界,则跳过,继续生成下一个坐标
		if (cxx<0 || cxx>tx || cyy<0 || cyy>ty)continue;//0也是边界
		vis[cxx][cyy] = 1;
	}
	//边界
	a[0][0] = 1;
	//处理第一行
	for (int j = 1; j <= ty; j++)
	{
		if (!vis[0][j])
			a[0][j] = a[0][j - 1];
		else
			a[0][j] = 0;
	}
	//处理第一列
	for (int i = 1; i <= tx; i++)
	{
		if (!vis[i][0])
			a[i][0] = a[i - 1][0];
		else
			a[i][0] = 0;
	}
	//递推
	for (int i = 1; i <= tx; i++)
	{
		for (int j = 1; j <= ty; j++)
		{
			if (!vis[i][j])
				a[i][j] = a[i - 1][j] + a[i][j - 1];
			else
				a[i][j] = 0;
		}
	}
	cout << a[tx][ty] << endl;
	return 0;
}

1194:移动路线

【题目描述】

X桌子上有一个m行n列的方格矩阵,将每个方格用坐标表示,行坐标从下到上依次递增,列坐标从左至右依次递增,左下角方格的坐标为(1,1),则右上角方格的坐标为(m,n)。

小明是个调皮的孩子,一天他捉来一只蚂蚁,不小心把蚂蚁的右脚弄伤了,于是蚂蚁只能向上或向右移动。小明把这只蚂蚁放在左下角的方格中,蚂蚁从

左下角的方格中移动到右上角的方格中,每步移动一个方格。蚂蚁始终在方格矩阵内移动,请计算出不同的移动路线的数目。

对于1行1列的方格矩阵,蚂蚁原地移动,移动路线数为1;对于1行2列(或2行1列)的方格矩阵,蚂蚁只需一次向右(或向上)移动,移动路线数也为1……对于一个2行3列的方格矩阵,如下图所示:

(2,1)(2,2)(2,3)
(1,1)(1,2)(1,3)

蚂蚁共有3种移动路线:

路线1:(1,1) → (1,2) → (1,3) → (2,3)

路线2:(1,1) → (1,2) → (2,2) → (2,3)

路线3:(1,1) → (2,1) → (2,2) → (2,3)

【输入】

输入只有一行,包括两个整数m和n(0 < m+n ≤ 20),代表方格矩阵的行数和列数,m、n之间用空格隔开。

【输出】

输出只有一行,为不同的移动路线的数目。

【输入样例】

2 3

【输出样例】

3

#include<iostream>
using namespace std;
#define int long long
const int N = 1e2 + 10;
int a[N][N];
signed main()
{
	int n, m;
	cin >> n >> m;
	//处理边界
	a[1][1] = 1;
	//处理第一行
	for (int j = 2; j <= m; j++)
		a[1][j] = a[1][j-1];
	//处理其余路线
	for (int i = 2; i <= n; i++)
		a[i][1] = a[i - 1][1];
	for (int i = 2; i <= n; i++)
		for (int j = 2; j <= m; j++)
			a[i][j] = a[i][j - 1] + a[i - 1][j];
	cout << a[n][m];
	return 0;
}


1196:踩方格

【题目描述】

有一个方格矩阵,矩阵边界在无穷远处。我们做如下假设:

a、每走一步时,只能从当前方格移动一格,走到某个相邻的方格上;

b、走过的格子立即塌陷无法再走第二次;

c、只能向北、东、西三个方向走;

请问:如果允许在方格矩阵上走n步,共有多少种不同的方案。2种走法只要有一步不一样,即被认为是不同的方案。

【输入】

允许在方格上行走的步数n(n≤20)。

【输出】

计算出的方案数量。

【输入样例】

2

【输出样例】

7

#include<iostream>
using namespace std;
#define int long long
const int N = 1e2 + 10;
int a[N][N];
int l[N], r[N], u[N];//向左 右 上 的方案总数
signed main()
{
	int n; cin >> n;
	l[1] = r[1] = u[1] = 1;
	/*
	若i-1步向左,那么第i部只能向上或者向左
	若i-1步向右,那么第i部只能向上或者向右
	若i-1步向上,那么第i部能向上或者向左或者向右
	*/
	int ans = 0;//记录方案数
	for (int i = 2; i <= n; i++)
	{
		l[i] = u[i - 1] + l[i - 1];
		r[i] = u[i - 1] + r[i - 1];
		u[i] = u[i - 1] + l[i - 1] + r[i - 1];
		ans = l[i] + r[i] + u[i];
	}
	cout << ans;
	return 0;
}

1313:【例3.5】位数问题

【题目描述】

在所有的N�位数中,有多少个数中有偶数个数字33?由于结果可能很大,你只需要输出这个答案对1234512345取余的值。

【输入】

读入一个数N(N≤1000)�(�≤1000)。

【输出】

输出有多少个数中有偶数个数字33。

【输入样例】

2

【输出样例】

73
#include<iostream>
using namespace std;
#define int long long
/*
1位数                   2位数                                          3位数                                         4位数

even[1]  odd[1]         even[2]               odd[2]                   even[3]               odd[3]                  even[4]               odd[4]
0          3         9*even[1]+odd[1]    9*odd[1]+even[1]           9*even[2]+odd[2]        9*odd[2]+even[2]       8*even[3]+odd[3]       8*odd[3]+even[3]
1
2
4
5
6
7
8
9
*/
const int N = 1e3 + 10, mod = 12345;
int even[N], odd[N];
signed main() {

	even[1] = 9;   odd[1] = 1;
	int n; cin >> n;
	int t = 9;
	for (int i = 2; i <= n; i++) {
		if (i == n) t = 8;//当走到最高位时,最高位不能为0,方案少一种变为8
		odd[i] = (t * odd[i - 1] % mod + even[i - 1] % mod) % mod;
		even[i] = (t * even[i - 1] % mod + odd[i - 1] % mod) % mod;
	}
	cout << even[n] << endl;
	return 0;
}

1201:菲波那契数列

【题目描述】

菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。

给出一个正整数a,要求菲波那契数列中第a个数是多少。

【输入】

第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a(1<=a<=20)。

【输出】

输出有n行,每行输出对应一个输入。输出应是一个正整数,为菲波那契数列中第a个数的大小。

【输入样例】

4
5
2
19
1

【输出样例】

5
1
4181
1
#include<iostream>
using namespace std;
const int N=1e2+10;
int fbnq(int x)
{
	if (x <= 2)return 1;
	return fbnq(x - 1) + fbnq(x - 2);
}
int main()
{
	int n; cin >> n;
	int x;
	while (n--)
	{
		cin >> x;
		cout << fbnq(x) << endl;;
	}
	return 0;
}

1202:Pell数列

【题目描述】

Pell数列a1,a2,a3,...�1,�2,�3,...的定义是这样的,a1=1,a2=2,...,an=2an−1+an−2(n>2)�1=1,�2=2,...,��=2��−1+��−2(�>2)。

给出一个正整数 k�,要求Pell数列的第 k� 项模上 3276732767 是多少。

【输入】

第1行是测试数据的组数 n�,后面跟着 n� 行输入。每组测试数据占 11 行,包括一个正整数k(1≤k<1000000)�(1≤�<1000000)。

【输出】

n� 行,每行输出对应一个输入。输出应是一个非负整数。

【输入样例】

2
1
8

【输出样例】

1
408

 

#include<iostream>
using namespace std;
const int N=1e6+10;
#define int long long
int m = 32767;
int a[N];
int pell(int x)
{
	//剪枝(求过的项不需要重复求)
	if (a[x])return a[x];
	if (x <= 2)return a[x]=x;
	return a[x]=(2 * pell(x - 1) % m + pell(x - 2) % m) % m;
}
signed main()
{
	int n; cin >> n;
	int x;
	while (n--)
	{
		cin >> x;
		cout << pell(x) << endl;;
	}
	return 0;
}

1204:爬楼梯

【题目描述】

树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数。

例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级,也可以第一次走两级,第二次走一级,一共3种方法。

【输入】

输入包含若干行,每行包含一个正整数N,代表楼梯级数,1≤N≤30。

【输出】

不同的走法数,每一行输入对应一行输出。

【输入样例】

5
8
10

【输出样例】

8
34
89
#include<iostream>
using namespace std;
const int N=1e2+10;
#define int long long
int a[N];
int stairs(int x)
{
	/*
	s(8) a[8]=s(7)+s(6)=34
	s(7) a[7]=s(6)+s(5)=21
	s(6) a[6]=s(5)+s(4)=13
	s(5) a[5]=s(4)+s(3)=8
	s(4) a[4]=s(3)+s(2)=5 
	s(3) a[3]=s(2)+s(1)=3 
	*/
	//剪枝
	if (a[x])return a[x];
	if (x <= 2)return a[x] = x;
	return a[x]=stairs(x - 1) + stairs(x - 2);
}
signed main()
{
	int x;
	while (cin >> x)
	{
		cout << stairs(x)<< endl;
	}
	return 0;
}

 

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

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

相关文章

用户空间与内核通信(一)

在Linux中&#xff0c;内核空间与用户空间是操作系统中的两个主要部分&#xff0c;它们有着明显的区别和不同的功能。 内核空间&#xff1a; 内核空间是操作系统内核运行的区域&#xff0c;它包括了操作系统内核代码、数据结构和设备驱动程序等。内核空间位于虚拟地址空间的最…

CleanMyMac X2024破解电脑版安装包下载

CleanMyMac X 4.14.6 是 CleanMyMac X 的一个具体版本号。这个版本可能包含了一些新的功能、改进和修复&#xff0c;以提高软件的性能和稳定性。以下是一些关于 CleanMyMac X 4.14.6 的特点和更新内容&#xff1a; 恶意软件保护&#xff1a;CleanMyMac X 4.14.6 继续加强其恶意…

SpringBoot源码解读与原理分析(五)SpringBoot的装配机制

文章目录 2.5 Spring Boot的装配机制2.5.1 ComponentScan2.5.1.1 ComponentScan的基本使用方法2.5.1.2 TypeExcludeFilter(类型排除过滤器)2.5.1.3 AutoConfigurationExcludeFilter(自动配置类排除过滤器) 2.5.2 SpringBootConfiguration2.5.3 EnableAutoConfiguration2.5.3.1 …

Shiro-05-5 分钟入门 shiro 安全框架实战笔记

序言 大家好&#xff0c;我是老马。 前面我们学习了 web 安全之 Spring Security 入门教程 这次我们来一起学习下另一款 java 安全框架 shiro。 什么是Apache Shiro&#xff1f; Apache Shiro是一个功能强大且易于使用的Java安全框架&#xff0c;它为开发人员提供了一种直…

【深度学习笔记】深度学习训练技巧——处理过拟合

处理过拟合 过拟合 定义&#xff1a;对训练集拟合得很好&#xff0c;但在验证集表现较差 神经网络 通常含有大量参数 (数百万甚至数十亿), 容易过拟合 处理策略&#xff1a;参数正则化、早停、随机失活、数据增强 早停 当发现训练损失逐渐下降&#xff0c;但验证集损失逐渐…

【项目管理】CMMI-项目监督和控制

项目监督和控制&#xff08;Monitoring and Control, MC&#xff09;的目的是通过周期性地跟踪项目计划的各种性能参数如工作产品的规模、工作量、成本、进度、风险等&#xff0c;不断地了解项目的进展情况&#xff0c;以便当项目实际进展状况显著偏离项目计划时能够及时采取纠…

Apache Flink连载(二十八):Flink细粒度资源管理(1)-适用场景和原理

🏡 个人主页:IT贫道-CSDN博客 🚩 私聊博主:私聊博主加WX好友,获取更多资料哦~ 🔔 博主个人B栈地址:豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录

Hack The Box-Office

端口扫描&信息收集 使用nmap对靶机进行扫描 nmap -sC -sV 10.10.11.3开放了80端口&#xff0c;并且注意到该ip对应的域名为office.htb&#xff0c;将其加入到hosts文件中访问之 注意到扫描出来的还有robots文件&#xff0c;经过尝试后只有administrator界面是可以访问的 …

程序员的自我修养笔记

导读 本书将详细描述现在流行的Windows和Linux操作系统下各自的可执行文件、 目标文件格式&#xff1b; 普通C/C程序代码如何被编译成目标文件及程序在目标文件中如何存储&#xff1b; 目标文件如何被链接器链接到一起&#xff0c; 并且形成可执行文件&#xff1b; 目标文件在…

大白话说说redux

redux的3个重要概念 store 就是用来存放应用的各种状态的action 就是用来描述应用发生了什么动作的&#xff0c;注意理解他是对动作的描述reducer 就是用来处理应用的动作&#xff0c;并且决定怎么去更新应用存放在store里面的状态。 redux的3个原则 应用的所有状态存储为re…

消息中间件之RocketMQ源码分析(十)

Namesrv启动流程 第一步:脚本和启动参数配置。 启动命令 nohup ./bin/mqnamesrv -c ./conf/namesrv.conf > dev/null 2>&1 & 通过脚本配置启动基本参数&#xff0c;比如配置文件路径、JVM参数&#xff0c;调用NamesrvStartup.main()方法&#xff0c;解析命令行的…

Vue24 收集表单数据 实例

实例 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>收集表单数据</title><script type"text/javascript" src"../js/vue.js"></script></head><body><!-- 收集…

Spring Security基础学习

一、SpringSecurity框架简介 二、SpringSecurity入门案例 三、SpringSecurity Web权限方案 四、SpringSecurity微服务权限方案 五、SpringSecurity原理总结

Eclipse - Expressions Add Watch Expression

Eclipse - Expressions & Add Watch Expression References Window -> Show View -> Other… Show View -> Debug -> Expressions -> Open Debug 模式下出现 Expressions 窗口 Debug 模式下&#xff0c;如果需要查看指定变量或者返回函数的值&#xff0c;直…

千分位分隔?一个vue指令搞定

说在前面 &#x1f388;对数字进行千分位分隔后展示应该是大部分同学都做过的功能了吧&#xff0c;常规的做法通常是编写一个工具函数来对数据进行转换&#xff0c;那么我们可不可以通过vue指令来实现这一功能呢&#xff1f; 效果展示 实现原理 非输入框 非输入框我们只需要对…

力扣题目训练(16)

2024年2月9日力扣题目训练 2024年2月9日力扣题目训练530. 二叉搜索树的最小绝对差541. 反转字符串 II543. 二叉树的直径238. 除自身以外数组的乘积240. 搜索二维矩阵 II124. 二叉树中的最大路径和 2024年2月9日力扣题目训练 2024年2月9日第十六天编程训练&#xff0c;今天主要…

【白嫖8k买的机构vip教程】python(2):python_re模块

python之re模块 一、正则表达式   re模块是python独有的匹配字符串的模块&#xff0c;该模块中提供的很多功能是基于正则表达式实现的&#xff0c;而正则表达式是对字符串进行模糊匹配&#xff0c;提取自己需要的字符串部分&#xff0c;他对所有的语言都通用。注意&#xf…

程序员必看的几部电影

目录 《我是谁&#xff1a;没有绝对安全的系统》 《模仿游戏》 《硅谷传奇》 《代码 The Code》 作为程序员&#xff0c;除了在工作中不断学习和提升技术外&#xff0c;适当地放松也是必不可少的 看电影可以是一个很好的放松方式&#xff0c;而对于程序员来说&#xff0c;…

GO框架基础 (一)、MySQL数据库

什么是数据库 数据库是一个组织化的数据集合&#xff0c;它被设计为方便存储、管理和检索数据。数据库通常以表格的形式组织数据&#xff0c;其中每一行代表一个数据记录&#xff0c;每一列代表一个数据字段。数据库系统提供了一种结构化的方法来存储和管理数据&#xff0c;以…

Android 基础技术——Binder 机制

笔者希望做一个系列&#xff0c;整理 Android 基础技术&#xff0c;本章是关于Binder 机制 什么是Binder 机制&#xff1a;Binder 是一种进程间通信机制 驱动&#xff1a;Binder 是一个虚拟物理设备驱动 应用层&#xff1a;Binder 是一个能发起通信的 Java 类 为什么要使用Bind…