P8799 [蓝桥杯 2022 国 B] 齿轮
如果在这里发现 a a a 数组里有 2 2 2 个数相除等于 x x x,就输出 Y E S YES YES,否则就输出 N O NO NO。
for(i=1;i<=n;++i)
for(j=i+1;j<=n;++j)
if(a[i]%a[j]==0)
b[a[i]/a[j]]=1;
我们直接枚举另一个数的因子。判断 a i × j a_i ×j ai×j 有没有出现过,用桶记录即可。
#include<bits/stdc++.h>
using namespace std;
int main()
{
vector<bool> st(200010),b(200010);
int n,m;cin>>n>>m;
vector<int> a(n);
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++) st[a[i]]=true;
for(int i=0;i<n;i++)
for(int j=0;j*a[i]<=200000;j++)
if(st[a[i]*j])
b[j]=1;
while(m--)
{
int x;cin>>x;
if(b[x]) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}