P8799 [蓝桥杯 2022 国 B] 齿轮

P8799 [蓝桥杯 2022 国 B] 齿轮

分析

最右边的齿轮的转速是最左边齿轮的q倍 == 最右边的齿轮的半径是最左边齿轮的q倍

题意即为:查询数组中是否存在两个数,其中一个是另一个的q倍

题目范围:查询次数q:2*10^5,数组范围2*10^5,所以不能边输入边查询

预处理倍数数组ans[],查询时直接得出答案

注意:

1.遍历数组,看其 j 倍数是否存在

2.倍数为1,单独处理(在输入数组时,若存在b[x]>=2,即至少存在两个相同的数,说明查询倍数为1时能找到答案)

代码

cpp 复制代码
#include<iostream>
#include<algorithm>
using namespace std;

const int N = 200010;
int a[N],b[N],n,q;
bool ans[N],flag;

int main()
{
	scanf("%d %d",&n,&q);
	for(int i = 0;i < n;i ++)
	{
		int x;
		scanf("%d",&x);
		a[i] = x;
		b[x] ++;
		if(b[x] > 1) flag = true;  //单独处理倍数为1时的情况
	}
	if(flag) ans[1] = 1;
	for(int i = 1;i < N;i ++)
	{
		if(b[i])
		{
			for(int j = i * 2;j < N;j += i)
			{
				if(b[j]) ans[j / i] = 1;
			}
		}
	}
	while(q --)
	{
		int x;
		scanf("%d",&x);
		
		if(ans[x]) printf("YES\n");
		else printf("NO\n");
	}
	return 0;
}
相关推荐
不能只会打代码16 小时前
力扣--1970. 你能穿过矩阵的最后一天(Java)
java·算法·leetcode·二分查找·力扣·bfs·最后可行时间
AndrewHZ16 小时前
【图像处理基石】如何高质量地生成一张庆祝元旦的图片?
图像处理·人工智能·opencv·算法·计算机视觉·生成式模型·genai
光明西道45号16 小时前
Leetcode 15. 三数之和
数据结构·算法·leetcode
还不秃顶的计科生17 小时前
LeetCode 热题 100第一题:两数之和python版本
python·算法·leetcode
Swift社区17 小时前
LeetCode 462 - 最小操作次数使数组元素相等 II
算法·leetcode·职场和发展
nike0good17 小时前
Goodbye 2025 题解
开发语言·c++·算法
崇山峻岭之间17 小时前
Matlab学习记录19
学习·算法·matlab
jllllyuz17 小时前
基于帧差法与ViBe算法的MATLAB前景提取
开发语言·算法·matlab
wen__xvn17 小时前
代码随想录算法训练营DAY1第一章 数组part01
数据结构·算法·leetcode
爱编码的傅同学17 小时前
【程序地址空间】页表的映射方式
c语言·数据结构·c++·算法