洛谷P8799 [蓝桥杯 2022 国 B] 齿轮 C语言/C++

news/2024/9/23 0:27:49/

[蓝桥杯 2022 国 B] 齿轮

题目描述

这天,小明在组装齿轮。

他一共有 nnn 个齿轮,第 iii 个齿轮的半径为 rir_{i}ri, 他需要把这 nnn 个齿轮按一定顺序从左到右组装起来,这样最左边的齿轮转起来之后,可以传递到最右边的齿轮,并且这些齿轮能够起到提升或者降低转速(角速度)的作用。

小明看着这些齿轮,突然有 QQQ 个疑问: 能否按一定顺序组装这些齿轮使得最右边的齿轮的转速是最左边的齿轮的 qiq_{i}qi 倍?

输入格式

输入共 Q+2Q+2Q+2 行,第一行为两个正整数 n,Qn, Qn,Q, 表示齿轮数量和询问数量。

第二行为 nnn 个正整数 r1,r2,…,rnr_{1}, r_{2}, \ldots, r_{n}r1,r2,,rn,表示每个齿轮的半径。

后面 QQQ 行,每行一个正整数 qiq_{i}qi 表示询问。

输出格式

QQQ 行,对于每个询问,如果存在至少一种组装方案满足条件,输出 YES, 否则输出 NO

样例 #1

样例输入 #1

5 3
4 2 3 3 1
2
4
6

样例输出 #1

YES
YES
NO

提示

【样例说明】

询问 111 方案之一:23341

询问 222 方案之一:42331

询问 333 没有方案。

【评测用例规模与约定】

对于 15%15 \%15% 的数据,保证 n,Q≤100n, Q \leq 100n,Q100;

对于 30%30 \%30% 的数据,保证 n,Q≤2000n, Q \leq 2000n,Q2000;

对于 100%100 \%100% 的数据,保证 n,Q≤2×105;ai,qi≤2×105n, Q \leq 2 \times 10^{5} ; a_{i}, q_{i} \leq 2 \times 10^{5}n,Q2×105;ai,qi2×105

蓝桥杯 2022 国赛 B 组 I 题。

所需变量

int n;//代表n个齿轮的大小

int Q;//代表询问的次数

int arr[200005] = {0};//用于存储每个齿轮的大小

int control = 0;//1代表1倍是否存在

int i,j;//循环变量

int temp;//用于接收每个齿轮大小,然后再存入进去

int min = 0;//代表齿轮的最小大小

int max = 0;//代表齿轮的最大大小

int q[200005];//代表每次询问的齿轮大小

int control2 = 0;//代表后面是否存在,如果不存在那么control2就是0,就输出NO,否则就输出YES

思路:我们要知道齿轮转动倍数跟中间那些齿轮半径都没有关系,只跟最开始和最后那个有关系,如果是k倍,我们只需要最后那个齿轮的半径是最开始那个的k倍就能满足题目所需要求!
因此首先我们将每个数都存入进去,然后再arr数组中,我们分别用下标表示这个齿轮的半径,如果存在我们就把arr[i]赋值为1,如果这个数已经存在,在遇到一个相同的,我们就将control赋值为1!代码如下:

for(i = 0;i<n;i++){cin>>temp;if(temp<min){min = temp;}if(temp>max){max = temp;}if(arr[temp] == 1){control = 1;continue;}arr[temp] = 1;
}

得到每个齿轮半径后,我们Q次询问每次询问就是看这个数的关于q[i]的倍数是否存在(即为1),如果存在就输出YES,否则就输出NO,代码如下:

for(i = 1;i<=Q;i++){control2 = 0;if(q[i] == 1){if(control == 1){cout<<"YES"<<endl;}else{cout<<"NO"<<endl;}}else{for(j = min;j<=(max/q[i])+1;j++){if(arr[j] == 0){continue;}if(arr[j*q[i]] == 1){cout<<"YES"<<endl;control2 = 1;break; }}if(control2 == 0){cout<<"NO"<<endl;}}}

完整代码如下(有错):

#include<iostream>
using namespace std;
int main(){int n,Q,arr[200005] = {0},control = 0,i,j,temp,min = 0,max = 0,q[200005],control2 = 0;cin>>n>>Q;for(i = 0;i<n;i++){cin>>temp;if(temp<min){min = temp;}if(temp>max){max = temp;}if(arr[temp] == 1){control = 1;continue;}arr[temp] = 1;}for(i = 1;i<=Q;i++){cin>>q[i];}for(i = 1;i<=Q;i++){control2 = 0;if(q[i] == 1){if(control == 1){cout<<"YES"<<endl;}else{cout<<"NO"<<endl;}}else{for(j = min;j<=(max/q[i])+1;j++){if(arr[j] == 0){continue;}if(arr[j*q[i]] == 1){cout<<"YES"<<endl;control2 = 1;break; }}if(control2 == 0){cout<<"NO"<<endl;}}}return 0;
}

在这里插入图片描述

后面这个逻辑是没有问题的,但是对于有些测试点出现RE,然后在测试过程中发现是我数组定义小了,后面我们将arr数组扩大十倍,就通过了!
正确答案:

#include<iostream>
using namespace std;
int main(){int n,Q,arr[2000005] = {0},control = 0,i,j,temp,min = 0,max = 0,q[2000005],control2 = 0;cin>>n>>Q;for(i = 0;i<n;i++){cin>>temp;if(temp<min){min = temp;}if(temp>max){max = temp;}if(arr[temp] == 1){control = 1;continue;}arr[temp] = 1;}for(i = 1;i<=Q;i++){cin>>q[i];}for(i = 1;i<=Q;i++){control2 = 0;if(q[i] == 1){if(control == 1){cout<<"YES"<<endl;}else{cout<<"NO"<<endl;}}else{for(j = min;j<=(max/q[i])+1;j++){if(arr[j] == 0){continue;}if(arr[j*q[i]] == 1){cout<<"YES"<<endl;control2 = 1;break; }}if(control2 == 0){cout<<"NO"<<endl;}}}return 0;
}

在这里插入图片描述


http://www.ppmy.cn/news/40341.html

相关文章

ChatGPT大规模封号+停止注册?最火概念会凉吗?

一、背景 这个周末&#xff0c;先是意大利暂时封杀ChatGPT&#xff0c;限制OpenAI处理本国用户信息。 接着&#xff0c;据韩国媒体报道&#xff0c;三星导入ChatGPT不到20天&#xff0c;便曝出机密资料外泄&#xff08;涉及半导体设备测量资料、产品良率等内容&#xff0c;已…

面试手撕堆排序

堆排序代码如下&#xff08;注释见下&#xff09;&#xff1a; 首先将待排序的数组构造成一个大根堆&#xff0c;此时&#xff0c;整个数组的最大值就是堆结构的堆顶 将堆顶的数与末尾的数交换&#xff0c;此时&#xff0c;末尾的数为最大值&#xff0c;剩余待排序数组个数为n…

通过Fake SFTP服务器测试文件服务器相关业务逻辑

本文已同步至个人微信公众号【不能止步】&#xff0c;链接为通过Fake SFTP服务器测试文件服务器相关业务逻辑 在开发过程中&#xff0c;我们经常会同文件服务器打交道&#xff0c;比如上传、下载和更新文件等。为了通过单元测试与文件服务器交互的相关代码&#xff0c;通常我们…

为什么AI必须与人对齐?从科幻恐怖电影《M3GAN》说起

“她不只是个玩具&#xff0c;而是这个家的一份子。” 这是于今年在国内上映的恐怖喜剧科幻片《梅根》&#xff08;M3GAN&#xff09;中的一句台词。该影片辛辣地揭露了 AI 的伦理危机和巨大风险。 在该影片中&#xff0c;一个具备高度人工智能、栩栩如生的玩具人偶梅根&#x…

mysql中的存储过程

使用说明 存储过程是数据库一个重要的对象&#xff0c;可以封装sql语句集&#xff0c;可以用来完成一些较为复杂的业务逻辑&#xff0c;一个存储过程就是一个功能&#xff0c;可以接受输入类型参数&#xff0c;可以接受输出类型参数&#xff0c;并且可以用多个返回值 存储过程…

详解 Flink Catalog 在 ChunJun 中的实践之路

我们知道 Flink 有Table&#xff08;表&#xff09;、View&#xff08;视图&#xff09;、Function&#xff08;函数/算子&#xff09;、Database&#xff08;数据库&#xff09;的概念&#xff0c;相对于这些耳熟能详的概念&#xff0c;Flink 里还有一个 Catalog&#xff08;目…

【HyperLearner】《What Can Help Pedestrian Detection?》

CVPR-2017 文章目录1 Background and Motivation2 Related Work3 Advantages / Contributions4 Method4.1 Channel features for pedestrian detection4.2 Integration techniques4.3 Comparison and analysis5 Jointly learn the channel features5.1 Datasets and Metrics5.2…

windows编程(2)-消息与循环

文章首发于&#xff1a;My Blog 欢迎大佬们前来逛逛 win32打开控制台的方法 首先加入输入输出头文件 AllocConsole&#xff1a;为控制台分配空间 GetStdHandle&#xff1a;创建一个标准输入输出设备&#xff0c;指定其为STD_OUTPUT_HANDLE则就是一个标准输出控制台。 创建一…