hope实验室预备役第4次测试题解

目录

1.Foreign Exchange

2.Takahashi Gets Lost

3.Sasha and the Beautiful Array

4.Sasha and the Drawing

5.Sasha and the Casino

6.Only one of two

7.村村通

8.传送门


1.Foreign Exchange

 原题链接

Sample 1

InputcopyOutputcopy
4
5 7 0 3
2 2
4 3
5 2
5

Sample 2

InputcopyOutputcopy
10
32 6 46 9 37 8 33 14 31 5
5 5
3 1
4 3
2 2
3 2
3 2
4 4
3 3
3 1
45

这道题给出了有多少每国的货币,让我们求出最多可以拥有多少第n国的货币,又有第i国可以兑换第i+1国的货币的特性,我们直接将所有的第i国的货币换成i+1国的货币便可以求出第n国的货币。

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
long long n,a[200010];
int main()
{cin>>n;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n-1;i++){int in,out;cin>>in>>out;a[i+1]+=(a[i]/in)*out;//看看能换多少份}cout<<a[n]<<endl;return 0;
}

注意:需要long long类型,不然会爆int!

2.Takahashi Gets Lost

 原题链接

Sample 1

InputcopyOutputcopy
6 7 5
LULDR
#######
#...#.#
##...##
#.#...#
#...#.#
#######
2

Sample 2

InputcopyOutputcopy
13 16 9
ULURDLURD
################
##..##.#..####.#
###.#..#.....#.#
#..##..#####.###
#...#..#......##
###.##.#..#....#
##.#####....##.#
###.###.#.#.#..#
######.....##..#
#...#.#.######.#
##..###..#..#.##
#...#.#.#...#..#
################
6

按照给出的字符串(只含L,R,D,U),L为向左走一步,R为向右走一步,D为向下走一步,U为向上走一步。

我们可以遍历地图的每一个位置(这个位置本身要是陆地),看看执行字符串的操作会不会走到海洋,如果完成所以操作也没有走到海洋,那么此位置为一个可能落地位置,答案计数加1。

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,k,ans;
string mp[600],t;
int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};//下,上,右,左 
bool check(int x,int y)
{if(mp[x][y]=='#') return false;for(int i=0;i<k;i++){if(t[i]=='D')x+=dx[0],y+=dy[0];else if(t[i]=='U')x+=dx[1],y+=dy[1];else if(t[i]=='R')x+=dx[2],y+=dy[2];else x+=dx[3],y+=dy[3];if(mp[x][y]=='#')//若发现当前位置不合理,直接返回错误 return false;}return true;//这个位置可以完成操作 
}
int main()
{cin>>n>>m>>k>>t;for(int i=0;i<n;i++) cin>>mp[i];for(int i=1;i<n-1;i++){//因为四周固定都是海洋,所以从1到n-2(m-2)就行 for(int j=1;j<m-1;j++){if(check(i,j))ans++;}}cout<<ans<<endl;return 0;
}

3.Sasha and the Beautiful Array

原题链接

Sample 1

InputcopyOutputcopy
5
3
2 1 3
3
69 69 69
5
100 54 80 43 90
4
3 4 3 3
2
2 1
2
0
57
1
1

这道题没什么好讲的,直接排序,累加后一个元素减去前一个元素就是最大美丽度。

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
long long n,a[200];
int main()
{int t;cin>>t;while(t--){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}sort(a+1,a+1+n);long long ans=0;for(int i=2;i<=n;i++){ans+=(a[i]-a[i-1]);}cout<<ans<<endl;}return 0;
}

4.Sasha and the Drawing

原题链接

Sample 1

InputcopyOutputcopy
7
3 4
3 3
3 10
3 9
4 7
7 11
2 3
2
2
6
5
4
6
2

纯思路题,当然我也搞不懂原理,但是我根据图片和输入样例发现,一个着色单元格最多可以包含两条对角线,当对角线满时(也就是对角线的数量为4n-2),只需要将方形矩阵的上下两条边的单元格全部着色即可,也就是n*2个单元格。

根据上面和分析样例,于是出现了下面AC代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{int t;cin>>t;while(t--){long long n,k;cin>>n>>k;if(k==4*n-2)cout<<n*2<<endl;else{long long ans=(k+1)/2;cout<<ans<<endl;}}return 0;
}

5.Sasha and the Casino

原题链接

Sample 1

InputcopyOutputcopy
9
2 1 7
2 1 1
2 3 15
3 3 6
4 4 5
5 4 7
4 88 1000000000
25 69 231
13 97 18806
YES
NO
YES
NO
NO
YES
NO
NO
NO

既然需要保证他能在某个时刻拥有任意个硬币,那么就要考虑连续输到下一次不会输的情况。

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{ll t;cin>>t;while(t--){ll k,x,a;cin>>k>>x>>a;ll f1,f2,flag=0;f1=1;for(int i=0;i<x-1;i++){f2=(f1)/(k-1)+1;f1+=f2;if(f1>a)//要是一直输,钱不够输 {flag=1;break;} }if(flag||(a-f1)*k<=a) cout<<"NO"<<endl;//输完,保底的本钱比原来还少也不能某个时刻达到任意钱 else cout<<"YES"<<endl;}return 0;
}

6.Only one of two

原题链接

 

Sample 1

InputcopyOutputcopy
2 3 5
9

Sample 2

InputcopyOutputcopy
1 2 3
5

Sample 3

InputcopyOutputcopy
100000000 99999999 10000000000
500000002500000000

题目要求我们找出只能被n和m其中一个整除的第k个数。

第一个样例很好解释题目的要求,是不是想暴力求解,但是看这数据范围,估计算到开学也算不完。

所以我们可以想到使用二分去解决它,首先把left~right的范围定义得大一些,我们需要的答案就在这个范围里面,记得里面的数据都需要用long long类型哦!

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
long long n,m,k,l=1,r=2e18;
int gc(long long a,long long b) //找最大公约数 
{    if(b) while((a%=b) && (b%=a));    return a+b;
}
int main()
{cin>>n>>m>>k;long long f=n*m/gc(n,m);//最大公倍数,用于减去这个数可以同时被n和m整除的情况 while(l<r){long long mid=(l+r)/2;if(mid/n+mid/m-mid/f*2>=k)//mid/n代表有多少个数被n整除,mid/f*2为有多少数同时被n和m整除, r=mid;// 如果mid/n+mid/m-mid/f*2大于我们要找的第k个数,什么当前的mid大于我们要找的答案,压缩边界 else l=mid+1;}cout<<l<<endl;return 0;
}

7.村村通

原题链接

Sample 1

InputcopyOutputcopy
4 2
1 3
4 3
3 3
1 2
1 3
2 3
5 2
1 2
3 5
999 0
0
1
0
2
998

一个最小生成树的模板题,直接将有的边先建入,再看看还需要建多少边才能串通全部村子。

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,pre[1001];
int find(int x)
{if(pre[x]==x) return x;return pre[x]=find(pre[x]);
}int main()
{while(scanf("%d",&n)){if(n!=0) cin>>m;//输入停止标志 else break;int ans=0;for(int i=1;i<=n;i++) pre[i]=i;while(m--){int a,b;cin>>a>>b;pre[find(a)]=find(b);}for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){if(find(i)!=find(j)){ans++;//建入一个边,答案+1 pre[find(i)]=find(j);}}}cout<<ans<<endl;}return 0;
}

8.传送门

原题链接

Sample 1

InputcopyOutputcopy
4 5
1 2 3
1 3 6
2 3 4
2 4 7
3 4 2
14

对于这道题我一直在想,传送门应该要怎么建立,后面才看到这数范围(n<=100),所以是需要对任意两个教学楼都建立一次传送门,看哪个的最短路径和最小。

那就使用全源最短路径Floyd 算法来暴力求解,但是我们试想一下,这样就有5层for循环,还是会超时,所以我们需要缩减到4层。

因为只有使用了传送门才会影响最短路径,所有有了下面代码。

            for(int x=1;x<=n;x++){for(int y=1;y<=n;y++){if(mp2[x][j]<inf&&mp2[j][y]<inf)mp2[x][y]=min(mp2[x][y],mp2[x][j]+mp2[j][y]);}}for(int x=1;x<=n;x++){for(int y=1;y<=n;y++){if(mp2[x][i]<inf&&mp2[i][y]<inf)mp2[x][y]=min(mp2[x][y],mp2[x][i]+mp2[i][y]);}}

i,j是建传送门的教学楼,会影响最短路径,所以只需要分别对这两个教学楼的最短路径的计算更新即可。

下面是AC代码:

#include<bits/stdc++.h>
#define inf 1234567890
using namespace std;
int n,m,mp1[120][120],mp2[120][120],ans=inf;
void back()//返回原图 
{for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){mp2[i][j]=mp1[i][j];}}
}
int main()
{cin>>n>>m;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)mp1[i][j]=inf;for(int i=1;i<=m;i++){int x,y,z;cin>>x>>y>>z;mp1[x][y]=mp1[y][x]=z;}for(int k=1;k<=n;k++){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(mp1[i][k]<inf&&mp1[k][j]<inf)//先计算没有建立传送门的最短路径 mp1[i][j]=min(mp1[i][j],mp1[i][k]+mp1[k][j]);}}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){back();//每次返回原图 mp2[i][j]=mp2[j][i]=0;//建立传送门 for(int x=1;x<=n;x++){for(int y=1;y<=n;y++){if(mp2[x][j]<inf&&mp2[j][y]<inf)mp2[x][y]=min(mp2[x][y],mp2[x][j]+mp2[j][y]);}}for(int x=1;x<=n;x++){for(int y=1;y<=n;y++){if(mp2[x][i]<inf&&mp2[i][y]<inf)mp2[x][y]=min(mp2[x][y],mp2[x][i]+mp2[i][y]);}}int cnt=0;for(int x=1;x<=n;x++){for(int y=x+1;y<=n;y++){cnt+=mp2[x][y];//计算最短路径和 }}ans=min(ans,cnt);//更新最小 }}cout<<ans<<endl;return 0;
}

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

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

相关文章

【AI绘画】Stable Diffusion简介_stable diffusion变现

手把手教你入门绘图超强的AI绘画&#xff0c;用户只需要输入一段图片的文字描述&#xff0c;即可生成精美的绘画。给大家带来了全新保姆级教程资料包 &#xff08;文末可获取&#xff09; Stable Diffusion是2022年发布的深度学习文本到图像生成模型&#xff0c;它主要用于根据…

ncnn之三(补充):window环境下vs2022安装ncnn+protobuf

启动VS2022 下面的 x64 Native Tools Command Prompt for VS2022 protobuf git clone gitgithub.com:protocolbuffers/protobuf.git# 或者 下载 https://github.com/google/protobuf/archive/v3.11.2.zip cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPERelease -D…

HTML的特殊字符

HTML的特殊字符 有些特殊的字符在 html 文件中是不能直接表示的&#xff0c;例如: 空格&#xff0c;小于号(<)&#xff0c;大于号(>)&#xff0c;按位与(&)。 空格 示例代码&#xff1a; 运行结果&#xff1a; 由于html 标签就是用 < > 表示的&#xff0…

【快速搞定Webpack5】修改输出文件目录及自动清理上次打包文件(五)

介绍 默认情况下webpack打包后&#xff0c;我们的图片和js等文件都会被打包到dist目录下&#xff0c;文件多了混淆在一起一方面不利于文件的查找和管理&#xff0c;另外一方面看上去也不美观。 所以今天我们学习的内容就是控制输出后的文件进入不同的目录。 一、配置 新增4…

BioTech - 大型蛋白质复合物的组装流程 (CombFold)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/136187314 CombFold是用于预测大型蛋白质复合物结构的组合和分层组装算法&#xff0c;利用AlphaFold2预测的亚基之间的成对相互作用。CombFold的组…

MES系统的功能有哪些?

阅读本文&#xff0c;你将了解&#xff1a;一、MES系统是什么&#xff1b;二、MES系统的功能&#xff1b;三、MES系统的使用场景与案例分析&#xff1b;四、如何更高效地利用MES系统。 这是我们公司正在使用的MES系统&#xff0c;已为大家搭建好模板了&#xff0c;无需下载&…

美团外卖商超销量数据

字段内容&#xff1a; shop_id varchar(50) NOT NULL, shop_id_str varchar(50) NOT NULL, shop_name varchar(400) DEFAULT NULL, shop_min_price varchar(10) DEFAULT NULL, shop_score varchar(10) DEFAULT NULL, shop_wm_score varchar(10) DEFAULT NU…

【Vuforia+Unity】AR02-长方体物体识别

1.创建模型 选择多维长方体图&#xff0c;这个长方体是生活中的真实物体的拍摄图&#xff0c;提前把6个面拍摄好并裁剪干净。 官网创建模型https://developer.vuforia.com/targetmanager/project/targets?projectId0ddbb5c17e7f4bf090834650bbea4995&avfalse 设置长宽高…

0220作业

C语言实现LED1闪烁 led.h #ifndef __LED_H__ #define __LED_H__//RCC寄存器封装 #define RCC_MP_AHB4_ENSETR (*(volatile unsigned int*)0x50000A28) //寄存器封装//GPIO寄存器封装 typedef struct{volatile unsigned int MODER; //00volatile unsigned int OTYPER; //04vol…

java数据结构与算法刷题-----LeetCode144. 二叉树的前序遍历

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 解题思路 利用递归&#xff0c;每次入栈一个结点&#xff08;每次递归都是…

优思学院【六西格玛案例】美国医院急诊部满意度提升

今天&#xff0c;优思学院来分享一个早期六西格玛项目的案例&#xff0c;项目背景是这样的&#xff0c;多年前&#xff0c;美国犹他州盐湖城的LDS医院已经实施了许多最佳实践。医院提供了床旁登记、高级分诊协议、护理点测试和实时放射学检查。一个强大而全面的持续质量改进计划…

CSS三大定位方式(浮动、定位、弹性盒)详细解析

CSS三大定位方式 前言&#xff1a;作为一名前端开发&#xff0c;已经工作2年了。由于自己是半路出家&#xff0c;从嵌入式方向转到前端开发&#xff0c;都是边百度边开发&#xff0c;很多基础都不了解&#xff0c;只要解决问题就好&#xff0c;但是近来为了让自己知识体系化&a…

北京高考数学填空题真题练一练(2014-2023)

距离2024年高考还有不到四个月的时间&#xff0c;今天我们来看看北京市的高考数学题真题。最近几年&#xff0c;只有北京、天津、上海三个直辖市的高考题是自主命题&#xff0c;其他省份全部是使用教育部统一命题的试卷。而且北京、天津、上海的数学现在也不再区分文理卷了&…

利用iSCSI服务部署IP SAN网络存储服务

一、配置环境&#xff08;Vmware WorkStation虚拟环境&#xff09; 服务端与客户端OS&#xff1a;openEuler 22.03-LTS CPU&#xff1a;1U1C 内存&#xff1a;2G 硬盘&#xff1a;5个SCSI磁盘&#xff0c;其中一个作为系统盘&#xff0c;另外四个配置为RAID5阵列 服务器IP…

TOUCHDESIGNER(1-2) 元件

元件来了 一级 二级 三级!!!

2024PMP备考-高质量PMP真题和很详细解析(3)

本专题&#xff0c;华研荟专门为大家讲解最近两年在中国大陆、香港、澳门地区的PMP考试真题&#xff0c;并且提供比较详细的解析&#xff0c;让大家知其然&#xff0c;还知其所以然。帮助大家最后20天有效冲刺&#xff0c;一次性3A通过2024年PMP考试。 2024年PMP考试新考纲-近年…

数据结构:跳表讲解

跳表 1.什么是跳表-skiplist1.1简介1.2设计思路 2.跳表的效率分析3.跳表实现3.1类成员设计3.2查找3.3插入3.4删除3.5完整代码 4.skiplist跟平衡搜索树和哈希表的对比 1.什么是跳表-skiplist 1.1简介 skiplist本质上也是一种查找结构&#xff0c;用于解决算法中的查找问题&…

Python开发户型图编辑器-2D/3D户型图展示

在现代家居设计中&#xff0c;户型图是不可或缺的工具&#xff0c;它为设计师和业主提供了一个直观的展示和规划空间的方式。然而&#xff0c;传统的户型图编辑软件往往复杂难用&#xff0c;限制了设计师的创作灵感。我们为您带来了一款全新的Python开发的户型图编辑器&#xf…

计算机视觉基础:【矩阵】矩阵选取子集

OpenCV的基础是处理图像&#xff0c;而图像的基础是矩阵。 因此&#xff0c;如何使用好矩阵是非常关键的。 下面我们通过一个具体的实例来展示如何通过Python和OpenCV对矩阵进行操作&#xff0c;从而更好地实现对图像的处理。 示例 示例&#xff1a;选取矩阵中指定的行和列的…

Positive Technologies 确保 Rostic‘s 网络应用程序的安全

☑️ PT BlackBox分析 Rostics 网络应用程序的安全性 快餐连锁店在其安全网络开发过程中使用了我们的扫描仪。PT BlackBox 总共扫描了 20 多个 Rostics 的外部服务&#xff08;每天访问量超过 100,000 人次&#xff09;和企业服务&#xff08;每天访问量≈7,000 名员工&#x…