首页 > 其他分享 >[蓝桥杯 2022 国 B] 齿轮(优化枚举)

[蓝桥杯 2022 国 B] 齿轮(优化枚举)

时间:2024-04-06 22:30:25浏览次数:19  
标签:int st 蓝桥 齿轮 枚举 2022 ans include mx

        根据题目描述,如果采用dfs暴力做法枚举所有方案,肯定会超时,因此我们需要优化枚举,我们都知道在同一组共同转动的齿轮中,线速度相等,因此角速度的比值就是半径的反比,因此我们只需要找到对于每个齿轮作为起始齿轮,只需要找到其倍数半径是否存在即可,而倍数上限就是假设存在半径为1的齿轮,其中最大半径的齿轮就是转速上限,再用bool类型的ans数组记录该倍数是否存在即可,需要注意的是可以用set数组去重,如果存在重复的齿轮,就可以证明ans[1]肯定蹲在,最后只需要进行访问即可

上代码

#include<iostream>
#include<cstring>
#include<unordered_set>
#include<algorithm>

using namespace std;
const int N = 2e5 + 10;
bool ans[N];

int main(void)
{
	int n, q; cin >> n >> q;
	unordered_set <int> st;//统计齿轮,并且去重 
	int mx = 0;
	for(int i = 1; i <= n; i++){
		int r; cin >> r;
		if(st.count(r)) ans[1] = true;//如果存在重复,说明1倍转速可以存在 
		st.insert(r);
		mx = max(mx, r);//假设存在半径为1的齿轮,那么最大倍数就是mx 
	}
	
	for(auto i = st.begin(); i != st.end(); i++){
		for(int j = (*i) * 2; j <= mx; j+=(*i)){//j从二倍半径开始枚举,枚举到上限mx
			if(st.count(j)) ans[j / (*i)] = true;//如果存在半径j,就记录答案 
		}
	}
	
	while(q--){
		int x; cin >> x;
		if(ans[x]) cout << "YES" << endl;
		else cout << "NO" << endl;
	}
	
	return 0;	
} 

标签:int,st,蓝桥,齿轮,枚举,2022,ans,include,mx
From: https://blog.csdn.net/2302_81473103/article/details/137399031

相关文章

  • [蓝桥杯 2021 省 B] 杨辉三角形(二分查找+枚举)
        我们之前学过有关杨辉三角的一些性质,我们知道杨辉三角某个数等于左上和右上两个数相加,但是如果我们按照这个性质依次枚举每行每列,就会很容易超时,因此我们可以枚举列,再二分查找行来寻找满足要求的答案,我们可以先将列数到30,基本涵盖了所有的答案,通过组合数性质来二......
  • [蓝桥杯 2022 省 B] 李白打酒加强版(三维动态规划)
        通过题目描述,我们可以知道这道题目涉及到某种状态时候的方案数,因此我们可以用动态规划来解决问题,并且我们需要注意到酒的状态,因此我们可以用三维数组来存储状态,我们知道N,M最大不会超过100,并且如果酒超过了100斗,即使遇到100朵花也无法喝完,因此只需要定义大小都为1......
  • 蓝桥杯 试题 算法训练 拿金币
    问题描述有一个NxN的方格,每一个格子都有一些金币,只要站在格子里就能拿到里面的金币。你站在最左上角的格子里,每次可以从一个格子走到它右边或下边的格子里。请问如何走才能拿到最多的金币。输入格式第一行输入一个正整数n。以下n行描述该方格。金币数保......
  • python蓝桥题库2141-山
    见题目我最近买了他们官方的程序设计竞赛的书,一本紫色的,在引子部分这部分出现了这道题,最开始看代码的时候没看懂,我现在来逐层分析,你需要有一定基础来看这篇文章,还要就是我的见解偶数情况第一行先设置了个ans的计数变量接下来range循环20-20223(不对啊?这和题目要求的循环......
  • 蓝桥杯2023年A组-试题B-有奖问答
    0.题目小蓝正在参与一个现场问答的节目。活动中一共有30道题目,每题只有答对和答错两种情况,每答对一题得10分,答错一题分数归零。小蓝可以在任意时刻结束答题并获得目前分数对应的奖项,之后不能再答任何题目。最高奖项需要100分,所以到达100分时小蓝会直接停止答题。已知......
  • 第二十五周代码(蓝桥杯查缺补漏)
    2024/03/31    周日填充题目链接【参考代码】想用暴力,没过//枚举,未出结果QAQ#include <bits/stdc++.h>using namespace std;string s00 = "00";string s11 = "11";int ans = 0;//m个问号,子串有2^m种,使用dfs//初步思路:分割子串,直到只有两......
  • C语言自定义类型变量——枚举(enum)
    一.枚举的定义和声明字面意思,枚举就是一一列举,把可能的取值一一列举,在我们现实生活中有许多可以列举的事物,例如:一周七天,一年四季,性别,月份,三原色等等。当我们需要描述这些数据的时候就可以使用枚举了。其关键字为eunm.类似于结构体,联合体,定义一个枚举类型的基本形式如下:enum......
  • 蓝桥杯2023年A组-试题A-幸运数
    0.题目1.题解1.1暴力枚举思路这是一个填空题,所以可以直接暴力枚举注意:1.要是想要求位数:使用log10(abs(num))+12.%求余两边都必须是整数,pow(10,halfDigits);的返回值是double,这里必须转换代码#include<iostream>#include<cmath>boolisLuckyNumber(intn......
  • LG_P8728 [蓝桥杯 2020 国 B] 填空问题 题解
    蓝桥杯2020国BP8728题解A题直接写Python暴力一下。Output:563故答案为\(563\)。B题直接写Python暴力一下(欸怎么又来了)。总之就是写一个DFS,枚举每一个向外走,步数\(x\)满足\(x\le2020\)的点就好啦!Output:20312088故答案为\(20312088\)。C题直......
  • 蓝桥杯:七步诗 ← bfs
    【题目来源】https://www.lanqiao.cn/problems/3447/learning/【题目描述】煮豆燃豆苴,豆在釜中泣。本是同根生,相煎何太急?---曹植所以,这道题目关乎豆子!话说赤壁之战结束后,曹操的船舰被刘备烧了,引领军队从华容道撤退,路上遇到了泥泞,道路不通畅,又刮起了大风,没办法,只好让羸弱的......