第十三届蓝桥杯C++B组国赛I题——齿轮 (AC)
创始人
2024-01-16 18:42:18
0

目录

  • 1.齿轮
    • 1.题目描述
    • 2.输入格式
    • 3.输出格式
    • 4.样例输入
    • 5.样例输出
    • 6.样例说明
    • 6.数据范围
    • 7.原题链接
  • 2.解题思路
  • 3.Ac_code

1.齿轮

1.题目描述

这天, 小明在组装齿轮。

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

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

2.输入格式

输入共 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​表示询问。

3.输出格式

QQQ 行, 对于每个询问, 如果存在至少一种组装方案满足条件, 输出 ′YES′\mathrm{'YES}'′YES′, 否则输出 ’ NO\mathrm{NO}NO '。

4.样例输入

5 3
4 2 3 3 1
2
4
6

5.样例输出

YES
YES
NO

6.样例说明

询问 1 方案之一 : 23341:23341
询问 2 方案之一:42331

询问 3 没有方案

6.数据范围

n,Q≤2×105;ri,qi≤2×105n,Q≤2×10^5 ;r i ,q i ≤2×10^5n,Q≤2×105;ri,qi≤2×105

7.原题链接

齿轮

2.解题思路

首先,这里涉及到一个物理公式,涉及到线速度v,v,v,角速度 www 以及半径 rrr 之间的关系。它们之间满足:
v=w∗rv=w*rv=w∗r

而齿轮模型是一个经典的物理模型,所有的齿轮的线速度都一样。 对于任意的齿轮之间都一定满足:
wx∗rx=wy∗ryw_x*r_x=w_y*r_ywx​∗rx​=wy​∗ry​

假设最左边的的齿轮半径为 xxx ,最右边的齿轮半径为 yyy ,那么使得最右边的齿轮的转速(角速度)是最左边的 qqq 倍,则需满足:
wx∗q=wyw_x*q=w_ywx​∗q=wy​
联立上述两式可解得:
rx=q∗ryr_x=q*r_yrx​=q∗ry​

所以我们可知,我们只需要去判断所有齿轮的半径之间是否存在两个齿轮的半径是 qqq 倍的关系。既然存在倍数关系,那么说明两个齿轮的半径其中一个必然是另外一个的因数。我们使用数组st,其中st[[i]表示是否有半径相差qqq倍的两个齿轮。

我们可以将齿轮半径按从小到大进行排序,对于每个齿轮的半径rir_iri​,我们将去分解其所有的因数,如果存在某个数xxx是rir_iri​的因数,并且之前已经出现过半径为xxx的齿轮,则说明当q=ri/xq=r_i/xq=ri​/x时,我们是可以完成要求的。当然我们在分解因数时,应该进行优化,当xxx是rir_iri​的因数时,ri/xr_i/xri​/x也一定是rir_iri​的因数,此时我们可以直接一起进行判断。这样分解每个数的复杂度的O(n)O(n)O(n)级别降低到O(n)O(\sqrt n)O(n​)。

每次判断一个数后我们将其放入set中,在判断该数的因数在是否出现也是看set中是否存在。因为每个数的因数一定小于等于数的本身,所以这是我们排序的目的,确保了如果一个数的因数存在,那么一定会在它之前出现。

这个题目一定要注意一个点,齿轮的个数可能只有一个,那么此时左齿轮恰好就是右齿轮,如果查询的qqq为1时,是符合要求的,所以我们需要对这种情况进行特判。

时间复杂度:O(nn)O(n\sqrt n)O(nn​)

3.Ac_code

#include
using namespace std;
typedef long long LL;
const int N=200010;bool st[N];
int r[N];
int main() 
{int n,q;scanf("%d%d",&n,&q);unordered_set s;for(int i=0;iscanf("%d",&r[i]);}sort(r,r+n);for(int i=0;iint v=r[i];for(int i=1;i<=v/i;++i){if(v%i==0){//存在这个半径为i的齿轮if(s.find(i)!=s.end()){st[v/i]=true;}//存在这个半径为v/i的齿轮if(s.find(v/i)!=s.end()){st[i]=true;}}}s.insert(r[i]);}for(int i=0;iint h;scanf("%d",&h);if(n==1&&h==1) puts("YES");else if(st[h]) puts("YES");else puts("NO");}return 0;
}

上一篇:充分利用时间

下一篇:VapSR

相关内容

热门资讯

国庆节主题国旗下讲话稿 国庆节主题国旗下讲话稿  不知不觉又到了一年一度的国庆节了,这是一个举国同庆的节日,这是祖国的生日,...
工作会议上表态发言稿 工作会议上表态发言稿(精选10篇)  在现实社会中,发言稿使用的情况越来越多,发言稿可以帮助发言者更...
一分钟能干什么评课稿 一分钟能干什么评课稿范文  数学教学,要紧密联系学生的生活实际,从学生的生活经验和已有知识出发,创设...
高中趣味运动会加油稿 高中趣味运动会加油稿  无论结局是好是坏, 无怨无悔是我们的选择 ,高中趣味运动会加油稿。每当运动员...
运动会50字加油稿大全 运动会50字加油稿大全  一、运动会简介  运动会指体育运动的竞赛会,有奥运会等大型运动会,只是范围...
辩论赛新闻稿 辩论赛新闻稿(精选7篇)  随着社会在进步,我们都不可避免地要接触到新闻稿,新闻稿是公司/机构/政府...
观潮特级教师说课稿 观潮特级教师说课稿范文  作为一位优秀的人民教师,有必要进行细致的说课稿准备工作,是说课取得成功的前...
陈情表高三语文说课稿 陈情表高三语文说课稿(通用11篇)  作为一名教师,常常需要准备说课稿,说课稿有利于教学水平的提高,...
语文课程《妈妈睡了》说课稿 语文课程《妈妈睡了》说课稿范文  作为一名专为他人授业解惑的人民教师,往往需要进行说课稿编写工作,借...
清华大学毕业典礼讲话稿 清华大学毕业典礼讲话稿范文(精选9篇)  在现在社会,我们都不可避免地要接触到讲话稿,讲话稿可以起到...
足球脚内测传球说课稿 足球脚内测传球说课稿  在教学工作者实际的教学活动中,常常要根据教学需要编写说课稿,借助说课稿可以有...
大学新生运动会新闻稿范文简短 大学新生运动会新闻稿范文简短万里秋风丹桂,千般美景盛世,大学新生运动会新闻稿范文简短。学校第九届校田...
高三教师百日誓师发言稿 高三教师百日誓师发言稿 15篇  在充满活力,日益开放的今天,越来越多地方需要用到发言稿,发言稿的内...
领导升职表态发言稿 导语:晋升调薪主要适用于提升其职位或指派更加重要职责的人员,与员工的职位及管理职责挂钩。与绩效评估、...
春季期开学典礼发言稿 春季期开学典礼发言稿(通用5篇)  在充满活力,日益开放的今天,我们总不得不需要用到发言稿,发言稿具...
活动主持稿 活动主持稿15篇  在学习、工作生活中,我们都不可避免地要接触到主持稿,主持稿是主持人于节目进行过程...
运动会稿件 运动会稿件(精选15篇)  昔日环形的跑道,此时在你脚下却幻化为最美的彩虹。你就像一阵风,留给世界的...
证婚人讲话稿 证婚人讲话稿(通用10篇)  随着社会一步步向前发展,我们可以使用讲话稿的机会越来越多,讲话稿是讲话...
地理必修1《河流地貌的发育》... 人教版地理必修1《河流地貌的发育》说课稿  一、说教材  1.教材分析  本节课是位于人教版地理必修...
《植物妈妈有办法》说课稿 《植物妈妈有办法》说课稿(精选13篇)  作为一名老师,通常会被要求编写说课稿,说课稿有助于提高教师...