第十三届蓝桥杯C++B组国赛I题——齿轮 (AC)

news2024/11/19 15:23:44

目录

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

1.齿轮

1.题目描述

这天, 小明在组装齿轮。

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

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

2.输入格式

输入共 Q + 2 Q+2 Q+2 行, 第一行为两个正整数 n , Q n,Q n,Q, 表示齿轮数量和询问数量。
第二行为 n n n 个正整数 r 1 , r 2 , … , r n r_{1}, r_{2}, \ldots, r_{n} r1,r2,,rn, 表示每个齿轮的半径。后面 Q Q Q 行, 每行一个正整数 q i q_{i} qi表示询问。

3.输出格式

Q Q Q 行, 对于每个询问, 如果存在至少一种组装方案满足条件, 输出 ′ Y E S ′ \mathrm{'YES}' YES, 否则输出 ’ N O \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 × 1 0 5 ; r i , q i ≤ 2 × 1 0 5 n,Q≤2×10^5 ;r i ,q i ≤2×10^5 n,Q2×105;ri,qi2×105

7.原题链接

齿轮

2.解题思路

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

而齿轮模型是一个经典的物理模型,所有的齿轮的线速度都一样。 对于任意的齿轮之间都一定满足:
w x ∗ r x = w y ∗ r y w_x*r_x=w_y*r_y wxrx=wyry

假设最左边的的齿轮半径为 x x x ,最右边的齿轮半径为 y y y ,那么使得最右边的齿轮的转速(角速度)是最左边的 q q q 倍,则需满足:
w x ∗ q = w y w_x*q=w_y wxq=wy
联立上述两式可解得:
r x = q ∗ r y r_x=q*r_y rx=qry

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

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

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

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

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

3.Ac_code

#include<bits/stdc++.h>
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<int> s;
	for(int i=0;i<n;++i){
		scanf("%d",&r[i]);
	}
	sort(r,r+n);
	for(int i=0;i<n;++i){
		int 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;i<q;++i){
		int h;
		scanf("%d",&h);
		if(n==1&&h==1) puts("YES");
		else if(st[h]) puts("YES");
		else puts("NO");
	}
    return 0;
}

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

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

相关文章

[附源码]Java计算机毕业设计SSM公司办公自动化系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

10个实用的CSS样式之悬浮卡片

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位喜欢写作&#xff0c;计科专业大三菜鸟 &#x1f3e1;个人主页&#xff1a;starry陆离 &#x1f4da;订阅专栏&#xff1a;『10个实用的CSS样式』 10个实用的CSS样式之悬浮卡片1.简介2.布局设计3.样式美化3.1body美化3.2c…

隔离技术之端口隔离

端口隔离技术 端口隔离主要应用在同一个vlan内&#xff0c;不同的用户之间不可互相访问 好处&#xff1a; 可以避免广播风暴&#xff0c;节约了vlan的资源&#xff0c;提高了用户之间的安全性 比如一个用户的电脑中病毒了&#xff0c;不会影响到其他用户 端口隔离是基于端口&…

网络原理——No.2 传输层_TCP的连接管理(画图理解三次握手与四次挥手)

JavaEE传送门JavaEE 网络原理——传输层_UDP 网络原理——No.1 传输层_TCP的确认应答机制与超时重传 目录TCP的连接管理三次握手(建立连接)四次挥手(断开连接)TCP的连接管理 描述的就是 TCP 建立链接和断开链接的过程 TCP 的链接, 只是一个 “逻辑上的” “虚拟的连接” (只要…

qt学习笔记4:QMainWindow 菜单栏、工具栏、状态栏、铆接部件、

在创建基类的时候&#xff0c;有三大选择&#xff0c;一个是QWidge 空窗口&#xff0c; 另一个就是QMainWindow QMainWindow是一个为用户提供主窗口的类&#xff0c;包含一个菜单栏&#xff0c;多个工具栏&#xff0c;多个链接部件&#xff0c; 一个状态栏以及一个中心部件&…

《数据结构》(六)八大排序(上)

生活中大家从小到大处处可见排队&#xff0c;但是排队有哪些快速的方法你了解吗&#xff1f; 八大排序排序的基本概念插入排序直接插入排序基本思想代码直接插入排序总结希尔排序基本思想代码希尔排序总结选择排序直接选择排序基本思想&#xff1a;代码直接选择排序总结堆排序堆…

大数据基础之java常用API一

常用API1. Object类2. String类String案例1. Object类 构造方法空参构造全参构造 Object类: 是所有类的基类,或者说公共父类,每个类都直接或者间接的继承自Object,所以该类中有的方法,其他类中都有 构造方法: public Object(); 所有类的构造方法中都会默认调用super() 会逐级调…

C#里在子窗口与父窗口之间进行数据传送

在C#里经常需要在子窗口与父窗口之间进行数据传送,或者调用,虽然有很多方法可以实现,但是采用委托还是比较简单和直接的方式。 所以这次针对委托来演示一下怎么样实现这种功能。 下面先来创建一个带两窗口的例子,如下图所示: 接着来看一下,创建父窗口的代码: namespace…

【C++笔试强训】第十一天

&#x1f387;C笔试强训 博客主页&#xff1a;一起去看日落吗分享博主的C刷题日常&#xff0c;大家一起学习博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a;夜色难免微凉&#xff0c;前方必有曙光 &#x1f31e;。 &#x1f4a6; &…

vite基础知识-1

为什么选择vite&#xff1f; 讲vite之前&#xff0c;我们先来了解一下webpack的原理。 webpack支持多种模块化&#xff08;浏览器端和服务端都可以运行&#xff09;。比如&#xff1a; // index.js const lodash require("lodash"); // commonjs规范 import React…

win10 docker desktop 报 docker desktop stopped

win10电脑安装doker deskto遇到一些问题解决过程记录 报 docker desktop stopped 没过多会, docker desktop就自动退出了, 要以理解为闪退 网上查了一下原因, 虚拟化可能没设置 进入bios, 发现笔记本电脑没有这个设置 重启电脑后, 弹出消息 WSL 2 installation is incompl…

通道分离与合并、彩色图转换为灰度图、二值化

文章目录图像基础重要的函数图像基本知识图像基础通道分离与合并彩色图转换为灰度图二值化图像的加减乘除图像基础 矩阵分辨率8位整型图像浮点数图像 现在简单介绍下二值化、灰度图以及真彩色和假彩色 图像的二值化&#xff0c;就是将图像上的像素点的灰度值设置为0或255&am…

安装宝塔面板(详细教程)

目录 安装宝塔面板 &#xff08;一&#xff09;前言 &#xff08;二&#xff09;准备工作 1、官网&#xff1a;宝塔面板下载&#xff0c;免费全能的服务器运维软件 &#xff08;三&#xff09;安装宝塔面板 1、进入官网&#xff0c;选择“安装脚本” 2、选择对应版本的安…

C++游戏开发小笔记

1.入门小语法 1.1 命名空间 当想使用库文件的某个函数时&#xff0c;为了防止由于重名而引起的混乱调用&#xff0c;使用命名空间来区分同名函数。 字符串String也是标准命名空间的一个。如果没有using namespace std; 想用string 类型得 std:: string 1.2浮点数的存储…

计算机视觉--flask部署 目标检测算法,并在局域网内远端访问

1.flask框架 Flask是一个轻量级的基于Python的web框架。static 文件夹来保存静态文件&#xff0c;templates 文件夹存放前端页面 安装&#xff1a; pip install Flask框架代码&#xff1a; from flask import * from flask import Flaskapp Flask(__name__) //获取实例app.…

Web监听器:Listener

Listener简介常用监听接口监听在线用户信息的实现Model层Controller层OnlineUserListener的实现View层测试简介 监听器&#xff08;Listener&#xff09;&#xff0c;是一个实现特定接口的普通Java程序&#xff0c;用于监听Web应用中的对象或信息发生改变时&#xff0c;作出相应…

大前端进阶

目录 1.概述和前端工具vscode安装 1.下载安装VScode 2.中文界面配置 3.插件安装 4.设置字体大小 5.开启完整的Emmet语法支持 2.Nodejs 1.Nodejs介绍与安装 2.快速入门-Hello World 3.Node - 实现请求响应 4.Node-操作MYSQL数据库 3.Es6 1.ES6的概述 2.ES6的语法…

Docker实战:使用Dockerfile部署第一个netcore程序

目录 1、创建一个NetCore API项目 2、云服务部署 2.1 首先登录云服务器创建一个测试目录 2.2 新建dockerfile文件用来构建镜像。 2.3 构建镜像 2.4 运行镜像 目录 1、创建一个NetCore API项目 2、云服务部署 2.1 首先登录云服务器创建一个测试目录 2.2 新建dockerfil…

Python3,10h行代码,制作艺术签名,从此走上人生巅峰。

制作艺术签名1、引言2、代码实战2.1 代码示例3、总结1、引言 小鱼&#xff1a;小屌丝&#xff0c;你在画啥呢&#xff1f; 小屌丝&#xff1a;… 我这在练习签名呢。 小鱼&#xff1a;这… 艺术签&#xff1f; 小屌丝&#xff1a;喔&#xff0c;鱼哥&#xff0c;你这真实博才多…

CSDN云IDE怎样克隆代码

文章目录1、怎样从GitHub导入项目&#xff1f;1.1、系统生成SSH-KEY2、克隆代码2.1、克隆代码方式一2.2、克隆代码方式二2.3、克隆代码方式三1、怎样从GitHub导入项目&#xff1f; 1.1、系统生成SSH-KEY 1、打开Terminal 2、查看是否存在现有的ssh密钥 $ ls -al ~/.ssh3、检…