蓝桥杯真题Day44 倒计时10天 练了六道真题 !

[蓝桥杯 2020 省 B2] 平面切分

题目描述

平面上有 N 条直线, 其中第 i 条直线是 y=Ai​⋅x+Bi​ 。请计算这些直线将平面分成了几个部分。

输入格式

第一行包含一个整数 N。

以下 N 行, 每行包含两个整数 Ai​,Bi​。

输出格式

一个整数代表答案。

代码表示

#include<bits/stdc++.h>
#define PDD pair<long double,long double> 
using namespace std;
const int N = 1e3+5;//直线的最大数量 
int n,ans;
long double a[N],b[N];
bool vis[N];//标记第i条直线是否与其他直线重合
int main()
{cin>>n;for(int i = 1;i<=n;i++){cin>>a[i]>>b[i];set<PDD> s;//使用pair记录横坐标、纵坐标 s.clear();//清理集合 for (int j = 1;j<i;j++){if(vis[j])//与前面的直线重合,跳过 continue;if(a[i]==a[j]&&b[i]==b[j]){vis[i] = 1;//标记 break;}if(a[i]==a[j])//斜率一样,i平行与j,无交点continue;//算交点将其插入集合ss.insert({(b[i]-b[j])/(a[j]-a[i]),(a[j]*b[i]-a[i]*b[j])/(a[j]-a[i])});}if(!vis[i])//当第i条直线不与前面的直线重合时才统计 ans+=s.size()+1;}cout<<ans+1;//初始平面有一部分 return 0;
}

心得体会

如上图,先有 4根绿色的线,然后又来了一根黑色的线,与之前绿色的线共有 4个交点。将原来的 5个部分,一分为二,即又新增了 5个部分(分别是 1 , 2 , 3 , 4 , 5 )。

我们可以得出一个结论:如果新来的一条直线 与 已有的直线有 t个交点,那么就会增加 t + 1 个部分。

1、首先,定义了一个常量N表示直线的最大数量,并声明了一些变量和数据结构,包括整数n表示直线的数量,整数ans表示答案,数组a和b分别用于存储直线的斜率和截距,以及一个布尔数组vis用于标记直线是否与其他直线重合。

2、通过输入读取N的值,然后使用for循环遍历每一条直线,从1到n。

3、在循环中,首先通过输入读取直线的斜率a[i]和截距b[i]。

4、创建一个空的集合s,用于存储交点的坐标。集合中的每个元素都是一个pair<long double, long double>,分别表示交点的x坐标和y坐标。

5、在内层循环中,使用for循环遍历之前的直线,从1到i-1。

1)如果vis[j]为true,表示直线j与之前的某条直线重合,跳过当前循环。

2)如果a[i]等于a[j]且b[i]等于b[j],表示直线i与直线j完全重合,将vis[i]标记为true,并跳出内层循环。

3)如果a[i]等于a[j],表示直线i与直线j平行,没有交点,跳过当前循环。

4)否则,计算直线i和直线j的交点坐标,并将交点插入集合s中。交点的x坐标为(b[i]-b[j])/(a[j]-a[i]),y坐标为(a[j]*b[i]-a[i]*b[j])/(a[j]-a[i])。

5、如果直线i不与之前的任何直线重合(即vis[i]为false),则统计集合s的大小,并将结果加到ans上


[蓝桥杯 2018 省 A] 航班时间

题目描述

小 h 前往美国参加了蓝桥杯国际赛。小 h 的女朋友发现小 h 上午十点出发,上午十二点到达美国,于是感叹到“现在飞机飞得真快,两小时就能到美国了”。

小 h 对超音速飞行感到十分恐惧。仔细观察后发现飞机的起降时间都是当地时间。由于北京和美国东部有 12小时时差,故飞机总共需要 14小时的飞行时间。

不久后小 h 的女朋友去中东交换。小 h 并不知道中东与北京的时差。但是小 h 得到了女朋友来回航班的起降时间。小 h 想知道女朋友的航班飞行时间是多少。

对于一个可能跨时区的航班,给定来回程的起降时间。假设飞机来回飞行时间相同,求飞机的飞行时间。

输入格式

从标准输入读入数据。一个输入包含多组数据。输入第一行为一个正整数 T,表示输入数据组数。

每组数据包含两行,第一行为去程的起降时间,第二行为回程的起降时间。起降时间的格式如下

h1:m1:s1 h2:m2:s2 或h1:m1:s1 h3:m3:s3 (+1) 或h1:m1:s1 h4:m4:s4 (+2)

表示该航班在当地时间 h1 时 m1 分 s1 秒起飞,

第一种格式表示在当地时间 当日 h2 时 m2 分 s2 秒降落

第二种格式表示在当地时间 次日 h3 时 m3 分 s3 秒降落。

第三种格式表示在当地时间 第三天 h4 时 m4 分 s4 秒降落。

对于此题目中的所有以 h:m:s 形式给出的时间, 保证(0≤h≤23,0≤m,s≤59).

输出格式

输出到标准输出。

对于每一组数据输出一行一个时间 hh:mm:ss,表示飞行时间为 hh 小时 mm 分 ss 秒。

注意,当时间为一位数时,要补齐前导零。如三小时四分五秒应写为 03:04:05

代码表示

#include<bits/stdc++.h>
using namespace std;int get()
{int h1,m1,s1,h2,m2,s2,d=0;scanf("%d:%d:%d %d:%d:%d",&h1,&m1,&s1,&h2,&m2,&s2);if(getchar()==' ')scanf("(+%d)",&d);return (d*86400+h2*3600+m2*60+s2)-(h1*3600+m1*60+s1);
}
int main()
{int T;scanf("%d",&T);while(T--){int ans=(get()+get())/2;printf("%02d:%02d:%02d\n",ans/3600,ans%3600/60,ans%60);}return 0;
}

思路提示

这道题的输入,输出,转换,都值得再看


[蓝桥杯 2015 省 A] 饮料换购

题目描述

乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊 C 型饮料,凭 3 个瓶盖可以再换一瓶 C 型饮料,并且可以一直循环下去(但不允许暂借或赊账)。

请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的 n 瓶饮料,最后他一共能喝到多少瓶饮料。

输入格式

一个整数 n,表示开始购买的饮料数量。(0<n<10000)

输出格式

一个整数,表示实际得到的饮料数。

心得体会

数学问题,重点在于整个循环,并且要更新n的值,一开始的问题是没有加上n取余的数余下的数下一次循环算的时候也应当算进去。

代码表示

#include<bits/stdc++.h>
using namespace std;int main()
{int n;cin>>n;int num=n;while(n>=3){num+=n/3;n=n/3+n%3;}cout<<num;return 0;
}

[蓝桥杯 2020 省 AB1] 走方格

题目描述

在平面上有一些二维的点阵。这些点的编号就像二维数组的编号一样,从上到下依次为第 1至第 n 行,从左到右依次为第 1至第 m 列,每一个点可以用行号和列号来表示。

现在有个人站在第 1行第 1列,要走到第 n 行第 m 列。只能向右或者向下走。

注意,如果行号和列数都是偶数,不能走入这一格中

问有多少种方案。

输入格式

输入一行包含两个整数 n,m。

输出格式

输出一个整数,表示答案。

代码表示

#include <bits/stdc++.h>
using namespace std;int uniquePaths(int m, int n) {vector<vector<int> > dp(m, vector<int>(n, 0));for (int i = 0; i < m; i++) dp[i][0] = 1;for (int j = 0; j < n; j++) dp[0][j] = 1;for (int i = 1; i < m; i++){for (int j = 1; j < n; j++){if((i-1)%2!=0||(j-1)%2!=0)dp[i][j] = dp[i - 1][j] + dp[i][j - 1];}}return dp[m - 1][n - 1];
}int main() {int m,n;cin>>m>>n;cout<<uniquePaths(m,n);return 0;
}

心得体会

这道题就是在Day42中的不同路径Ⅰ的改版!!!就加了一个判断是不是偶数格。

所以动规的题还是要好好练习!!


[蓝桥杯 2020 省 AB3] 乘法表

题目描述

九九乘法表是学习乘法时必须要掌握的。在不同进制数下,需要不同的乘法表。

例如, 四进制下的乘法表如下所示:

1*1=1
2*1=2 2*2=10
3*1=3 3*2=12 3*3=21

请注意,乘法表中两个数相乘的顺序必须为样例中所示的顺序,不能随意交换两个乘数。

给定 P,请输出 P 进制下的乘法表。

输入格式

输入一个整数 P。

输出格式

输出 P 进制下的乘法表。P 进制中大于等于 10 的数字用大写字母 ABC、⋯⋯ 表示。

代码表示

#include <bits/stdc++.h>
using namespace std;int main() {int n,k;cin>>n;for(int i=1;i<n;++i){for(int j=1;j<=i;++j){if((i*j)/n==0){cout<<i<<"*"<<j<<"="<<(i*j)%n<<" ";}else{cout<<i<<"*"<<j<<"="<<(i*j)/n<<(i*j)%n<<" ";}}cout<<"\n";}return 0;
}

心得体会

但只有30分,明明测试点都可以,但就是不行

这是满分答案:

#include<bits/stdc++.h>
using namespace std;
int n;
string jz(int x, int y)//把x转换为y进制
{string now, ret;while (x > 0){int add = x % y; // 记录余数if (add >= 10) // 余数大于等于10的要变为字母now += add - 10 + 'A'; // 余数加上 'A'的ASCII值减去10将其转换为字母elsenow += add + '0'; // 余数加上 '0'的ASCII将其转换为数字字符x /= y; // 将 x 除以 y,继续处理下一位}int len = now.size(); // 获取转换后的字符串长度for (int i = 0; i <= len / 2; i++) // 倒着存储转换后的字符串ret += now[len - i - 1];return ret; // 返回转换后的结果
}int main()
{cin>>n;for(int i = 1;i<n;i++){for(int j = 1;j<=i;j++){cout<<jz(i,n)<<'*'<<jz(j,n)<<'='<<jz(i*j,n)<<' ';//记得转换进制}cout<<'\n';}return 0;
}

[蓝桥杯 2018 省 AB] 全球变暖

题目描述

你有一张某海域N×N 像素的照片,. 表示海洋、 # 表示陆地,如下所示:

.......
.##....
.##....
....##.
..####.
...###.
.......

其中 "上下左右" 四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有 2座岛屿。由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。

例如上图中的海域未来会变成如下样子:

.......
.......
.......
.......
....#..
.......
.......

请你计算:依照科学家的预测,照片中有多少岛屿会被完全淹没。

输入格式

第一行包含一个整数 N。(1≤N≤1000)。

以下 N 行 N 列代表一张海域照片。

照片保证第 1 行、第 1 列、第 N 行、第 N 列的像素都是海洋。

输出格式

一个整数表示答案。

代码表示

#include<bits/stdc++.h>
using namespace std;
//dx 和 dy 是用来表示四个方向的数组,mp是地图 
//t 是一个标志变量 cnt 是用于计数的变量,sum 是岛屿的总数量,ans 是没被淹没的岛屿数量
int n,cnt,sum,ans,t,dx[]={0,1,0,-1},dy[]={1,0,-1,0};
char mp[1010][1010];
void dfs(int x,int y)//深度优先遍历 
{if(!t)//如果为 0,则表示当前陆地像素与海洋相邻//一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),就会被淹没。{cnt=0;for(int i=0;i<4;i++)//遍历四个相邻像素if(mp[x+dx[i]][y+dy[i]]!='.') 	cnt++;if(cnt==4)//岛屿上的一个点四周无海洋ans++,t=1;//这个岛屿不会被淹没}mp[x][y]='*';//标记已经访问过for(int i=0;i<4;i++){//判断相邻位置是否越界或者不是陆地(#)int xx=x+dx[i],yy=y+dy[i];if(xx<0||xx>=n||yy<0||yy>=n||mp[xx][yy]!='#') continue;//跳过当前循环dfs(xx,yy);//递归调用 dfs 函数,继续搜索下一个位置}
}
int main()
{cin>>n;
//通过两个嵌套的循环读取岛屿的地图,并将其存储在 mp 数组中for(int i=0;i<n;i++)for(int j=0;j<n;j++)cin>>mp[i][j];//遍历 mp 数组中除去边界的位置,如果当前位置是陆地(#),则增加 sum 的值
//并将 t 的值设为 0,然后调用 dfs 函数for(int i=1;i<n-1;i++)for(int j=1;j<n-1;j++)if(mp[i][j]=='#'){sum++;t=0;dfs(i,j);}cout<<sum-ans;//岛屿总数量-没被淹没的岛屿
}

心得体会

这段代码的中心思想是通过深度优先搜索(DFS)来统计岛屿的数量,并计算没有被淹没的岛屿数量。

算法步骤如下:

1、读取岛屿的大小 n 和岛屿的地图,将地图存储在字符数组 mp 中。

2、遍历 mp 数组中除去边界的位置,对于每个位置,如果是陆地(#),则进行以下操作:

1)增加岛屿的总数量 sum

2)将标志变量 t 的值设为 0。

3)调用深度优先搜索函数 dfs,对当前位置进行搜索。

3、在 dfs 函数中,首先判断当前陆地像素点是否与海洋相邻,如果相邻,则判断当前位置是否会被淹没:

1)通过遍历当前位置的四个相邻像素,计算相邻海洋的数量。如果数量为 4,表示该岛屿的一个点四周都没有海洋,那么这个岛屿不会被淹没,增加没被淹没的岛屿数量 ans,将 t 的值设为 1。

2)将当前位置的 mp 数组值标记为 *,表示已经访问过。

3)继续递归调用 dfs 函数,对当前位置的四个相邻位置进行搜索。

4、最后,输出岛屿的总数量减去没有被淹没的岛屿数量,即 sum - ans

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

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

相关文章

RESTful规范总结

概念&#xff1a;RESTful&#xff08;Representational State Transfer 的缩写&#xff09;是一种广泛使用的API架构风格。 1.资源&#xff1a;在REST API的设计中&#xff0c;首先需要面向资源建模&#xff0c;其中每个节点是是一个简单资源或集合资源。 1.1一个集合包含相同…

深入理解ThreadLocal原理

目录 1- 什么是ThreadLocal &#xff1f;2- ThreadLocal的作用&#xff1f;ThreadLocal实现线程间资源隔离ThreadLocal实现线程内资源共享 3- ThreadLocal 原理3-1 ThreadLocalMap3-2 ThreadLocalMap的扩容&#x1f511;1. 为什么会发生扩容&#xff1f;&#x1f511;2. Thread…

开源AGV调度系统OpenTCS中的任务分派器(dispatcher)详解

OpenTCS中的任务分派器dispatcher详解 1. 引言2. 任务分派器(dispatcher)2.1 默认的停车位置选择2.2 可选停车位置属性2.3 默认的充电位置选择2.4 即时运输订单分配 3. 默认任务分派器的配置项4. 参考资料与源码 1. 引言 openTCS是一项著名的开源运输控制系统&#xff0c;我在…

CSS面试题---基础

1、css选择器及优先级 选择器优先级&#xff1a;内联样式>id选择器>类选择器、属性选择器、伪类选择器>标签选择器、微元素选择器 注意&#xff1a; !important优先级最高&#xff1b; 如果优先级相同&#xff0c;则最后出现的样式生效&#xff1b; 继承得到的样式优先…

【PowerDesigner】PGSQL反向工程过程已中断

问题 反向工程过程已中断,原因是某些字符无法通过ANSI–&#xff1e;UTF-16转换进行映射。pg导入sql时报错&#xff0c;一查询是power designer 反向工程过程已中断&#xff0c;某些字符无法通过ANSI–>UTF-16转换进行映射&#xff08;会导致数据丢失&#xff09; 处理 注…

Java基础习题练习

1、编写程序&#xff0c;判断给定的某个年份是否是闰年。 闰年的判断规则如下&#xff1a; &#xff08;1&#xff09;若某个年份能被4整除但不能被100整除&#xff0c;则是闰年。 &#xff08;2&#xff09;若某个年份能被400整除&#xff0c;则也是闰年。 /*** 1&#xff0c…

代码随想录第28天 | 93.复原IP地址 、 78.子集 、 90.子集II

一、前言&#xff1a; 参考文献&#xff1a;代码随想录 今天的主题内容是回溯算法&#xff0c;这一章的干货很多&#xff0c;我需要慢慢的品味&#xff0c;不单单只是表象&#xff0c;还需要研究深层原理。 二、复原IP地址 1、思路&#xff1a; &#xff08;1&#xff09;…

通义灵码智能编程助手

通义灵码是阿里云出品的一款基于通义大模型的智能编码辅助工具&#xff0c;提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研发智能问答、异常报错排查等能力&#xff0c;并针对阿里云 SDK/OpenAPI 的使用场景调优&#xff0c;助力开发者…

Git命令(1)[删除,恢复与移动]

文章目录 1.删除文件1.1命令----rm <filename>1.2命令----git rm <filename>1.1命令----git rm <filename> -f 2.恢复文件2.1命令----git restore <filename>2.1命令----git restore --staged <filename> 3.重命名文件3.1命令----mv <oldFile…

网络编程详解(select poll epoll reactor)

1. 客户端服务器建立连接过程 1.1 编写一个server的步骤是怎么样的&#xff1f; int main(){int listenfd, connfd;pid_t childpid;socklen_t clilen;struct sockaddr_in cliaddr, servaddr;listenfd socket(AF_INET, SOCK_STREAM, 0);bzero(&servaddr, sizeof(servaddr…

12313124

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

中科驭数超低时延网络解决方案入选2023年度金融信创优秀解决方案

近日&#xff0c;由中国人民银行领导、中国金融电子化集团有限公司牵头组建的金融信创生态实验室发布「2023年度第三期金融信创优秀解决方案」&#xff0c;中科驭数超低时延网络解决方案从众多方案中脱颖而出&#xff0c;成功入选&#xff0c;代表了该方案的技术创新和金融实践…