P8799 [蓝桥杯 2022 国 B] 齿轮

P8799 [蓝桥杯 2022 国 B] 齿轮 - 洛谷

思路一 遍历动态数组,复杂度O(N),70%超时 

思路二 用unordered_set 优化  65%超时;

思路三 先预处理 AC

#include
#define endl '\n'
#define int long long
using namespace std;

signed main()
{
	int n,Q;
	int max1=0;
	cin>>n>>Q;
	vector R(n);//读取半径
	unordered_set r;//去重
	int ans[300000];//存储q
	ans[1]=1;
	for(int i=0;i>R[i];
        if(r.count(R[i]))ans[1]=1;//如果相同齿轮则q=1有可能
		r.insert(R[i]);
		max1=max(R[i],max1);//找R最大值
	}
	//预处理
	for(auto iter: r)
	{
		for(int j=iter*2;j<=max1;j+=iter)//从iter的倍数枚举
		{
			if(r.count(j))//检查j是否存在
			ans[j/iter]=1;//j/iter 就是合理的q
		}
	}
	
	for(int i=1;i<=Q;i++)
	{
		int q;cin>>q;
		if(ans[q])
		cout<<"YES"<

 

你可能感兴趣的:(蓝桥杯,c++,算法)